From: Joel E. Denny Date: Sat, 2 Dec 2006 01:52:16 +0000 (+0000) Subject: Support a file name argument to %defines. Deprecate `=' in X-Git-Tag: v2.3b~234 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/02975b9aade52df362645b82a81ac2134290e221 Support a file name argument to %defines. Deprecate `=' in %file-prefix, %name-prefix, and %output. Discussed at . * NEWS (2.3a+): Mention. * doc/bison.texinfo (Decl Summary, Bison Symbols): Add entry for new form of %defines, and remove `=' from entries for %file-prefix, %name-prefix, and %output. * src/parse-gram.y (prologue_declaration): Implement. * tests/calc.at (Simple LALR Calculator, Simple GLR Calculator, Simple LALR1 C++ Calculator, Simple GLR C++ Calculator): Remove the `=' from all but one occurrence of %name-prefix. * tests/headers.at (export YYLTYPE): Remove the `=' from %name-prefix. * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Likewise. * tests/output.at (AT_CHECK_OUTPUT): Remove the `=' from all but one occurrence of each of %file-prefix and %output. Add check for %defines with argument. * tests/reduce.at (Useless Terminals, Useless Nonterminals, Useless Rules, Reduced Automaton, Underivable Rules, Empty Language): Remove the `=' from %output. --- diff --git a/ChangeLog b/ChangeLog index 7451a103..c5affb72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2006-12-01 Joel E. Denny + + Support a file name argument to %defines. Deprecate `=' in + %file-prefix, %name-prefix, and %output. Discussed at + . + * NEWS (2.3a+): Mention. + * doc/bison.texinfo (Decl Summary, Bison Symbols): Add entry for new + form of %defines, and remove `=' from entries for %file-prefix, + %name-prefix, and %output. + * src/parse-gram.y (prologue_declaration): Implement. + * tests/calc.at (Simple LALR Calculator, Simple GLR Calculator, Simple + LALR1 C++ Calculator, Simple GLR C++ Calculator): Remove the `=' from + all but one occurrence of %name-prefix. + * tests/headers.at (export YYLTYPE): Remove the `=' from %name-prefix. + * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Likewise. + * tests/output.at (AT_CHECK_OUTPUT): Remove the `=' from all but one + occurrence of each of %file-prefix and %output. Add check for %defines + with argument. + * tests/reduce.at (Useless Terminals, Useless Nonterminals, + Useless Rules, Reduced Automaton, Underivable Rules, Empty Language): + Remove the `=' from %output. + 2006-11-21 Joel E. Denny Don't escape $ in test case titles since Autoconf 2.61 now does that diff --git a/NEWS b/NEWS index 607c23ef..0e081210 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,18 @@ Changes in version 2.3a+ (????-??-??): * The -g and --graph options now output graphs in Graphviz DOT format, not VCG format. +* The grammar file may now specify the name of the parser header file using + %defines. For example: + + %defines "parser.h" + +* The `=' that used to be required in the following declarations is now + deprecated: + + %file-prefix "parser" + %name-prefix "c_" + %output "parser.c" + * Revised warning: unset or unused mid-rule values Since Bison 2.2, Bison has warned about mid-rule values that are set but not diff --git a/doc/bison.texinfo b/doc/bison.texinfo index af4cf4f0..6183793b 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -4598,12 +4598,16 @@ header also contains their code. @xref{Table of Symbols, ,%requires}. @end deffn +@deffn {Directive} %defines @var{defines-file} +Same as above, but save in the file @var{defines-file}. +@end deffn + @deffn {Directive} %destructor Specify how the parser should reclaim the memory associated to discarded symbols. @xref{Destructor Decl, , Freeing Discarded Symbols}. @end deffn -@deffn {Directive} %file-prefix="@var{prefix}" +@deffn {Directive} %file-prefix "@var{prefix}" Specify a prefix to use for all Bison output file names. The names are chosen as if the input file were named @file{@var{prefix}.y}. @end deffn @@ -4616,14 +4620,14 @@ grammar does not use it, using @samp{%locations} allows for more accurate syntax error messages. @end deffn -@deffn {Directive} %name-prefix="@var{prefix}" +@deffn {Directive} %name-prefix "@var{prefix}" Rename the external symbols used in the parser so that they start with @var{prefix} instead of @samp{yy}. The precise list of symbols renamed in C parsers is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs}, @code{yylval}, @code{yychar}, @code{yydebug}, and (if locations are used) @code{yylloc}. For example, if you use -@samp{%name-prefix="c_"}, the names become @code{c_parse}, @code{c_lex}, +@samp{%name-prefix "c_"}, the names become @code{c_parse}, @code{c_lex}, and so on. In C++ parsers, it is only the surrounding namespace which is named @var{prefix} instead of @samp{yy}. @xref{Multiple Parsers, ,Multiple Parsers in the Same Program}. @@ -4656,7 +4660,7 @@ associate errors with the parser file, treating it an independent source file in its own right. @end deffn -@deffn {Directive} %output="@var{file}" +@deffn {Directive} %output "@var{file}" Specify @var{file} for the parser file. @end deffn @@ -7265,7 +7269,7 @@ Pretend that @code{%locations} was specified. @xref{Decl Summary}. @item -p @var{prefix} @itemx --name-prefix=@var{prefix} -Pretend that @code{%name-prefix="@var{prefix}"} was specified. +Pretend that @code{%name-prefix "@var{prefix}"} was specified. @xref{Decl Summary}. @item -l @@ -8653,6 +8657,11 @@ Bison declaration to create a header file meant for the scanner. @xref{Decl Summary}. @end deffn +@deffn {Directive} %defines @var{defines-file} +Same as above, but save in the file @var{defines-file}. +@xref{Decl Summary}. +@end deffn + @deffn {Directive} %destructor Specify how the parser should reclaim the memory associated to discarded symbols. @xref{Destructor Decl, , Freeing Discarded Symbols}. @@ -8685,7 +8694,7 @@ Bison declaration to request verbose, specific error message strings when @code{yyerror} is called. @end deffn -@deffn {Directive} %file-prefix="@var{prefix}" +@deffn {Directive} %file-prefix "@var{prefix}" Bison declaration to set the prefix of the output files. @xref{Decl Summary}. @end deffn @@ -8717,7 +8726,7 @@ function is applied to the two semantic values to get a single result. @xref{GLR Parsers, ,Writing @acronym{GLR} Parsers}. @end deffn -@deffn {Directive} %name-prefix="@var{prefix}" +@deffn {Directive} %name-prefix "@var{prefix}" Bison declaration to rename the external symbols. @xref{Decl Summary}. @end deffn @@ -8739,7 +8748,7 @@ Bison declaration to assign nonassociativity to token(s). @xref{Precedence Decl, ,Operator Precedence}. @end deffn -@deffn {Directive} %output="@var{file}" +@deffn {Directive} %output "@var{file}" Bison declaration to set the name of the parser file. @xref{Decl Summary}. @end deffn diff --git a/src/parse-gram.c b/src/parse-gram.c index 0d1acd70..7d90f772 100644 --- a/src/parse-gram.c +++ b/src/parse-gram.c @@ -562,16 +562,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 205 +#define YYLAST 182 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 60 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 31 /* YYNRULES -- Number of rules. */ -#define YYNRULES 99 +#define YYNRULES 103 /* YYNRULES -- Number of states. */ -#define YYNSTATES 138 +#define YYNSTATES 142 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -620,18 +620,19 @@ static const yytype_uint8 yytranslate[] = #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ -static const yytype_uint8 yyprhs[] = +static const yytype_uint16 yyprhs[] = { 0, 0, 3, 8, 9, 12, 14, 16, 18, 22, - 24, 26, 29, 32, 36, 38, 41, 44, 46, 50, - 52, 54, 58, 61, 63, 65, 68, 71, 73, 75, - 77, 79, 81, 83, 86, 90, 94, 96, 98, 101, - 104, 107, 110, 111, 113, 117, 118, 122, 123, 127, - 131, 135, 137, 139, 141, 142, 144, 146, 149, 151, - 154, 156, 158, 160, 162, 164, 166, 169, 172, 176, - 178, 181, 183, 186, 188, 191, 194, 195, 199, 201, - 205, 208, 209, 212, 215, 219, 223, 227, 229, 231, - 232, 234, 236, 238, 240, 242, 244, 246, 248, 249 + 24, 27, 29, 32, 35, 38, 42, 44, 47, 50, + 52, 55, 59, 61, 63, 66, 70, 73, 75, 77, + 80, 83, 85, 87, 89, 91, 93, 95, 98, 102, + 106, 108, 110, 113, 116, 119, 122, 123, 125, 129, + 130, 134, 135, 139, 143, 147, 149, 151, 153, 154, + 156, 158, 161, 163, 166, 168, 170, 172, 174, 176, + 178, 181, 184, 188, 190, 193, 195, 198, 200, 203, + 206, 207, 211, 213, 217, 220, 221, 224, 227, 231, + 235, 239, 241, 243, 244, 246, 248, 250, 252, 254, + 256, 258, 260, 261 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -639,45 +640,47 @@ static const yytype_int8 yyrhs[] = { 61, 0, -1, 62, 52, 77, 90, -1, -1, 62, 63, -1, 64, -1, 54, -1, 18, -1, 20, 3, - 84, -1, 21, -1, 22, -1, 23, 4, -1, 24, - 4, -1, 25, 49, 3, -1, 26, -1, 27, 46, - -1, 28, 46, -1, 29, -1, 30, 49, 3, -1, - 32, -1, 33, -1, 34, 49, 3, -1, 35, 46, - -1, 37, -1, 38, -1, 39, 3, -1, 41, 3, - -1, 43, -1, 44, -1, 45, -1, 55, -1, 69, - -1, 66, -1, 42, 88, -1, 8, 46, 73, -1, - 9, 46, 73, -1, 19, -1, 31, -1, 16, 85, - -1, 17, 85, -1, 36, 85, -1, 40, 85, -1, - -1, 50, -1, 59, 65, 46, -1, -1, 6, 67, - 76, -1, -1, 5, 68, 76, -1, 7, 56, 72, - -1, 70, 71, 72, -1, 10, -1, 11, -1, 12, - -1, -1, 56, -1, 88, -1, 72, 88, -1, 74, - -1, 73, 74, -1, 88, -1, 56, -1, 57, -1, - 58, -1, 56, -1, 86, -1, 86, 4, -1, 86, - 89, -1, 86, 4, 89, -1, 75, -1, 76, 75, - -1, 78, -1, 77, 78, -1, 79, -1, 64, 55, - -1, 1, 55, -1, -1, 87, 80, 81, -1, 82, - -1, 81, 53, 82, -1, 81, 55, -1, -1, 82, - 88, -1, 82, 46, -1, 82, 13, 88, -1, 82, - 14, 4, -1, 82, 15, 56, -1, 3, -1, 85, - -1, -1, 83, -1, 46, -1, 50, -1, 47, -1, - 51, -1, 86, -1, 89, -1, 3, -1, -1, 52, - 48, -1 + 84, -1, 21, -1, 21, 3, -1, 22, -1, 23, + 4, -1, 24, 4, -1, 25, 3, -1, 25, 49, + 3, -1, 26, -1, 27, 46, -1, 28, 46, -1, + 29, -1, 30, 3, -1, 30, 49, 3, -1, 32, + -1, 33, -1, 34, 3, -1, 34, 49, 3, -1, + 35, 46, -1, 37, -1, 38, -1, 39, 3, -1, + 41, 3, -1, 43, -1, 44, -1, 45, -1, 55, + -1, 69, -1, 66, -1, 42, 88, -1, 8, 46, + 73, -1, 9, 46, 73, -1, 19, -1, 31, -1, + 16, 85, -1, 17, 85, -1, 36, 85, -1, 40, + 85, -1, -1, 50, -1, 59, 65, 46, -1, -1, + 6, 67, 76, -1, -1, 5, 68, 76, -1, 7, + 56, 72, -1, 70, 71, 72, -1, 10, -1, 11, + -1, 12, -1, -1, 56, -1, 88, -1, 72, 88, + -1, 74, -1, 73, 74, -1, 88, -1, 56, -1, + 57, -1, 58, -1, 56, -1, 86, -1, 86, 4, + -1, 86, 89, -1, 86, 4, 89, -1, 75, -1, + 76, 75, -1, 78, -1, 77, 78, -1, 79, -1, + 64, 55, -1, 1, 55, -1, -1, 87, 80, 81, + -1, 82, -1, 81, 53, 82, -1, 81, 55, -1, + -1, 82, 88, -1, 82, 46, -1, 82, 13, 88, + -1, 82, 14, 4, -1, 82, 15, 56, -1, 3, + -1, 85, -1, -1, 83, -1, 46, -1, 50, -1, + 47, -1, 51, -1, 86, -1, 89, -1, 3, -1, + -1, 52, 48, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 210, 210, 218, 220, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 238, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 260, 261, 262, 266, 274, 282, 286, 290, 291, - 292, 293, 304, 305, 309, 337, 337, 342, 342, 347, - 358, 373, 374, 375, 379, 380, 385, 387, 392, 393, - 397, 398, 399, 400, 405, 410, 415, 421, 427, 438, - 439, 448, 449, 455, 456, 457, 464, 464, 468, 469, - 470, 475, 476, 478, 480, 482, 484, 494, 495, 501, - 505, 510, 526, 528, 537, 542, 543, 548, 555, 557 + 229, 234, 235, 236, 237, 238, 239, 244, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 268, 269, 270, 274, 282, + 290, 294, 298, 299, 300, 301, 312, 313, 317, 345, + 345, 350, 350, 355, 366, 381, 382, 383, 387, 388, + 393, 395, 400, 401, 405, 406, 407, 408, 413, 418, + 423, 429, 435, 446, 447, 456, 457, 463, 464, 465, + 472, 472, 476, 477, 478, 483, 484, 486, 488, 490, + 492, 502, 503, 509, 513, 518, 534, 536, 545, 550, + 551, 556, 563, 565 }; #endif @@ -730,28 +733,30 @@ static const yytype_uint8 yyr1[] = 0, 60, 61, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 65, 65, 64, 67, 66, 68, 66, 66, - 69, 70, 70, 70, 71, 71, 72, 72, 73, 73, - 74, 74, 74, 74, 75, 75, 75, 75, 75, 76, - 76, 77, 77, 78, 78, 78, 80, 79, 81, 81, - 81, 82, 82, 82, 82, 82, 82, 83, 83, 84, - 84, 85, 86, 86, 87, 88, 88, 89, 90, 90 + 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 65, 65, 64, 67, + 66, 68, 66, 66, 69, 70, 70, 70, 71, 71, + 72, 72, 73, 73, 74, 74, 74, 74, 75, 75, + 75, 75, 75, 76, 76, 77, 77, 78, 78, 78, + 80, 79, 81, 81, 81, 82, 82, 82, 82, 82, + 82, 83, 83, 84, 84, 85, 86, 86, 87, 88, + 88, 89, 90, 90 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 4, 0, 2, 1, 1, 1, 3, 1, - 1, 2, 2, 3, 1, 2, 2, 1, 3, 1, - 1, 3, 2, 1, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 2, 3, 3, 1, 1, 2, 2, - 2, 2, 0, 1, 3, 0, 3, 0, 3, 3, - 3, 1, 1, 1, 0, 1, 1, 2, 1, 2, - 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, - 2, 1, 2, 1, 2, 2, 0, 3, 1, 3, - 2, 0, 2, 2, 3, 3, 3, 1, 1, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 2 + 2, 1, 2, 2, 2, 3, 1, 2, 2, 1, + 2, 3, 1, 1, 2, 3, 2, 1, 1, 2, + 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, + 1, 1, 2, 2, 2, 2, 0, 1, 3, 0, + 3, 0, 3, 3, 3, 1, 1, 1, 0, 1, + 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, + 2, 2, 3, 1, 2, 1, 2, 1, 2, 2, + 0, 3, 1, 3, 2, 0, 2, 2, 3, 3, + 3, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -759,114 +764,112 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 0, 1, 47, 45, 0, 0, 0, 51, - 52, 53, 0, 0, 7, 36, 0, 9, 10, 0, - 0, 0, 14, 0, 0, 17, 0, 37, 19, 20, - 0, 0, 0, 23, 24, 0, 0, 0, 0, 27, - 28, 29, 0, 6, 30, 42, 4, 5, 32, 31, - 54, 0, 0, 0, 0, 0, 91, 38, 39, 89, - 11, 12, 0, 15, 16, 0, 0, 22, 40, 25, - 41, 26, 97, 93, 92, 95, 33, 96, 0, 94, - 0, 0, 71, 73, 76, 43, 0, 55, 0, 64, - 69, 48, 65, 46, 49, 56, 61, 62, 63, 34, - 58, 60, 35, 87, 90, 8, 88, 13, 18, 21, - 75, 74, 0, 72, 2, 81, 44, 50, 70, 66, - 67, 57, 59, 99, 77, 78, 68, 81, 80, 0, - 0, 0, 83, 82, 79, 84, 85, 86 + 3, 0, 0, 1, 51, 49, 0, 0, 0, 55, + 56, 57, 0, 0, 7, 40, 0, 9, 11, 0, + 0, 0, 16, 0, 0, 19, 0, 41, 22, 23, + 0, 0, 0, 27, 28, 0, 0, 0, 0, 31, + 32, 33, 0, 6, 34, 46, 4, 5, 36, 35, + 58, 0, 0, 0, 0, 0, 95, 42, 43, 93, + 10, 12, 13, 14, 0, 17, 18, 20, 0, 24, + 0, 26, 44, 29, 45, 30, 101, 97, 96, 99, + 37, 100, 0, 98, 0, 0, 75, 77, 80, 47, + 0, 59, 0, 68, 73, 52, 69, 50, 53, 60, + 65, 66, 67, 38, 62, 64, 39, 91, 94, 8, + 92, 15, 21, 25, 79, 78, 0, 76, 2, 85, + 48, 54, 74, 70, 71, 61, 63, 103, 81, 82, + 72, 85, 84, 0, 0, 0, 87, 86, 83, 88, + 89, 90 }; /* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int8 yydefgoto[] = +static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 46, 80, 86, 48, 52, 51, 49, - 50, 88, 94, 99, 100, 90, 91, 81, 82, 83, - 115, 124, 125, 104, 105, 57, 75, 84, 101, 77, - 114 + -1, 1, 2, 46, 84, 90, 48, 52, 51, 49, + 50, 92, 98, 103, 104, 94, 95, 85, 86, 87, + 119, 128, 129, 108, 109, 57, 79, 88, 105, 81, + 118 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -89 -static const yytype_int16 yypact[] = +#define YYPACT_NINF -97 +static const yytype_int8 yypact[] = { - -89, 14, 112, -89, -89, -89, -33, -16, -11, -89, - -89, -89, -6, -6, -89, -89, 39, -89, -89, 42, - 43, 5, -89, 9, 11, -89, 10, -89, -89, -89, - 12, 24, -6, -89, -89, 48, -6, 68, 30, -89, - -89, -89, 57, -89, -89, 28, -89, -89, -89, -89, - 29, -31, -31, 30, 25, 25, -89, -89, -89, 2, - -89, -89, 86, -89, -89, 87, 89, -89, -89, -89, - -89, -89, -89, -89, -89, -89, -89, -89, 40, -89, - 45, 1, -89, -89, -89, -89, 52, -89, 30, -89, - -89, -31, 35, -31, 30, -89, -89, -89, -89, 25, - -89, -89, 25, -89, -89, -89, -89, -89, -89, -89, - -89, -89, 46, -89, -89, -89, -89, 30, -89, 98, - -89, -89, -89, -89, -26, 155, -89, -89, -89, 30, - 99, 49, -89, -89, 155, -89, -89, -89 + -97, 3, 123, -97, -97, -97, -42, -6, -5, -97, + -97, -97, -3, -3, -97, -97, 41, 55, -97, 57, + 60, 1, -97, 36, 40, -97, 10, -97, -97, -97, + 23, 44, -3, -97, -97, 85, -3, 90, -2, -97, + -97, -97, 68, -97, -97, 46, -97, -97, -97, -97, + 38, 42, 42, -2, -1, -1, -97, -97, -97, 35, + -97, -97, -97, -97, 94, -97, -97, -97, 98, -97, + 99, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, 48, -97, 50, 11, -97, -97, -97, -97, + 61, -97, -2, -97, -97, 42, 5, 42, -2, -97, + -97, -97, -97, -1, -97, -97, -1, -97, -97, -97, + -97, -97, -97, -97, -97, -97, 58, -97, -97, -97, + -97, -2, -97, 109, -97, -97, -97, -97, -22, 21, + -97, -97, -97, -2, 110, 59, -97, -97, 21, -97, + -97, -97 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -89, -89, -89, -89, 100, -89, -89, -89, -89, -89, - -89, -89, 16, 51, -78, -57, 55, -89, 31, -89, - -89, -89, -18, -89, -89, -10, -7, -89, -38, -88, - -89 + -97, -97, -97, -97, 111, -97, -97, -97, -97, -97, + -97, -97, 24, 62, -96, -58, 66, -97, 37, -97, + -97, -97, -11, -97, -97, -7, 14, -97, -38, -91, + -97 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -99 +#define YYTABLE_NINF -103 static const yytype_int16 yytable[] = { - 76, -98, 78, 58, 120, 103, 4, 5, 6, 7, - 8, 9, 10, 11, 3, 95, 73, 12, 13, 74, - 15, 122, 68, 53, 122, 89, 70, 127, 72, 128, - 54, 126, 27, 72, 118, 55, 118, 32, 72, 119, - 56, 36, 59, 38, 92, 92, 60, 61, 56, 106, - 95, 69, 79, 112, 62, 63, 121, 64, 78, 65, - 45, 66, 4, 5, 6, 7, 8, 9, 10, 11, - 67, 71, 73, 12, 13, 74, 15, 73, 85, 121, - 74, 96, 97, 98, 92, 87, 92, 133, 27, 107, - 108, 135, 109, 32, 123, 110, 133, 36, 116, 38, - 111, 72, 47, 136, 117, 137, 102, 93, 79, 134, - 0, 0, 113, 0, 0, 0, 45, 4, 5, 6, - 7, 8, 9, 10, 11, 0, 0, 0, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 72, 0, - 0, 0, 0, 0, 42, 0, 43, 44, 129, 130, - 131, 45, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 73, 0, 0, 74 + 80, 76, 76, 3, 63, 124, 58, 126, 76, 123, + 126, -102, 82, 67, 53, 99, 4, 5, 6, 7, + 8, 9, 10, 11, 76, 72, 69, 12, 13, 74, + 15, 131, 130, 132, 133, 134, 135, 122, 107, 122, + 54, 55, 27, 56, 59, 77, 77, 32, 78, 78, + 64, 36, 110, 38, 99, 100, 101, 102, 60, 68, + 125, 61, 83, 116, 62, 96, 96, 136, 77, 82, + 45, 78, 70, 4, 5, 6, 7, 8, 9, 10, + 11, 56, 65, 125, 12, 13, 66, 15, 73, 77, + 71, 137, 78, 75, 91, 139, 89, 111, 93, 27, + 137, 112, 113, 114, 32, 115, 127, 120, 36, 96, + 38, 96, 76, 47, 140, 141, 121, 106, 97, 83, + 138, 0, 117, 0, 0, 0, 0, 45, 4, 5, + 6, 7, 8, 9, 10, 11, 0, 0, 0, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 0, + 0, 0, 0, 0, 0, 42, 0, 43, 44, 0, + 0, 0, 45 }; static const yytype_int16 yycheck[] = { - 38, 0, 1, 13, 92, 3, 5, 6, 7, 8, - 9, 10, 11, 12, 0, 53, 47, 16, 17, 50, - 19, 99, 32, 56, 102, 56, 36, 53, 3, 55, - 46, 119, 31, 3, 91, 46, 93, 36, 3, 4, - 46, 40, 3, 42, 51, 52, 4, 4, 46, 59, - 88, 3, 51, 52, 49, 46, 94, 46, 1, 49, - 59, 49, 5, 6, 7, 8, 9, 10, 11, 12, - 46, 3, 47, 16, 17, 50, 19, 47, 50, 117, - 50, 56, 57, 58, 91, 56, 93, 125, 31, 3, - 3, 129, 3, 36, 48, 55, 134, 40, 46, 42, - 55, 3, 2, 4, 88, 56, 55, 52, 51, 127, - -1, -1, 81, -1, -1, -1, 59, 5, 6, 7, - 8, 9, 10, 11, 12, -1, -1, -1, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 3, -1, - -1, -1, -1, -1, 52, -1, 54, 55, 13, 14, - 15, 59, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 46, 47, -1, -1, 50 + 38, 3, 3, 0, 3, 96, 13, 103, 3, 4, + 106, 0, 1, 3, 56, 53, 5, 6, 7, 8, + 9, 10, 11, 12, 3, 32, 3, 16, 17, 36, + 19, 53, 123, 55, 13, 14, 15, 95, 3, 97, + 46, 46, 31, 46, 3, 47, 47, 36, 50, 50, + 49, 40, 59, 42, 92, 56, 57, 58, 3, 49, + 98, 4, 51, 52, 4, 51, 52, 46, 47, 1, + 59, 50, 49, 5, 6, 7, 8, 9, 10, 11, + 12, 46, 46, 121, 16, 17, 46, 19, 3, 47, + 46, 129, 50, 3, 56, 133, 50, 3, 56, 31, + 138, 3, 3, 55, 36, 55, 48, 46, 40, 95, + 42, 97, 3, 2, 4, 56, 92, 55, 52, 51, + 131, -1, 85, -1, -1, -1, -1, 59, 5, 6, + 7, 8, 9, 10, 11, 12, -1, -1, -1, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, + -1, -1, -1, -1, -1, 52, -1, 54, 55, -1, + -1, -1, 59 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -879,14 +882,15 @@ static const yytype_uint8 yystos[] = 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 52, 54, 55, 59, 63, 64, 66, 69, 70, 68, 67, 56, 46, 46, 46, 85, 85, 3, - 4, 4, 49, 46, 46, 49, 49, 46, 85, 3, - 85, 3, 3, 47, 50, 86, 88, 89, 1, 51, - 64, 77, 78, 79, 87, 50, 65, 56, 71, 56, - 75, 76, 86, 76, 72, 88, 56, 57, 58, 73, - 74, 88, 73, 3, 83, 84, 85, 3, 3, 3, - 55, 55, 52, 78, 90, 80, 46, 72, 75, 4, - 89, 88, 74, 48, 81, 82, 89, 53, 55, 13, - 14, 15, 46, 88, 82, 88, 4, 56 + 3, 4, 4, 3, 49, 46, 46, 3, 49, 3, + 49, 46, 85, 3, 85, 3, 3, 47, 50, 86, + 88, 89, 1, 51, 64, 77, 78, 79, 87, 50, + 65, 56, 71, 56, 75, 76, 86, 76, 72, 88, + 56, 57, 58, 73, 74, 88, 73, 3, 83, 84, + 85, 3, 3, 3, 55, 55, 52, 78, 90, 80, + 46, 72, 75, 4, 89, 88, 74, 48, 81, 82, + 89, 53, 55, 13, 14, 15, 46, 88, 82, 88, + 4, 56 }; #define yyerrok (yyerrstatus = 0) @@ -1041,7 +1045,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs (quotearg_style (c_quoting_style, (yyvaluep->chars)), stderr); }; /* Line 670 of yacc.c */ -#line 1045 "parse-gram.c" +#line 1049 "parse-gram.c" break; case 4: /* "\"integer\"" */ @@ -1050,7 +1054,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%d", (yyvaluep->integer)); }; /* Line 670 of yacc.c */ -#line 1054 "parse-gram.c" +#line 1058 "parse-gram.c" break; case 46: /* "\"{...}\"" */ @@ -1059,7 +1063,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->code)); }; /* Line 670 of yacc.c */ -#line 1063 "parse-gram.c" +#line 1067 "parse-gram.c" break; case 47: /* "\"char\"" */ @@ -1068,7 +1072,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs (char_name ((yyvaluep->character)), stderr); }; /* Line 670 of yacc.c */ -#line 1072 "parse-gram.c" +#line 1076 "parse-gram.c" break; case 48: /* "\"epilogue\"" */ @@ -1077,7 +1081,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 670 of yacc.c */ -#line 1081 "parse-gram.c" +#line 1085 "parse-gram.c" break; case 50: /* "\"identifier\"" */ @@ -1086,7 +1090,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs ((yyvaluep->uniqstr), stderr); }; /* Line 670 of yacc.c */ -#line 1090 "parse-gram.c" +#line 1094 "parse-gram.c" break; case 51: /* "\"identifier:\"" */ @@ -1095,7 +1099,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s:", (yyvaluep->uniqstr)); }; /* Line 670 of yacc.c */ -#line 1099 "parse-gram.c" +#line 1103 "parse-gram.c" break; case 54: /* "\"%{...%}\"" */ @@ -1104,7 +1108,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 670 of yacc.c */ -#line 1108 "parse-gram.c" +#line 1112 "parse-gram.c" break; case 56: /* "\"type\"" */ @@ -1113,7 +1117,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); }; /* Line 670 of yacc.c */ -#line 1117 "parse-gram.c" +#line 1121 "parse-gram.c" break; case 83: /* "content" */ @@ -1122,7 +1126,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 670 of yacc.c */ -#line 1126 "parse-gram.c" +#line 1130 "parse-gram.c" break; case 84: /* "content.opt" */ @@ -1131,7 +1135,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 670 of yacc.c */ -#line 1135 "parse-gram.c" +#line 1139 "parse-gram.c" break; case 85: /* "braceless" */ @@ -1140,7 +1144,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 670 of yacc.c */ -#line 1144 "parse-gram.c" +#line 1148 "parse-gram.c" break; case 86: /* "id" */ @@ -1149,7 +1153,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; /* Line 670 of yacc.c */ -#line 1153 "parse-gram.c" +#line 1157 "parse-gram.c" break; case 87: /* "id_colon" */ @@ -1158,7 +1162,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); }; /* Line 670 of yacc.c */ -#line 1162 "parse-gram.c" +#line 1166 "parse-gram.c" break; case 88: /* "symbol" */ @@ -1167,7 +1171,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; /* Line 670 of yacc.c */ -#line 1171 "parse-gram.c" +#line 1175 "parse-gram.c" break; case 89: /* "string_as_id" */ @@ -1176,7 +1180,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; /* Line 670 of yacc.c */ -#line 1180 "parse-gram.c" +#line 1184 "parse-gram.c" break; default: break; @@ -1700,7 +1704,7 @@ YYLTYPE yylloc; } /* Line 1082 of yacc.c */ -#line 1704 "parse-gram.c" +#line 1708 "parse-gram.c" yylsp[0] = yylloc; goto yysetstate; @@ -1914,161 +1918,192 @@ yyreduce: case 10: /* Line 1269 of yacc.c */ -#line 229 "parse-gram.y" - { error_verbose = true; } +#line 230 "parse-gram.y" + { + defines_flag = true; + spec_defines_file = xstrdup ((yyvsp[(2) - (2)].chars)); + } break; case 11: /* Line 1269 of yacc.c */ -#line 230 "parse-gram.y" - { expected_sr_conflicts = (yyvsp[(2) - (2)].integer); } +#line 234 "parse-gram.y" + { error_verbose = true; } break; case 12: /* Line 1269 of yacc.c */ -#line 231 "parse-gram.y" - { expected_rr_conflicts = (yyvsp[(2) - (2)].integer); } +#line 235 "parse-gram.y" + { expected_sr_conflicts = (yyvsp[(2) - (2)].integer); } break; case 13: /* Line 1269 of yacc.c */ -#line 232 "parse-gram.y" - { spec_file_prefix = (yyvsp[(3) - (3)].chars); } +#line 236 "parse-gram.y" + { expected_rr_conflicts = (yyvsp[(2) - (2)].integer); } break; case 14: /* Line 1269 of yacc.c */ -#line 234 "parse-gram.y" +#line 237 "parse-gram.y" + { spec_file_prefix = (yyvsp[(2) - (2)].chars); } + break; + + case 15: + +/* Line 1269 of yacc.c */ +#line 238 "parse-gram.y" + { spec_file_prefix = (yyvsp[(3) - (3)].chars); } + break; + + case 16: + +/* Line 1269 of yacc.c */ +#line 240 "parse-gram.y" { nondeterministic_parser = true; glr_parser = true; } break; - case 15: + case 17: /* Line 1269 of yacc.c */ -#line 239 "parse-gram.y" +#line 245 "parse-gram.y" { muscle_code_grow ("initial_action", translate_symbol_action ((yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])), (yylsp[(2) - (2)])); } break; - case 16: + case 18: /* Line 1269 of yacc.c */ -#line 242 "parse-gram.y" +#line 248 "parse-gram.y" { add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); } break; - case 17: + case 19: /* Line 1269 of yacc.c */ -#line 243 "parse-gram.y" +#line 249 "parse-gram.y" { locations_flag = true; } break; - case 18: + case 20: /* Line 1269 of yacc.c */ -#line 244 "parse-gram.y" +#line 250 "parse-gram.y" + { spec_name_prefix = (yyvsp[(2) - (2)].chars); } + break; + + case 21: + +/* Line 1269 of yacc.c */ +#line 251 "parse-gram.y" { spec_name_prefix = (yyvsp[(3) - (3)].chars); } break; - case 19: + case 22: /* Line 1269 of yacc.c */ -#line 245 "parse-gram.y" +#line 252 "parse-gram.y" { no_lines_flag = true; } break; - case 20: + case 23: /* Line 1269 of yacc.c */ -#line 246 "parse-gram.y" +#line 253 "parse-gram.y" { nondeterministic_parser = true; } break; - case 21: + case 24: + +/* Line 1269 of yacc.c */ +#line 254 "parse-gram.y" + { spec_outfile = (yyvsp[(2) - (2)].chars); } + break; + + case 25: /* Line 1269 of yacc.c */ -#line 247 "parse-gram.y" +#line 255 "parse-gram.y" { spec_outfile = (yyvsp[(3) - (3)].chars); } break; - case 22: + case 26: /* Line 1269 of yacc.c */ -#line 248 "parse-gram.y" +#line 256 "parse-gram.y" { add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); } break; - case 23: + case 27: /* Line 1269 of yacc.c */ -#line 249 "parse-gram.y" +#line 257 "parse-gram.y" { pure_parser = true; } break; - case 24: + case 28: /* Line 1269 of yacc.c */ -#line 250 "parse-gram.y" +#line 258 "parse-gram.y" { push_parser = true; } break; - case 25: + case 29: /* Line 1269 of yacc.c */ -#line 251 "parse-gram.y" +#line 259 "parse-gram.y" { version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); } break; - case 26: + case 30: /* Line 1269 of yacc.c */ -#line 252 "parse-gram.y" +#line 260 "parse-gram.y" { skeleton = (yyvsp[(2) - (2)].chars); } break; - case 27: + case 31: /* Line 1269 of yacc.c */ -#line 253 "parse-gram.y" +#line 261 "parse-gram.y" { token_table_flag = true; } break; - case 28: + case 32: /* Line 1269 of yacc.c */ -#line 254 "parse-gram.y" +#line 262 "parse-gram.y" { report_flag = report_states; } break; - case 29: + case 33: /* Line 1269 of yacc.c */ -#line 255 "parse-gram.y" +#line 263 "parse-gram.y" { yacc_flag = true; } break; - case 33: + case 37: /* Line 1269 of yacc.c */ -#line 263 "parse-gram.y" +#line 271 "parse-gram.y" { grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); } break; - case 34: + case 38: /* Line 1269 of yacc.c */ -#line 267 "parse-gram.y" +#line 275 "parse-gram.y" { symbol_list *list; const char *action = translate_symbol_action ((yyvsp[(2) - (3)].code), (yylsp[(2) - (3)])); @@ -2078,10 +2113,10 @@ yyreduce: } break; - case 35: + case 39: /* Line 1269 of yacc.c */ -#line 275 "parse-gram.y" +#line 283 "parse-gram.y" { symbol_list *list; const char *action = translate_symbol_action ((yyvsp[(2) - (3)].code), (yylsp[(2) - (3)])); @@ -2091,70 +2126,70 @@ yyreduce: } break; - case 36: + case 40: /* Line 1269 of yacc.c */ -#line 283 "parse-gram.y" +#line 291 "parse-gram.y" { default_prec = true; } break; - case 37: + case 41: /* Line 1269 of yacc.c */ -#line 287 "parse-gram.y" +#line 295 "parse-gram.y" { default_prec = false; } break; - case 38: + case 42: /* Line 1269 of yacc.c */ -#line 290 "parse-gram.y" +#line 298 "parse-gram.y" { prologue_augment ((yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]), true); } break; - case 39: + case 43: /* Line 1269 of yacc.c */ -#line 291 "parse-gram.y" +#line 299 "parse-gram.y" { prologue_augment ((yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]), false); } break; - case 40: + case 44: /* Line 1269 of yacc.c */ -#line 292 "parse-gram.y" +#line 300 "parse-gram.y" { muscle_code_grow ("provides", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); } break; - case 41: + case 45: /* Line 1269 of yacc.c */ -#line 293 "parse-gram.y" +#line 301 "parse-gram.y" { muscle_code_grow ("requires", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); } break; - case 42: + case 46: /* Line 1269 of yacc.c */ -#line 304 "parse-gram.y" +#line 312 "parse-gram.y" {} break; - case 43: + case 47: /* Line 1269 of yacc.c */ -#line 305 "parse-gram.y" +#line 313 "parse-gram.y" { muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } break; - case 44: + case 48: /* Line 1269 of yacc.c */ -#line 310 "parse-gram.y" +#line 318 "parse-gram.y" { char const *body = (yyvsp[(3) - (3)].code); @@ -2178,44 +2213,44 @@ yyreduce: } break; - case 45: + case 49: /* Line 1269 of yacc.c */ -#line 337 "parse-gram.y" +#line 345 "parse-gram.y" { current_class = nterm_sym; } break; - case 46: + case 50: /* Line 1269 of yacc.c */ -#line 338 "parse-gram.y" +#line 346 "parse-gram.y" { current_class = unknown_sym; current_type = NULL; } break; - case 47: + case 51: /* Line 1269 of yacc.c */ -#line 342 "parse-gram.y" +#line 350 "parse-gram.y" { current_class = token_sym; } break; - case 48: + case 52: /* Line 1269 of yacc.c */ -#line 343 "parse-gram.y" +#line 351 "parse-gram.y" { current_class = unknown_sym; current_type = NULL; } break; - case 49: + case 53: /* Line 1269 of yacc.c */ -#line 348 "parse-gram.y" +#line 356 "parse-gram.y" { symbol_list *list; tag_seen = true; @@ -2225,10 +2260,10 @@ yyreduce: } break; - case 50: + case 54: /* Line 1269 of yacc.c */ -#line 359 "parse-gram.y" +#line 367 "parse-gram.y" { symbol_list *list; ++current_prec; @@ -2242,121 +2277,121 @@ yyreduce: } break; - case 51: + case 55: /* Line 1269 of yacc.c */ -#line 373 "parse-gram.y" +#line 381 "parse-gram.y" { (yyval.assoc) = left_assoc; } break; - case 52: + case 56: /* Line 1269 of yacc.c */ -#line 374 "parse-gram.y" +#line 382 "parse-gram.y" { (yyval.assoc) = right_assoc; } break; - case 53: + case 57: /* Line 1269 of yacc.c */ -#line 375 "parse-gram.y" +#line 383 "parse-gram.y" { (yyval.assoc) = non_assoc; } break; - case 54: + case 58: /* Line 1269 of yacc.c */ -#line 379 "parse-gram.y" +#line 387 "parse-gram.y" { current_type = NULL; } break; - case 55: + case 59: /* Line 1269 of yacc.c */ -#line 380 "parse-gram.y" +#line 388 "parse-gram.y" { current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; } break; - case 56: + case 60: /* Line 1269 of yacc.c */ -#line 386 "parse-gram.y" +#line 394 "parse-gram.y" { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); } break; - case 57: + case 61: /* Line 1269 of yacc.c */ -#line 388 "parse-gram.y" +#line 396 "parse-gram.y" { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); } break; - case 58: + case 62: /* Line 1269 of yacc.c */ -#line 392 "parse-gram.y" +#line 400 "parse-gram.y" { (yyval.list) = (yyvsp[(1) - (1)].list); } break; - case 59: + case 63: /* Line 1269 of yacc.c */ -#line 393 "parse-gram.y" +#line 401 "parse-gram.y" { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); } break; - case 60: + case 64: /* Line 1269 of yacc.c */ -#line 397 "parse-gram.y" +#line 405 "parse-gram.y" { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); } break; - case 61: + case 65: /* Line 1269 of yacc.c */ -#line 398 "parse-gram.y" +#line 406 "parse-gram.y" { (yyval.list) = symbol_list_type_new ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } break; - case 62: + case 66: /* Line 1269 of yacc.c */ -#line 399 "parse-gram.y" +#line 407 "parse-gram.y" { (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); } break; - case 63: + case 67: /* Line 1269 of yacc.c */ -#line 400 "parse-gram.y" +#line 408 "parse-gram.y" { (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); } break; - case 64: + case 68: /* Line 1269 of yacc.c */ -#line 406 "parse-gram.y" +#line 414 "parse-gram.y" { current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; } break; - case 65: + case 69: /* Line 1269 of yacc.c */ -#line 411 "parse-gram.y" +#line 419 "parse-gram.y" { symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true); symbol_type_set ((yyvsp[(1) - (1)].symbol), current_type, (yylsp[(1) - (1)])); } break; - case 66: + case 70: /* Line 1269 of yacc.c */ -#line 416 "parse-gram.y" +#line 424 "parse-gram.y" { symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true); symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)])); @@ -2364,10 +2399,10 @@ yyreduce: } break; - case 67: + case 71: /* Line 1269 of yacc.c */ -#line 422 "parse-gram.y" +#line 430 "parse-gram.y" { symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true); symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)])); @@ -2375,10 +2410,10 @@ yyreduce: } break; - case 68: + case 72: /* Line 1269 of yacc.c */ -#line 428 "parse-gram.y" +#line 436 "parse-gram.y" { symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true); symbol_type_set ((yyvsp[(1) - (3)].symbol), current_type, (yylsp[(1) - (3)])); @@ -2387,109 +2422,109 @@ yyreduce: } break; - case 75: + case 79: /* Line 1269 of yacc.c */ -#line 458 "parse-gram.y" +#line 466 "parse-gram.y" { yyerrok; } break; - case 76: + case 80: /* Line 1269 of yacc.c */ -#line 464 "parse-gram.y" +#line 472 "parse-gram.y" { current_lhs = (yyvsp[(1) - (1)].symbol); current_lhs_location = (yylsp[(1) - (1)]); } break; - case 78: + case 82: /* Line 1269 of yacc.c */ -#line 468 "parse-gram.y" +#line 476 "parse-gram.y" { grammar_current_rule_end ((yylsp[(1) - (1)])); } break; - case 79: + case 83: /* Line 1269 of yacc.c */ -#line 469 "parse-gram.y" +#line 477 "parse-gram.y" { grammar_current_rule_end ((yylsp[(3) - (3)])); } break; - case 81: + case 85: /* Line 1269 of yacc.c */ -#line 475 "parse-gram.y" +#line 483 "parse-gram.y" { grammar_current_rule_begin (current_lhs, current_lhs_location); } break; - case 82: + case 86: /* Line 1269 of yacc.c */ -#line 477 "parse-gram.y" +#line 485 "parse-gram.y" { grammar_current_rule_symbol_append ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); } break; - case 83: + case 87: /* Line 1269 of yacc.c */ -#line 479 "parse-gram.y" +#line 487 "parse-gram.y" { grammar_current_rule_action_append ((yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); } break; - case 84: + case 88: /* Line 1269 of yacc.c */ -#line 481 "parse-gram.y" +#line 489 "parse-gram.y" { grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); } break; - case 85: + case 89: /* Line 1269 of yacc.c */ -#line 483 "parse-gram.y" +#line 491 "parse-gram.y" { grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); } break; - case 86: + case 90: /* Line 1269 of yacc.c */ -#line 485 "parse-gram.y" +#line 493 "parse-gram.y" { grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); } break; - case 89: + case 93: /* Line 1269 of yacc.c */ -#line 501 "parse-gram.y" +#line 509 "parse-gram.y" { static char one[] = "1"; (yyval.chars) = one; } break; - case 91: + case 95: /* Line 1269 of yacc.c */ -#line 511 "parse-gram.y" +#line 519 "parse-gram.y" { (yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n'; (yyval.chars) = translate_code ((yyvsp[(1) - (1)].code) + 1, (yylsp[(1) - (1)])); } break; - case 92: + case 96: /* Line 1269 of yacc.c */ -#line 527 "parse-gram.y" +#line 535 "parse-gram.y" { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } break; - case 93: + case 97: /* Line 1269 of yacc.c */ -#line 529 "parse-gram.y" +#line 537 "parse-gram.y" { (yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)])); symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false); @@ -2497,27 +2532,27 @@ yyreduce: } break; - case 94: + case 98: /* Line 1269 of yacc.c */ -#line 537 "parse-gram.y" +#line 545 "parse-gram.y" { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } break; - case 97: + case 101: /* Line 1269 of yacc.c */ -#line 549 "parse-gram.y" +#line 557 "parse-gram.y" { (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)])); symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false); } break; - case 99: + case 103: /* Line 1269 of yacc.c */ -#line 558 "parse-gram.y" +#line 566 "parse-gram.y" { muscle_code_grow ("epilogue", translate_code ((yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])), (yylsp[(2) - (2)])); gram_scanner_last_string_free (); @@ -2527,7 +2562,7 @@ yyreduce: /* Line 1269 of yacc.c */ -#line 2531 "parse-gram.c" +#line 2566 "parse-gram.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2746,7 +2781,7 @@ yyreturn: /* Line 1486 of yacc.c */ -#line 564 "parse-gram.y" +#line 572 "parse-gram.y" diff --git a/src/parse-gram.y b/src/parse-gram.y index a277ba79..aabace13 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -226,10 +226,16 @@ prologue_declaration: | "%debug" { debug_flag = true; } | "%define" STRING content.opt { muscle_insert ($2, $3); } | "%defines" { defines_flag = true; } +| "%defines" STRING + { + defines_flag = true; + spec_defines_file = xstrdup ($2); + } | "%error-verbose" { error_verbose = true; } | "%expect" INT { expected_sr_conflicts = $2; } | "%expect-rr" INT { expected_rr_conflicts = $2; } -| "%file-prefix" "=" STRING { spec_file_prefix = $3; } +| "%file-prefix" STRING { spec_file_prefix = $2; } +| "%file-prefix" "=" STRING { spec_file_prefix = $3; } /* deprecated */ | "%glr-parser" { nondeterministic_parser = true; @@ -241,10 +247,12 @@ prologue_declaration: } | "%lex-param" "{...}" { add_param ("lex_param", $2, @2); } | "%locations" { locations_flag = true; } -| "%name-prefix" "=" STRING { spec_name_prefix = $3; } +| "%name-prefix" STRING { spec_name_prefix = $2; } +| "%name-prefix" "=" STRING { spec_name_prefix = $3; } /* deprecated */ | "%no-lines" { no_lines_flag = true; } | "%nondeterministic-parser" { nondeterministic_parser = true; } -| "%output" "=" STRING { spec_outfile = $3; } +| "%output" STRING { spec_outfile = $2; } +| "%output" "=" STRING { spec_outfile = $3; } /* deprecated */ | "%parse-param" "{...}" { add_param ("parse_param", $2, @2); } | "%pure-parser" { pure_parser = true; } | "%push-parser" { push_parser = true; } diff --git a/tests/calc.at b/tests/calc.at index 2cc68031..694327e5 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -556,7 +556,7 @@ AT_CHECK_CALC_LALR() AT_CHECK_CALC_LALR([%defines]) AT_CHECK_CALC_LALR([%locations]) -AT_CHECK_CALC_LALR([%name-prefix="calc"]) +AT_CHECK_CALC_LALR([%name-prefix="calc"]) dnl test deprecated `=' AT_CHECK_CALC_LALR([%verbose]) AT_CHECK_CALC_LALR([%yacc]) AT_CHECK_CALC_LALR([%error-verbose]) @@ -565,15 +565,15 @@ AT_CHECK_CALC_LALR([%pure-parser %locations]) AT_CHECK_CALC_LALR([%push-parser %locations]) AT_CHECK_CALC_LALR([%error-verbose %locations]) -AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_LALR([%debug]) -AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) -AT_CHECK_CALC_LALR([%push-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) +AT_CHECK_CALC_LALR([%push-parser %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) +AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) # ----------------------- # @@ -594,7 +594,7 @@ AT_CHECK_CALC_GLR() AT_CHECK_CALC_GLR([%defines]) AT_CHECK_CALC_GLR([%locations]) -AT_CHECK_CALC_GLR([%name-prefix="calc"]) +AT_CHECK_CALC_GLR([%name-prefix "calc"]) AT_CHECK_CALC_GLR([%verbose]) AT_CHECK_CALC_GLR([%yacc]) AT_CHECK_CALC_GLR([%error-verbose]) @@ -602,14 +602,14 @@ AT_CHECK_CALC_GLR([%error-verbose]) AT_CHECK_CALC_GLR([%pure-parser %locations]) AT_CHECK_CALC_GLR([%error-verbose %locations]) -AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_GLR([%debug]) -AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) +AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) # ----------------------------- # @@ -626,13 +626,13 @@ m4_define([AT_CHECK_CALC_LALR1_CC], [AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations] $@)]) AT_CHECK_CALC_LALR1_CC([]) -AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) +AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) @@ -650,11 +650,11 @@ m4_define([AT_CHECK_CALC_GLR_CC], [AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations] $@)]) AT_CHECK_CALC_GLR_CC([]) -AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_GLR_CC([%debug]) -AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_GLR_CC([%error-verbose %debug %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc]) +AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) +AT_CHECK_CALC_GLR_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) diff --git a/tests/headers.at b/tests/headers.at index a348d65b..4168531c 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -89,7 +89,7 @@ AT_SETUP([export YYLTYPE]) AT_DATA_GRAMMAR([input.y], [%locations -%name-prefix="my_" +%name-prefix "my_" %{ #include #include diff --git a/tests/local.at b/tests/local.at index b9cace01..150602e9 100644 --- a/tests/local.at +++ b/tests/local.at @@ -64,8 +64,8 @@ m4_pushdef([AT_PURE_AND_LOC_IF], m4_pushdef([AT_GLR_OR_PARAM_IF], [m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])]) m4_pushdef([AT_NAME_PREFIX], -[m4_bmatch([$3], [%name-prefix=".*"], - [m4_bregexp([$3], [name-prefix="\([^"]*\)"], [\1])], +[m4_bmatch([$3], [%name-prefix ".*"], + [m4_bregexp([$3], [name-prefix "\([^"]*\)"], [\1])], [yy])]) # yyerror receives the location if %location & %pure & (%glr or %parse-param). m4_pushdef([AT_YYERROR_ARG_LOC_IF], diff --git a/tests/output.at b/tests/output.at index ec02c1de..468aa5fd 100644 --- a/tests/output.at +++ b/tests/output.at @@ -64,13 +64,13 @@ AT_CHECK_OUTPUT([foo.y], [%defines %verbose %yacc],[], AT_CHECK_OUTPUT([foo.yy], [%defines %verbose %yacc],[], [y.output y.tab.c y.tab.h]) -# Exercise %output and %file-prefix -AT_CHECK_OUTPUT([foo.y], [%file-prefix="bar" %defines %verbose], [], +# Exercise %output and %file-prefix including deprecated `=' +AT_CHECK_OUTPUT([foo.y], [%file-prefix "bar" %defines %verbose], [], [bar.output bar.tab.c bar.tab.h]) AT_CHECK_OUTPUT([foo.y], [%output="bar.c" %defines %verbose %yacc],[], [bar.output bar.c bar.h]) AT_CHECK_OUTPUT([foo.y], - [%file-prefix="baz" %output="bar.c" %defines %verbose %yacc], + [%file-prefix="baz" %output "bar.c" %defines %verbose %yacc], [], [bar.output bar.c bar.h]) @@ -86,6 +86,10 @@ AT_CHECK_OUTPUT([foo.yy], [], [--defines=foo.hpp -o foo.c++], [foo.c++ foo.hpp]) +AT_CHECK_OUTPUT([foo.yy], [%defines "foo.hpp"], + [-o foo.c++], + [foo.c++ foo.hpp]) + AT_CHECK_OUTPUT([foo.yy], [], [-o foo.c++ --graph=foo.gph], [foo.c++ foo.gph]) diff --git a/tests/reduce.at b/tests/reduce.at index 90b0130e..e082baab 100644 --- a/tests/reduce.at +++ b/tests/reduce.at @@ -27,7 +27,7 @@ AT_SETUP([Useless Terminals]) AT_DATA([[input.y]], [[%verbose -%output="input.c" +%output "input.c" %token useless1 %token useless2 @@ -71,7 +71,7 @@ AT_SETUP([Useless Nonterminals]) AT_DATA([[input.y]], [[%verbose -%output="input.c" +%output "input.c" %nterm useless1 %nterm useless2 @@ -128,7 +128,7 @@ AT_KEYWORDS([report]) AT_DATA([[input.y]], [[%verbose -%output="input.c" +%output "input.c" %token useful %% exp: useful; @@ -221,7 +221,7 @@ AT_DATA([[not-reduced.y]], /* A useful one. */ %token useful %verbose -%output="not-reduced.c" +%output "not-reduced.c" %% @@ -267,7 +267,7 @@ AT_DATA([[reduced.y]], /* A useful one. */ %token useful %verbose -%output="reduced.c" +%output "reduced.c" %% @@ -304,7 +304,7 @@ AT_KEYWORDS([report]) AT_DATA([[input.y]], [[%verbose -%output="input.c" +%output "input.c" %token useful %% exp: useful | underivable; @@ -342,7 +342,7 @@ AT_CLEANUP AT_SETUP([Empty Language]) AT_DATA([[input.y]], -[[%output="input.c" +[[%output "input.c" %% exp: exp; ]])