[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Main] FYI New options support.
From: |
Pascal Bart |
Subject: |
[Main] FYI New options support. |
Date: |
Thu, 20 Sep 2001 20:29:48 +0000 (GMT) |
Hello,
I've consulted Marc and Robert, and they were ok with the
following patch, so I apply it. Finally, Marc convinces me that token_e
should stay in lex.h file.
Now, users could invoke options with %no_lines or %no-lines.
Index: ChangeLog
===================================================================
RCS file: /cvsroot/bison/bison/ChangeLog,v
retrieving revision 1.212
diff -u -r1.212 ChangeLog
--- ChangeLog 2001/09/19 19:25:02 1.212
+++ ChangeLog 2001/09/20 18:15:16
@@ -1,3 +1,28 @@
+2001-09-20 Pascal Bart <address@hidden>
+
+ * src/lex.c (parse_percent_token): Change type of variable `tx', which
+ is now an option_table_struct*.
+ (option_strcmp): New function option_strcmp.
+ (parse_percent_token): Call option_strcmp.
+ * src/getargs.c (xalloc.h, options.h): Include it.
+ (getargs): Call create_long_option_table.
+ (getargs): Free longopts at the end of the function.
+ (shortopts): Move in options.c.
+ * 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/Makefile.am: Adjust.
+ * src/options.c (option_table): Create from longopts and percent_table.
+ * src/getargs.c (longopts): Delete.
+ * src/lex.c (struct percent_table_struct): Delete.
+ (percent_table): Delete.
+ (options.h): Include it.
+ * src/options.c: Create.
+ * src/options.h: Create.
+ Declare enum opt_access_e.
+ Define struct option_table_struct.
+
2001-09-19 Pascal Bart <address@hidden>
* src/bison.simple: s/%%filename/%%skeleton.
Index: src/Makefile.am
===================================================================
RCS file: /cvsroot/bison/bison/src/Makefile.am,v
retrieving revision 1.29
diff -u -r1.29 Makefile.am
--- src/Makefile.am 2001/09/02 15:43:29 1.29
+++ src/Makefile.am 2001/09/20 18:15:16
@@ -14,7 +14,7 @@
derives.c \
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
output.c print_graph.c \
- muscle_tab.c \
+ muscle_tab.c options.c \
print.c reader.c reduce.c symtab.c warshall.c vcg.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 print_graph.h \
- muscle_tab.h \
+ muscle_tab.h options.h \
print.h reader.h reduce.h state.h symtab.h warshall.h system.h \
types.h vcg.h vcg_defaults.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/09/20 18:15:16
@@ -24,6 +24,8 @@
#include "files.h"
#include "complain.h"
#include "getargs.h"
+#include "xalloc.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.37
diff -u -r1.37 lex.c
--- src/lex.c 2001/08/30 00:41:37 1.37
+++ src/lex.c 2001/09/20 18:15:16
@@ -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,23 @@
}
}
-/* 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;
-};
+/* This function is a strcmp, which doesn't differentiate `-' and `_'
+ chars. */
-struct percent_table_struct percent_table[] =
+static int
+option_strcmp (const char *left, const char *right)
{
- { "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 */
- { "skeleton", NULL, tok_skel }, /* -S */
- { "semantic_parser", &semantic_parser, tok_noop },
- { "pure_parser", &pure_parser, tok_noop },
+ const unsigned char *l, *r;
+ int c;
- { NULL, NULL, tok_illegal}
-};
+ assert(left != NULL && right != NULL);
+ l = (const unsigned char *)left;
+ r = (const unsigned char *)right;
+ while (((c = *l - *r++) == 0 && *l != '\0')
+ || ((*l == '-' || *l == '_') && (*r == '_' || *r == '-')))
+ l++;
+ return c;
+}
/* Parse a token which starts with %.
Assumes the % has already been read and discarded. */
@@ -571,7 +535,7 @@
parse_percent_token (void)
{
int c;
- struct percent_table_struct *tx;
+ const struct option_table_struct *tx;
c = getc (finput);
@@ -616,8 +580,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)
+ && option_strcmp (token_buffer + 1, tx->name) == 0)
break;
if (tx->set_flag)
@@ -626,7 +591,7 @@
return tok_noop;
}
- switch (tx->retval)
+ switch (tx->ret_val)
{
case tok_setopt:
*((char **) (tx->set_flag)) = optarg;
@@ -638,5 +603,5 @@
break;
}
- return tx->retval;
+ return tx->ret_val;
}
Index: src/reader.c
===================================================================
RCS file: /cvsroot/bison/bison/src/reader.c,v
retrieving revision 1.86
diff -u -r1.86 reader.c
--- src/reader.c 2001/09/07 16:50:01 1.86
+++ src/reader.c 2001/09/20 18:15:17
@@ -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"
Pascal Bart (address@hidden)
options.c
Description: Text document
options.h
Description: Text document
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Main] FYI New options support.,
Pascal Bart <=