bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Main] Concentrate options.


From: Pascal Bart
Subject: [Main] Concentrate options.
Date: Thu, 30 Aug 2001 08:32:45 +0000 (GMT)

Hello,

        Here a patch to concentrate all options in one point, in fact I've
create two files, options.{c,h}, which work only about options stuff.
I've got any little problems with `getopt.h', so I need to convert my
table in another table (a little stupid, but I've not the choice for the
moment).  So tell me, what do you think about it ?
(Notice : Patch wasn't synchronise with latest CVS version.)

? src/options.c
? src/options.h
cvs server: Diffing .
Index: ChangeLog
===================================================================
RCS file: /cvsroot/bison/bison/ChangeLog,v
retrieving revision 1.194
diff -u -r1.194 ChangeLog
--- ChangeLog   2001/08/29 14:17:00     1.194
+++ ChangeLog   2001/08/29 23:10:03
@@ -1,3 +1,37 @@
+2001-08-30  Pascal Bart  <address@hidden>
+
+       * src/options.h (struct percent_table_struct): Delete.
+       (percent_table): Delete.
+
+       * src/options.c (option_table): "Unstatic" option_table.
+       * src/lex.c (parse_percent_token): Change type of variable `tx', which
+       is now an option_table_struct*.
+
+       * src/getargs.c (xalloc.h): Include it.
+       (getargs): Call create_long_option_table.
+       (getargs): Free longopts at the end of the function.
+
+       * src/options.c (create_long_option_table): New function.  Convert
+       information from option_table to option structure.
+
+       * src/reader.c (options.h): Include it.
+       * src/lex.c (options.h): Include it.
+
+       * src/Makefile.am: Adjust.
+
+       * src/options.c (option_table): Create from longopts and percent_table.
+       * src/getargs.c (longopts); Delete.
+       * src/lex.c (percent_table): Delete.
+       Delete struct percent_table_struct declarations.
+
+       * src/options.h: Declare enum opt_access_e.
+       Define struct option_table_struct.
+       Copy declarations of struct percent_table_struct from `lex.c'.
+
+       * src/options.h: Create.
+       Copy enum token_e from `lex.h'.
+       * src/lex.h: Delete enum token_e.
+
 2001-08-29  Marc Autret  <address@hidden>

        * src/bison.simple: Add %%user_code directive at the end.
cvs server: Diffing config
cvs server: Diffing doc
cvs server: Diffing etc
cvs server: Diffing intl
cvs server: Diffing lib
cvs server: Diffing m4
cvs server: Diffing po
cvs server: Diffing src
Index: src/Makefile.am
===================================================================
RCS file: /cvsroot/bison/bison/src/Makefile.am,v
retrieving revision 1.28
diff -u -r1.28 Makefile.am
--- src/Makefile.am     2001/08/25 14:21:46     1.28
+++ src/Makefile.am     2001/08/29 23:10:03
@@ -14,7 +14,7 @@
     derives.c  \
     files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
     output.c   \
-    macrotab.c \
+    macrotab.c options.c  \
     print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c

 EXTRA_bison_SOURCES = vmsgetargs.c
@@ -23,7 +23,7 @@
  derives.h \
  files.h getargs.h gram.h lalr.h lex.h nullable.h \
  output.h state.h      \
- macrotab.h \
+ macrotab.h options.h  \
  print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
  vcg.h vcg_defaults.h print_graph.h

Index: src/getargs.c
===================================================================
RCS file: /cvsroot/bison/bison/src/getargs.c,v
retrieving revision 1.24
diff -u -r1.24 getargs.c
--- src/getargs.c       2001/08/06 09:22:33     1.24
+++ src/getargs.c       2001/08/29 23:10:03
@@ -20,10 +20,12 @@

 #include <stdio.h>
 #include "getopt.h"
+#include "xalloc.h"
 #include "system.h"
 #include "files.h"
 #include "complain.h"
 #include "getargs.h"
+#include "options.h"

 int debug_flag = 0;
 int defines_flag = 0;
@@ -39,37 +41,6 @@
 const char *skeleton = NULL;

 extern char *program_name;
-const char *shortopts = "yvgdhrltknVo:b:p:S:";
-static struct option longopts[] =
-{
-  /* Operation modes. */
-  {"help",             no_argument,    0, 'h'},
-  {"version",          no_argument,    0, 'V'},
-  {"yacc",             no_argument,    0, 'y'},
-  {"fixed-output-files",no_argument,   0, 'y'},
-
-  /* Parser. */
-  {"skeleton",         required_argument,      0, 'S'},
-  {"debug",            no_argument,            0, 'd'},
-  {"locations",                no_argument,    &locations_flag, 1},
-  /* was 'a';  apparently unused -wjh */
-  {"name-prefix",      required_argument,      0, 'p'},
-  {"no-lines",         no_argument,            0, 'l'},
-  {"no-parser",                no_argument,            0, 'n'},
-  {"raw",              no_argument,            0, 'r'},
-  {"token-table",      no_argument,            0, 'k'},
-
-  /* Output. */
-  {"defines",          no_argument,            0, 'd'},
-  {"verbose",          no_argument,            0, 'v'},
-  {"file-prefix",      required_argument,      0, 'b'},
-  {"output-file",      required_argument,      0, 'o'},
-  {"graph",            no_argument,            0, 'g'},
-
-  /* Hidden. */
-  {"statistics",       no_argument,    &statistics_flag, 1},
-  {0, 0, 0, 0}
-};

 /*---------------------------.
 | Display the help message.  |
@@ -161,6 +132,7 @@
 {
   int c;

+  create_long_option_table ();
   while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
     switch (c)
       {
@@ -234,6 +206,7 @@
        exit (1);
       }

+  XFREE (longopts);
   if (optind == argc)
     {
       fprintf (stderr, _("%s: no grammar file given\n"), program_name);
Index: src/lex.c
===================================================================
RCS file: /cvsroot/bison/bison/src/lex.c,v
retrieving revision 1.36
diff -u -r1.36 lex.c
--- src/lex.c   2001/08/25 14:27:57     1.36
+++ src/lex.c   2001/08/29 23:10:03
@@ -23,6 +23,7 @@
 #include "files.h"
 #include "getopt.h"            /* for optarg */
 #include "symtab.h"
+#include "options.h"
 #include "lex.h"
 #include "xalloc.h"
 #include "complain.h"
@@ -509,60 +510,6 @@
     }
 }

-/* the following table dictates the action taken for the various %
-   directives.  A set_flag value causes the named flag to be set.  A
-   retval action returns the code.  */
-struct percent_table_struct
-{
-  const char *name;
-  void *set_flag;
-  int retval;
-};
-
-struct percent_table_struct percent_table[] =
-{
-  { "token",           NULL,                   tok_token },
-  { "term",            NULL,                   tok_token },
-  { "nterm",           NULL,                   tok_nterm },
-  { "type",            NULL,                   tok_type },
-  { "guard",           NULL,                   tok_guard },
-  { "union",           NULL,                   tok_union },
-  { "expect",          NULL,                   tok_expect },
-  { "thong",           NULL,                   tok_thong },
-  { "start",           NULL,                   tok_start },
-  { "left",            NULL,                   tok_left },
-  { "right",           NULL,                   tok_right },
-  { "nonassoc",                NULL,                   tok_nonassoc },
-  { "binary",          NULL,                   tok_nonassoc },
-  { "prec",            NULL,                   tok_prec },
-  { "locations",       &locations_flag,        tok_noop },     /* -l */
-  { "no_lines",                &no_lines_flag,         tok_noop },     /* -l */
-  { "raw",             NULL,                   tok_obsolete }, /* -r */
-  { "token_table",     &token_table_flag,      tok_noop },     /* -k */
-  { "yacc",            &yacc_flag,             tok_noop },     /* -y */
-  { "fixed_output_files",&yacc_flag,           tok_noop },     /* -y */
-  { "defines",         &defines_flag,          tok_noop },     /* -d */
-  { "no_parser",       &no_parser_flag,        tok_noop },     /* -n */
-#if 0
-  /* For the time being, this is not enabled yet, while it's possible
-     though, since we use obstacks.  The only risk is with semantic
-     parsers which will output an `include' of an output file: be sure
-     that the naem included is indeed the name of the output file.  */
-  { "output_file",     &spec_outfile,          tok_setopt },   /* -o */
-  { "file_prefix",     &spec_file_prefix,      tok_setopt },   /* -b */
-  { "name_prefix",     &spec_name_prefix,      tok_setopt },   /* -p */
-#endif
-  { "header_extension",        NULL,                   tok_hdrext},
-  { "source_extension",        NULL,                   tok_srcext},
-  { "define",          NULL,                   tok_define },
-  { "verbose",         &verbose_flag,          tok_noop },     /* -v */
-  { "debug",           &debug_flag,            tok_noop },     /* -t */
-  { "semantic_parser", &semantic_parser,       tok_noop },
-  { "pure_parser",     &pure_parser,           tok_noop },
-
-  { NULL, NULL, tok_illegal}
-};
-
 /* Parse a token which starts with %.
    Assumes the % has already been read and discarded.  */

@@ -570,7 +517,7 @@
 parse_percent_token (void)
 {
   int c;
-  struct percent_table_struct *tx;
+  struct option_table_struct *tx;

   c = getc (finput);

@@ -615,8 +562,9 @@
   token_buffer = obstack_finish (&token_obstack);

   /* table lookup % directive */
-  for (tx = percent_table; tx->name; tx++)
-    if (strcmp (token_buffer + 1, tx->name) == 0)
+  for (tx = option_table; tx->name; tx++)
+    if ((tx->access == opt_percent || tx->access == opt_both)
+       && strcmp (token_buffer + 1, tx->name) == 0)
       break;

   if (tx->set_flag)
@@ -625,7 +573,7 @@
       return tok_noop;
     }

-  switch (tx->retval)
+  switch (tx->ret_val)
     {
     case tok_setopt:
       *((char **) (tx->set_flag)) = optarg;
@@ -637,5 +585,5 @@
       break;
     }

-  return tx->retval;
+  return tx->ret_val;
 }
Index: src/lex.h
===================================================================
RCS file: /cvsroot/bison/bison/src/lex.h,v
retrieving revision 1.16
diff -u -r1.16 lex.h
--- src/lex.h   2001/08/25 14:27:57     1.16
+++ src/lex.h   2001/08/29 23:10:03
@@ -21,41 +21,6 @@
 #ifndef LEX_H_
 # define LEX_H_

-/* Token-type codes. */
-typedef enum token_e
-  {
-    tok_eof,
-    tok_identifier,
-    tok_comma,
-    tok_colon,
-    tok_semicolon,
-    tok_bar,
-    tok_left_curly,
-    tok_two_percents,
-    tok_percent_left_curly,
-    tok_token,
-    tok_nterm,
-    tok_guard,
-    tok_type,
-    tok_union,
-    tok_start,
-    tok_left,
-    tok_right,
-    tok_nonassoc,
-    tok_prec,
-    tok_typename,
-    tok_number,
-    tok_expect,
-    tok_thong,
-    tok_hdrext,
-    tok_srcext,
-    tok_define,
-    tok_noop,
-    tok_setopt,
-    tok_illegal,
-    tok_obsolete
-  } token_t;
-
 extern const char *token_buffer;
 extern bucket *symval;
 extern int numval;
Index: src/reader.c
===================================================================
RCS file: /cvsroot/bison/bison/src/reader.c,v
retrieving revision 1.78
diff -u -r1.78 reader.c
--- src/reader.c        2001/08/29 14:17:00     1.78
+++ src/reader.c        2001/08/29 23:10:04
@@ -28,6 +28,7 @@
 #include "files.h"
 #include "xalloc.h"
 #include "symtab.h"
+#include "options.h"
 #include "lex.h"
 #include "gram.h"
 #include "complain.h"
cvs server: Diffing tests

Pascal Bart (address@hidden)

Attachment: options.c
Description: options.c

Attachment: options.h
Description: options.h


reply via email to

[Prev in Thread] Current Thread [Next in Thread]