From: Joel E. Denny Date: Fri, 28 Aug 2009 07:46:37 +0000 (-0400) Subject: %define: accept unquoted values. X-Git-Tag: v2.5_rc1~174 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/f37495f6013afcfe355bb312215448d1b8b04bb2 %define: accept unquoted values. * NEWS (2.5): Group all %define changes together, and document this one. Remove quotes in IELR and canonical LR entry. * doc/bison.texinfo: Remove quotes in most examples throughout. (Decl Summary): Update %define documentation. (Table of Symbols): Likewise. * src/ielr.c (LrType): Update documentation. * src/parse-gram.y (content.opt): Add production for ID. * tests/calc.at: Likewise. * tests/existing.at: Likewise. * tests/input.at: Likewise. * tests/local.at: Likewise. * tests/push.at: Likewise. * tests/reduce.at: Likewise. * tests/torture.at: Likewise. (cherry picked from commit cf499cff31eabd04e37107484647bdd453137d1d) Conflicts: doc/bison.texinfo src/parse-gram.c src/parse-gram.h tests/actions.at tests/calc.at --- diff --git a/ChangeLog b/ChangeLog index 360854c1..54db9976 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2009-08-28 Joel E. Denny + + %define: accept unquoted values. + * NEWS (2.5): Group all %define changes together, and document + this one. Remove quotes in IELR and canonical LR entry. + * doc/bison.texinfo: Remove quotes in most examples throughout. + (Decl Summary): Update %define documentation. + (Table of Symbols): Likewise. + * src/ielr.c (LrType): Update documentation. + * src/parse-gram.y (content.opt): Add production for ID. + * tests/calc.at: Likewise. + * tests/existing.at: Likewise. + * tests/input.at: Likewise. + * tests/local.at: Likewise. + * tests/push.at: Likewise. + * tests/reduce.at: Likewise. + * tests/torture.at: Likewise. + 2009-08-28 Joel E. Denny %define lr.type: make values lowercase IDs. diff --git a/NEWS b/NEWS index 3dab543c..0086f414 100644 --- a/NEWS +++ b/NEWS @@ -20,9 +20,9 @@ Bison News default. You can specify the type of parser tables in the grammar file with these directives: - %define lr.type "lalr" - %define lr.type "ielr" - %define lr.type "canonical-lr" + %define lr.type lalr + %define lr.type ielr + %define lr.type canonical-lr The default reduction optimization in the parser tables can also be adjusted using `%define lr.default-reductions'. See the documentation @@ -33,9 +33,11 @@ Bison News These features are experimental. More user feedback will help to stabilize them. -** Multiple %define's for any variable is now an error not a warning. +** %define improvements. -** %define can now be invoked via the command line. +*** Multiple invocations for any variable is now an error not a warning. + +*** Can now be invoked via the command line. Each of these command-line options @@ -54,7 +56,7 @@ Bison News quietly override %define, but -D and --define do not. For further details, see the section "Bison Options" in the Bison manual. -** %define variables renamed. +*** Variables renamed. The following %define variables @@ -69,7 +71,18 @@ Bison News The old names are now deprecated but will be maintained indefinitely for backward compatibility. -** Symbols names +*** Values no longer need to be quoted in grammar file. + + If a %define value is an identifier, it no longer needs to be placed + within quotations marks. For example, + + %define api.push-pull "push" + + can be rewritten as + + %define api.push-pull push + +** Symbol names. Consistently with directives (such as %error-verbose) and variables (e.g. push-pull), symbol names may include dashes in any position, diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 8ed32e0c..3e50f5ac 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -4580,7 +4580,7 @@ The following Bison declaration says that you want the parser to be a push parser (@pxref{Decl Summary,,%define api.push-pull}): @example -%define api.push-pull "push" +%define api.push-pull push @end example In almost all cases, you want to ensure that your push parser is also @@ -4591,7 +4591,7 @@ what you are doing, your declarations should look like this: @example %define api.pure -%define api.push-pull "push" +%define api.push-pull push @end example There is a major notable functional difference between the pure push parser @@ -4640,14 +4640,14 @@ for use by the next invocation of the @code{yypush_parse} function. Bison also supports both the push parser interface along with the pull parser interface in the same generated parser. In order to get this functionality, -you should replace the @code{%define api.push-pull "push"} declaration with the -@code{%define api.push-pull "both"} declaration. Doing this will create all of +you should replace the @code{%define api.push-pull push} declaration with the +@code{%define api.push-pull both} declaration. Doing this will create all of the symbols mentioned earlier along with the two extra symbols, @code{yyparse} and @code{yypull_parse}. @code{yyparse} can be used exactly as it normally would be used. However, the user should note that it is implemented in the generated parser by calling @code{yypull_parse}. This makes the @code{yyparse} function that is generated with the -@code{%define api.push-pull "both"} declaration slower than the normal +@code{%define api.push-pull both} declaration slower than the normal @code{yyparse} function. If the user calls the @code{yypull_parse} function it will parse the rest of the input stream. It is possible to @code{yypush_parse} tokens to select a subgrammar @@ -4664,8 +4664,8 @@ yypstate_delete (ps); @end example Adding the @code{%define api.pure} declaration does exactly the same thing to -the generated parser with @code{%define api.push-pull "both"} as it did for -@code{%define api.push-pull "push"}. +the generated parser with @code{%define api.push-pull both} as it did for +@code{%define api.push-pull push}. @node Decl Summary @subsection Bison Declaration Summary @@ -4834,6 +4834,7 @@ already defined, so that the debugging facilities are compiled. @end deffn @deffn {Directive} %define @var{variable} +@deffnx {Directive} %define @var{variable} @var{value} @deffnx {Directive} %define @var{variable} "@var{value}" Define a variable to adjust Bison's behavior. The possible choices for @var{variable}, as well as their meanings, depend on @@ -4843,7 +4844,11 @@ Summary,,%language}, @pxref{Decl Summary,,%skeleton}). It is an error if a @var{variable} is defined by @code{%define} multiple times, but see @ref{Bison Options,,-D @var{name}[=@var{value}]}. -Omitting @code{"@var{value}"} is always equivalent to specifying it as +@var{value} must be placed in quotation marks if it contains any +character other than a letter, underscore, period, dash, or non-initial +digit. + +Omitting @code{"@var{value}"} entirely is always equivalent to specifying @code{""}. Some @var{variable}s may be used as Booleans. @@ -4851,12 +4856,12 @@ In this case, Bison will complain if the variable definition does not meet one of the following four conditions: @enumerate -@item @code{"@var{value}"} is @code{"true"} +@item @code{@var{value}} is @code{true} -@item @code{"@var{value}"} is omitted (or is @code{""}). -This is equivalent to @code{"true"}. +@item @code{@var{value}} is omitted (or @code{""} is specified). +This is equivalent to @code{true}. -@item @code{"@var{value}"} is @code{"false"}. +@item @code{@var{value}} is @code{false}. @item @var{variable} is never defined. In this case, Bison selects a default value, which may depend on the selected @@ -4877,7 +4882,7 @@ Some of the accepted @var{variable}s are: @item Accepted Values: Boolean -@item Default Value: @code{"false"} +@item Default Value: @code{false} @end itemize @item api.push-pull @@ -4891,9 +4896,9 @@ Some of the accepted @var{variable}s are: (The current push parsing interface is experimental and may evolve. More user feedback will help to stabilize it.) -@item Accepted Values: @code{"pull"}, @code{"push"}, @code{"both"} +@item Accepted Values: @code{pull}, @code{push}, @code{both} -@item Default Value: @code{"pull"} +@item Default Value: @code{pull} @end itemize @item lr.default-reductions @@ -4920,7 +4925,7 @@ More user feedback will help to stabilize it.) @item Accepted Values: @itemize -@item @code{"all"}. +@item @code{all}. For @acronym{LALR} and @acronym{IELR} parsers (@pxref{Decl Summary,,lr.type}) by default, all states are permitted to contain default reductions. @@ -4932,7 +4937,7 @@ That is, unlike in a canonical @acronym{LR} state, the lookahead sets of reductions in an @acronym{LALR} or @acronym{IELR} state can contain tokens that are syntactically incorrect for some left contexts. -@item @code{"consistent"}. +@item @code{consistent}. @cindex consistent states A consistent state is a state that has only one possible action. If that action is a reduction, then the parser does not need to request @@ -4944,7 +4949,7 @@ states, then a canonical @acronym{LR} parser reports a syntax error as soon as it @emph{needs} the syntactically unacceptable token from the scanner. -@item @code{"accepting"}. +@item @code{accepting}. @cindex accepting state By default, the only default reduction permitted in a canonical @acronym{LR} parser is the accept action in the accepting state, which @@ -4956,8 +4961,8 @@ without performing any extra reductions. @item Default Value: @itemize -@item @code{"accepting"} if @code{lr.type} is @code{"canonical-lr"}. -@item @code{"all"} otherwise. +@item @code{accepting} if @code{lr.type} is @code{canonical-lr}. +@item @code{all} otherwise. @end itemize @end itemize @@ -4978,7 +4983,7 @@ are useless in the generated parser. @item Accepted Values: Boolean -@item Default Value: @code{"false"} +@item Default Value: @code{false} @item Caveats: @@ -5020,7 +5025,7 @@ More user feedback will help to stabilize it.) @item Accepted Values: @itemize -@item @code{"lalr"}. +@item @code{lalr}. While Bison generates @acronym{LALR} parser tables by default for historical reasons, @acronym{IELR} or canonical @acronym{LR} is almost always preferable for deterministic parsers. @@ -5049,7 +5054,7 @@ investigate such problems while ignoring the more subtle differences from @acronym{IELR} and canonical @acronym{LR}. @end itemize -@item @code{"ielr"}. +@item @code{ielr}. @acronym{IELR} is a minimal @acronym{LR} algorithm. That is, given any grammar (@acronym{LR} or non-@acronym{LR}), @acronym{IELR} and canonical @acronym{LR} always accept exactly the same @@ -5063,7 +5068,7 @@ grammars, the number of conflicts for @acronym{IELR} is often an order of magnitude less as well. This can significantly reduce the complexity of developing of a grammar. -@item @code{"canonical-lr"}. +@item @code{canonical-lr}. @cindex delayed syntax errors @cindex syntax errors delayed The only advantage of canonical @acronym{LR} over @acronym{IELR} is @@ -5079,7 +5084,7 @@ Even when canonical @acronym{LR} behavior is ultimately desired, facilitate the development of a grammar. @end itemize -@item Default Value: @code{"lalr"} +@item Default Value: @code{lalr} @end itemize @item namespace @@ -5460,8 +5465,8 @@ exp: @dots{} @{ @dots{}; *randomness += 1; @dots{} @} More user feedback will help to stabilize it.) You call the function @code{yypush_parse} to parse a single token. This -function is available if either the @code{%define api.push-pull "push"} or -@code{%define api.push-pull "both"} declaration is used. +function is available if either the @code{%define api.push-pull push} or +@code{%define api.push-pull both} declaration is used. @xref{Push Decl, ,A Push Parser}. @deftypefun int yypush_parse (yypstate *yyps) @@ -5478,7 +5483,7 @@ is required to finish parsing the grammar. More user feedback will help to stabilize it.) You call the function @code{yypull_parse} to parse the rest of the input -stream. This function is available if the @code{%define api.push-pull "both"} +stream. This function is available if the @code{%define api.push-pull both} declaration is used. @xref{Push Decl, ,A Push Parser}. @@ -5494,8 +5499,8 @@ The value returned by @code{yypull_parse} is the same as for @code{yyparse}. More user feedback will help to stabilize it.) You call the function @code{yypstate_new} to create a new parser instance. -This function is available if either the @code{%define api.push-pull "push"} or -@code{%define api.push-pull "both"} declaration is used. +This function is available if either the @code{%define api.push-pull push} or +@code{%define api.push-pull both} declaration is used. @xref{Push Decl, ,A Push Parser}. @deftypefun yypstate *yypstate_new (void) @@ -5513,8 +5518,8 @@ allocated. More user feedback will help to stabilize it.) You call the function @code{yypstate_delete} to delete a parser instance. -function is available if either the @code{%define api.push-pull "push"} or -@code{%define api.push-pull "both"} declaration is used. +function is available if either the @code{%define api.push-pull push} or +@code{%define api.push-pull both} declaration is used. @xref{Push Decl, ,A Push Parser}. @deftypefun void yypstate_delete (yypstate *yyps) @@ -9022,7 +9027,7 @@ in a file; Bison itself defines a class representing a @dfn{location}, a range composed of a pair of positions (possibly spanning several files). The location class is an inner class of the parser; the name is @code{Location} by default, and may also be renamed using -@code{%define location_type "@var{class-name}}. +@code{%define location_type "@var{class-name}"}. The location class treats the position as a completely opaque value. By default, the class name is @code{Position}, but this can be changed @@ -9965,6 +9970,7 @@ Precedence}. @deffn {Directive} %define @var{define-variable} @deffnx {Directive} %define @var{define-variable} @var{value} +@deffnx {Directive} %define @var{define-variable} "@var{value}" Define a variable to adjust Bison's behavior. @xref{Decl Summary,,%define}. @end deffn diff --git a/src/ielr.c b/src/ielr.c index 399d53be..657c3a1d 100644 --- a/src/ielr.c +++ b/src/ielr.c @@ -35,7 +35,7 @@ #include "state.h" #include "symtab.h" -/** Records the value of the \%define variable "lr.type". */ +/** Records the value of the \%define variable lr.type. */ typedef enum { LR_TYPE__LALR, LR_TYPE__IELR, LR_TYPE__CANONICAL_LR } LrType; /** diff --git a/src/parse-gram.c b/src/parse-gram.c index d6d3d537..742e0fd7 100644 --- a/src/parse-gram.c +++ b/src/parse-gram.c @@ -560,16 +560,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 159 +#define YYLAST 160 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 58 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 34 /* YYNRULES -- Number of rules. */ -#define YYNRULES 107 +#define YYNRULES 108 /* YYNRULES -- Number of states. */ -#define YYNSTATES 147 +#define YYNSTATES 148 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -630,7 +630,7 @@ static const yytype_uint16 yyprhs[] = 180, 182, 184, 187, 190, 194, 196, 199, 201, 204, 206, 209, 212, 213, 218, 220, 224, 227, 228, 232, 236, 240, 244, 248, 249, 251, 253, 255, 256, 258, - 260, 262, 264, 266, 268, 270, 272, 273 + 260, 262, 264, 266, 268, 270, 272, 274, 275 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -661,9 +661,9 @@ static const yytype_int8 yyrhs[] = 81, 50, 82, -1, 81, 52, -1, -1, 82, 89, 83, -1, 82, 43, 83, -1, 82, 13, 89, -1, 82, 14, 4, -1, 82, 15, 53, -1, -1, 56, - -1, 47, -1, 3, -1, -1, 3, -1, 43, -1, - 47, -1, 44, -1, 48, -1, 87, -1, 90, -1, - 3, -1, -1, 49, 45, -1 + -1, 47, -1, 3, -1, -1, 47, -1, 3, -1, + 43, -1, 47, -1, 44, -1, 48, -1, 87, -1, + 90, -1, 3, -1, -1, 49, 45, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -678,8 +678,8 @@ static const yytype_uint16 yyrline[] = 442, 443, 448, 450, 455, 456, 460, 461, 462, 463, 468, 473, 478, 484, 490, 501, 502, 511, 512, 518, 519, 520, 527, 527, 532, 533, 534, 539, 541, 543, - 545, 547, 549, 554, 556, 567, 568, 573, 574, 583, - 603, 605, 614, 619, 620, 625, 632, 634 + 545, 547, 549, 554, 556, 567, 568, 573, 574, 575, + 584, 604, 606, 615, 620, 621, 626, 633, 635 }; #endif @@ -739,8 +739,8 @@ static const yytype_uint8 yyr1[] = 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, 85, 86, - 87, 87, 88, 89, 89, 90, 91, 91 + 82, 82, 82, 83, 83, 84, 84, 85, 85, 85, + 86, 87, 87, 88, 89, 89, 90, 91, 91 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -756,7 +756,7 @@ static const yytype_uint8 yyr2[] = 1, 1, 2, 2, 3, 1, 2, 1, 2, 1, 2, 2, 0, 4, 1, 3, 2, 0, 3, 3, 3, 3, 3, 0, 1, 1, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2 + 1, 1, 1, 1, 1, 1, 1, 0, 2 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -769,25 +769,25 @@ static const yytype_uint8 yydefact[] = 0, 16, 0, 0, 0, 20, 0, 41, 23, 24, 0, 0, 28, 0, 0, 0, 31, 32, 33, 0, 6, 34, 44, 4, 5, 36, 35, 56, 0, 0, - 0, 0, 0, 99, 0, 42, 96, 95, 97, 10, + 0, 0, 0, 100, 0, 42, 96, 95, 97, 10, 12, 13, 14, 0, 17, 18, 19, 21, 0, 25, - 0, 27, 29, 30, 105, 101, 100, 103, 37, 104, - 0, 102, 0, 0, 77, 79, 93, 45, 0, 57, + 0, 27, 29, 30, 106, 102, 101, 104, 37, 105, + 0, 103, 0, 0, 77, 79, 93, 45, 0, 57, 0, 70, 75, 50, 71, 48, 51, 62, 67, 68, - 69, 38, 64, 66, 39, 43, 98, 8, 15, 22, - 26, 81, 80, 0, 78, 2, 94, 82, 46, 52, - 58, 60, 76, 72, 73, 63, 65, 107, 87, 59, - 61, 74, 83, 84, 87, 86, 0, 0, 0, 93, - 93, 85, 90, 91, 92, 89, 88 + 69, 38, 64, 66, 39, 43, 99, 98, 8, 15, + 22, 26, 81, 80, 0, 78, 2, 94, 82, 46, + 52, 58, 60, 76, 72, 73, 63, 65, 108, 87, + 59, 61, 74, 83, 84, 87, 86, 0, 0, 0, + 93, 93, 85, 90, 91, 92, 89, 88 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 2, 43, 82, 88, 45, 49, 48, 46, - 47, 90, 119, 120, 96, 101, 102, 92, 93, 83, - 84, 85, 128, 132, 133, 117, 58, 107, 55, 77, - 86, 103, 79, 115 + 47, 90, 120, 121, 96, 101, 102, 92, 93, 83, + 84, 85, 129, 133, 134, 118, 58, 108, 55, 77, + 86, 103, 79, 116 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -795,54 +795,55 @@ static const yytype_int16 yydefgoto[] = #define YYPACT_NINF -60 static const yytype_int16 yypact[] = { - -60, 4, 102, -60, -60, -60, 7, 10, 22, -60, - -60, -60, -6, -60, -60, 27, 40, -60, 65, 72, - 2, -60, 35, 79, 47, -60, 11, -60, -60, -60, - 25, 48, -60, 89, 90, 0, -60, -60, -60, 15, - -60, -60, 52, -60, -60, -60, -60, 41, -2, -2, - 0, 26, 26, -60, 59, -60, -60, -60, 92, -60, - -60, -60, -60, 100, -60, -60, -60, -60, 101, -60, - 112, -60, -60, -60, -60, -60, -60, -60, -60, -60, - 64, -60, 93, 1, -60, -60, 49, -60, 59, -60, - 0, -60, -60, -2, 83, -2, 0, -60, -60, -60, + -60, 4, 103, -60, -60, -60, -2, -1, 10, -60, + -60, -60, 17, -60, -60, 27, 66, -60, 72, 79, + 2, -60, 47, 88, 49, -60, 11, -60, -60, -60, + 25, 50, -60, 91, 92, 0, -60, -60, -60, 15, + -60, -60, 51, -60, -60, -60, -60, 48, -8, -8, + 0, 26, 26, -60, 60, -60, -60, -60, 31, -60, + -60, -60, -60, 101, -60, -60, -60, -60, 102, -60, + 113, -60, -60, -60, -60, -60, -60, -60, -60, -60, + 54, -60, 65, 1, -60, -60, 62, -60, 60, -60, + 0, -60, -60, -8, 83, -8, 0, -60, -60, -60, -60, 26, -60, -60, 26, -60, -60, -60, -60, -60, - -60, -60, -60, 103, -60, -60, -60, -60, -60, 0, - -60, 113, -60, 143, -60, -60, -60, -60, -60, -60, - -60, -60, -16, 53, -60, -60, 0, 145, 94, 49, - 49, 53, -60, -60, -60, -60, -60 + -60, -60, -60, -60, 104, -60, -60, -60, -60, -60, + 0, -60, 142, -60, 144, -60, -60, -60, -60, -60, + -60, -60, -60, -9, 53, -60, -60, 0, 146, 95, + 62, 62, 53, -60, -60, -60, -60, -60 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -60, -60, -60, -60, 148, -60, -60, -60, -60, -60, - -60, -60, -60, 33, -60, 104, -42, -18, 106, -60, - 74, -60, -60, -60, 24, -51, -60, -60, -36, -10, + -60, -60, -60, -60, 149, -60, -60, -60, -60, -60, + -60, -60, -60, 33, -60, 105, -42, -18, 107, -60, + 75, -60, -60, -60, 24, -52, -60, -60, -36, -11, -60, -35, -59, -60 }; /* 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 YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -107 +#define YYTABLE_NINF -108 static const yytype_int16 yytable[] = { - 78, -106, 80, 74, 3, 62, 4, 5, 6, 7, + 78, -107, 80, 74, 3, 62, 4, 5, 6, 7, 8, 9, 10, 11, 67, 97, 80, 12, 105, 14, 4, 5, 6, 7, 8, 9, 10, 11, 69, 74, - 56, 12, 27, 14, 134, 124, 135, 53, 94, 94, - 35, 54, 75, 59, 75, 76, 27, 76, 63, 81, - 113, 91, 118, 51, 35, 121, 74, 68, 42, 126, - 50, 125, 126, 81, 131, 52, 136, 137, 138, 60, - 75, 70, 42, 76, 57, 122, 61, 122, 64, 98, - 99, 100, 65, 94, 121, 94, 74, 123, 145, 146, - 66, 71, 72, 73, 89, 106, 139, 75, 140, 87, - 76, 142, 53, 108, 109, 116, 140, 4, 5, 6, - 7, 8, 9, 10, 11, 110, 111, 130, 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, 112, 74, 144, 127, 143, - 44, 39, 129, 40, 41, 95, 104, 114, 141, 42 + 56, 12, 27, 14, 106, 125, 75, 94, 94, 76, + 35, 135, 51, 136, 75, 91, 27, 76, 63, 81, + 114, 50, 119, 52, 35, 122, 74, 68, 42, 127, + 53, 126, 127, 81, 54, 132, 137, 138, 139, 59, + 75, 70, 42, 76, 57, 123, 60, 123, 107, 98, + 99, 100, 94, 61, 94, 122, 74, 124, 146, 147, + 64, 65, 66, 71, 72, 73, 140, 75, 87, 141, + 76, 89, 143, 53, 109, 110, 112, 141, 4, 5, + 6, 7, 8, 9, 10, 11, 111, 113, 117, 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, 131, 74, 145, 128, + 144, 44, 39, 130, 40, 41, 95, 104, 115, 142, + 42 }; #define yypact_value_is_default(yystate) \ @@ -856,19 +857,20 @@ static const yytype_uint8 yycheck[] = 35, 0, 1, 3, 0, 3, 5, 6, 7, 8, 9, 10, 11, 12, 3, 50, 1, 16, 54, 18, 5, 6, 7, 8, 9, 10, 11, 12, 3, 3, - 3, 16, 31, 18, 50, 94, 52, 43, 48, 49, - 39, 47, 44, 3, 44, 47, 31, 47, 46, 48, + 3, 16, 31, 18, 3, 94, 44, 48, 49, 47, + 39, 50, 43, 52, 44, 53, 31, 47, 46, 48, 49, 53, 88, 43, 39, 90, 3, 46, 57, 101, - 53, 96, 104, 48, 123, 43, 13, 14, 15, 4, - 44, 46, 57, 47, 47, 93, 4, 95, 43, 53, - 54, 55, 3, 93, 119, 95, 3, 4, 139, 140, - 43, 43, 3, 3, 53, 3, 43, 44, 133, 47, - 47, 136, 43, 3, 3, 56, 141, 5, 6, 7, - 8, 9, 10, 11, 12, 3, 52, 4, 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, 52, 3, 53, 45, 4, - 2, 49, 119, 51, 52, 49, 52, 83, 134, 57 + 43, 96, 104, 48, 47, 124, 13, 14, 15, 3, + 44, 46, 57, 47, 47, 93, 4, 95, 47, 53, + 54, 55, 93, 4, 95, 120, 3, 4, 140, 141, + 43, 3, 43, 43, 3, 3, 43, 44, 47, 134, + 47, 53, 137, 43, 3, 3, 52, 142, 5, 6, + 7, 8, 9, 10, 11, 12, 3, 52, 56, 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, 4, 3, 53, 45, + 4, 2, 49, 120, 51, 52, 49, 52, 83, 135, + 57 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -885,11 +887,11 @@ static const yytype_uint8 yystos[] = 46, 43, 3, 3, 3, 44, 47, 87, 89, 90, 1, 48, 62, 77, 78, 79, 88, 47, 63, 53, 69, 53, 75, 76, 87, 76, 72, 89, 53, 54, - 55, 73, 74, 89, 73, 86, 3, 85, 3, 3, - 3, 52, 52, 49, 78, 91, 56, 83, 86, 70, - 71, 89, 75, 4, 90, 89, 74, 45, 80, 71, - 4, 90, 81, 82, 50, 52, 13, 14, 15, 43, - 89, 82, 89, 4, 53, 83, 83 + 55, 73, 74, 89, 73, 86, 3, 47, 85, 3, + 3, 3, 52, 52, 49, 78, 91, 56, 83, 86, + 70, 71, 89, 75, 4, 90, 89, 74, 45, 80, + 71, 4, 90, 81, 82, 50, 52, 13, 14, 15, + 43, 89, 82, 89, 4, 53, 83, 83 }; #define yyerrok (yyerrstatus = 0) @@ -1044,7 +1046,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs (quotearg_style (c_quoting_style, (yyvaluep->chars)), stderr); }; /* Line 721 of yacc.c */ -#line 1048 "parse-gram.c" +#line 1050 "parse-gram.c" break; case 4: /* "\"integer\"" */ @@ -1053,7 +1055,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%d", (yyvaluep->integer)); }; /* Line 721 of yacc.c */ -#line 1057 "parse-gram.c" +#line 1059 "parse-gram.c" break; case 43: /* "\"{...}\"" */ @@ -1062,7 +1064,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->code)); }; /* Line 721 of yacc.c */ -#line 1066 "parse-gram.c" +#line 1068 "parse-gram.c" break; case 44: /* "\"char\"" */ @@ -1071,7 +1073,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs (char_name ((yyvaluep->character)), stderr); }; /* Line 721 of yacc.c */ -#line 1075 "parse-gram.c" +#line 1077 "parse-gram.c" break; case 45: /* "\"epilogue\"" */ @@ -1080,7 +1082,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 721 of yacc.c */ -#line 1084 "parse-gram.c" +#line 1086 "parse-gram.c" break; case 47: /* "\"identifier\"" */ @@ -1089,7 +1091,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs ((yyvaluep->uniqstr), stderr); }; /* Line 721 of yacc.c */ -#line 1093 "parse-gram.c" +#line 1095 "parse-gram.c" break; case 48: /* "\"identifier:\"" */ @@ -1098,7 +1100,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s:", (yyvaluep->uniqstr)); }; /* Line 721 of yacc.c */ -#line 1102 "parse-gram.c" +#line 1104 "parse-gram.c" break; case 51: /* "\"%{...%}\"" */ @@ -1107,7 +1109,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 721 of yacc.c */ -#line 1111 "parse-gram.c" +#line 1113 "parse-gram.c" break; case 53: /* "\"type\"" */ @@ -1116,7 +1118,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); }; /* Line 721 of yacc.c */ -#line 1120 "parse-gram.c" +#line 1122 "parse-gram.c" break; case 84: /* "variable" */ @@ -1125,7 +1127,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fputs ((yyvaluep->uniqstr), stderr); }; /* Line 721 of yacc.c */ -#line 1129 "parse-gram.c" +#line 1131 "parse-gram.c" break; case 85: /* "content.opt" */ @@ -1134,7 +1136,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 721 of yacc.c */ -#line 1138 "parse-gram.c" +#line 1140 "parse-gram.c" break; case 86: /* "braceless" */ @@ -1143,7 +1145,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; /* Line 721 of yacc.c */ -#line 1147 "parse-gram.c" +#line 1149 "parse-gram.c" break; case 87: /* "id" */ @@ -1152,7 +1154,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; /* Line 721 of yacc.c */ -#line 1156 "parse-gram.c" +#line 1158 "parse-gram.c" break; case 88: /* "id_colon" */ @@ -1161,7 +1163,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); }; /* Line 721 of yacc.c */ -#line 1165 "parse-gram.c" +#line 1167 "parse-gram.c" break; case 89: /* "symbol" */ @@ -1170,7 +1172,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; /* Line 721 of yacc.c */ -#line 1174 "parse-gram.c" +#line 1176 "parse-gram.c" break; case 90: /* "string_as_id" */ @@ -1179,7 +1181,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; /* Line 721 of yacc.c */ -#line 1183 "parse-gram.c" +#line 1185 "parse-gram.c" break; default: break; @@ -1710,7 +1712,7 @@ YYLTYPE yylloc; } /* Line 1250 of yacc.c */ -#line 1714 "parse-gram.c" +#line 1716 "parse-gram.c" yylsp[0] = yylloc; goto yysetstate; @@ -2587,10 +2589,17 @@ yyreduce: { (yyval.chars) = ""; } break; - case 99: + case 98: + +/* Line 1463 of yacc.c */ +#line 574 "parse-gram.y" + { (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); } + break; + + case 100: /* Line 1463 of yacc.c */ -#line 584 "parse-gram.y" +#line 585 "parse-gram.y" { code_props plain_code; (yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n'; @@ -2601,17 +2610,17 @@ yyreduce: } break; - case 100: + case 101: /* Line 1463 of yacc.c */ -#line 604 "parse-gram.y" +#line 605 "parse-gram.y" { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } break; - case 101: + case 102: /* Line 1463 of yacc.c */ -#line 606 "parse-gram.y" +#line 607 "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); @@ -2619,27 +2628,27 @@ yyreduce: } break; - case 102: + case 103: /* Line 1463 of yacc.c */ -#line 614 "parse-gram.y" +#line 615 "parse-gram.y" { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } break; - case 105: + case 106: /* Line 1463 of yacc.c */ -#line 626 "parse-gram.y" +#line 627 "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 107: + case 108: /* Line 1463 of yacc.c */ -#line 635 "parse-gram.y" +#line 636 "parse-gram.y" { code_props plain_code; code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); @@ -2653,7 +2662,7 @@ yyreduce: /* Line 1463 of yacc.c */ -#line 2657 "parse-gram.c" +#line 2666 "parse-gram.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2872,7 +2881,7 @@ yyreturn: /* Line 1683 of yacc.c */ -#line 645 "parse-gram.y" +#line 646 "parse-gram.y" diff --git a/src/parse-gram.y b/src/parse-gram.y index c90d14d8..b6044688 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -571,6 +571,7 @@ variable: /* Some content or empty by default. */ content.opt: /* Nothing. */ { $$ = ""; } +| ID { $$ = $1; } | STRING ; diff --git a/tests/calc.at b/tests/calc.at index 802d4830..d085e826 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -576,7 +576,7 @@ AT_CHECK_CALC_LALR([%yacc]) AT_CHECK_CALC_LALR([%error-verbose]) AT_CHECK_CALC_LALR([%define api.pure %locations]) -AT_CHECK_CALC_LALR([%define api.push-pull "both" %define api.pure %locations]) +AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure %locations]) AT_CHECK_CALC_LALR([%error-verbose %locations]) AT_CHECK_CALC_LALR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc]) @@ -585,7 +585,7 @@ AT_CHECK_CALC_LALR([%debug]) AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_LALR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) -AT_CHECK_CALC_LALR([%define api.push-pull "both" %define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) +AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_LALR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}]) diff --git a/tests/existing.at b/tests/existing.at index 5a897324..ba06626b 100644 --- a/tests/existing.at +++ b/tests/existing.at @@ -42,18 +42,18 @@ AT_CHECK([[diff -u input-lalr.output input.output \ [[0]], [$1])]) AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]], - [[%define lr.type "lalr" + [[%define lr.type lalr ]$3], [$4], [$5], [$6], [$7], [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]], - [[%define lr.type "ielr" + [[%define lr.type ielr ]$3], [$4], [$5], [$6], [$7], [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]], [[last-state,no-xml]], - [[%define lr.type "canonical-lr" + [[%define lr.type canonical-lr ]$3], [$4], [$5], [$6], [$7], [$9], [$10], [$11], [$12]) diff --git a/tests/input.at b/tests/input.at index 3c04d580..8a38cd5d 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1004,7 +1004,7 @@ AT_SETUP([[%define enum variables]]) # Front-end. AT_DATA([[input.y]], -[[%define lr.default-reductions "bogus" +[[%define lr.default-reductions bogus %% start: ; ]]) @@ -1017,7 +1017,7 @@ input.y:1.9-29: accepted value: `accepting' # Back-end. AT_DATA([[input.y]], -[[%define api.push-pull "neither" +[[%define api.push-pull neither %% start: ; ]]) @@ -1052,7 +1052,7 @@ input.y:1.9-21: accepted value: `both' ]]) AT_DATA([[input.y]], -[[%define lr.keep_unreachable_states "maybe" +[[%define lr.keep_unreachable_states maybe %% start: ; ]]) @@ -1096,11 +1096,11 @@ AT_BISON_CHECK([[input.y]], [0], [], ]) AT_CHECK_API_PURE([[%language "c++" %defines]], [[]]) -AT_CHECK_API_PURE([[%language "c++" %defines]], [["false"]]) +AT_CHECK_API_PURE([[%language "c++" %defines]], [[false]]) AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[""]]) -AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [["false"]]) -AT_CHECK_API_PURE([[%language "java"]], [["true"]]) -AT_CHECK_API_PURE([[%language "java"]], [["false"]]) +AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[false]]) +AT_CHECK_API_PURE([[%language "java"]], [[true]]) +AT_CHECK_API_PURE([[%language "java"]], [[false]]) AT_CLEANUP diff --git a/tests/local.at b/tests/local.at index 38cd295a..c71b12da 100644 --- a/tests/local.at +++ b/tests/local.at @@ -77,7 +77,7 @@ m4_pushdef([AT_LOCATION_IF], [m4_bmatch([$3], [%locations], [$1], [$2])]) m4_pushdef([AT_PURE_IF], [m4_bmatch([$3], [%define *api\.pure\|%pure-parser], - [m4_bmatch([$3], [%define *api\.pure *"false"], [$2], [$1])], + [m4_bmatch([$3], [%define *api\.pure *"?false"?], [$2], [$1])], [$2])]) m4_pushdef([AT_PURE_AND_LOC_IF], [m4_bmatch([$3], [%locations], [AT_PURE_IF($@)], [$2])]) diff --git a/tests/push.at b/tests/push.at index bf48c682..831be0c0 100644 --- a/tests/push.at +++ b/tests/push.at @@ -33,7 +33,7 @@ AT_DATA_GRAMMAR([[input.y]], void yyerror (char const *msg); %} -%define api.pure %define api.push-pull "push" +%define api.pure %define api.push-pull push %% @@ -93,7 +93,7 @@ AT_DATA_GRAMMAR([[input.y]], int yylex (void); %} -%define api.push-pull "]$1[" +%define api.push-pull ]$1[ %% @@ -156,7 +156,7 @@ AT_SETUP([[Push Parsing: Unsupported Skeletons]]) AT_DATA([[input.y]], [[%glr-parser -%define api.push-pull "push" +%define api.push-pull push %% start: ; ]]) diff --git a/tests/reduce.at b/tests/reduce.at index 45a856a5..e1e33678 100644 --- a/tests/reduce.at +++ b/tests/reduce.at @@ -375,19 +375,19 @@ m4_define([AT_TEST_LR_TYPE], AT_TEST_TABLES_AND_PARSE([[no %define lr.type: ]$1], [[LALR]], [[]], [$2], m4_shiftn(2, $@)) -AT_TEST_TABLES_AND_PARSE([[%define lr.type "lalr": ]$1], +AT_TEST_TABLES_AND_PARSE([[%define lr.type lalr: ]$1], [[LALR]], [[]], - [[%define lr.type "lalr" + [[%define lr.type lalr ]$2], m4_shiftn(2, $@)) -AT_TEST_TABLES_AND_PARSE([[%define lr.type "ielr": ]$1], +AT_TEST_TABLES_AND_PARSE([[%define lr.type ielr: ]$1], [[IELR]], [[]], - [[%define lr.type "ielr" + [[%define lr.type ielr ]$2], m4_shiftn(2, $@)) -AT_TEST_TABLES_AND_PARSE([[%define lr.type "canonical-lr": ]$1], +AT_TEST_TABLES_AND_PARSE([[%define lr.type canonical-lr: ]$1], [[canonical LR]], [[]], - [[%define lr.type "canonical-lr" + [[%define lr.type canonical-lr ]$2], m4_shiftn(2, $@)) ]) @@ -1454,17 +1454,17 @@ AT_TEST_TABLES_AND_PARSE([[no %define lr.default-reductions]], [[all]], [[]], [[]], [$1], [$2], [[]], [$3]) -AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions "all"]], +AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions all]], [[all]], [[]], - [[%define lr.default-reductions "all"]], + [[%define lr.default-reductions all]], [$1], [$2], [[]], [$3]) -AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions "consistent"]], +AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions consistent]], [[consistent]], [[]], - [[%define lr.default-reductions "consistent"]], + [[%define lr.default-reductions consistent]], [$1], [$2], [[]], [$3]) -AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions "accepting"]], +AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions accepting]], [[accepting]], [[]], - [[%define lr.default-reductions "accepting"]], + [[%define lr.default-reductions accepting]], [$1], [$2], [[]], [$3]) ]) diff --git a/tests/torture.at b/tests/torture.at index 91b3b1b9..47435cbc 100644 --- a/tests/torture.at +++ b/tests/torture.at @@ -496,7 +496,7 @@ AT_PARSER_CHECK([./input 10000], 2, [], [ignore], # just helps guarantee we don't let the YYSTACK_USE_ALLOCA feature affect # push parsers. AT_DATA_STACK_TORTURE([AT_USE_ALLOCA], -[[%define api.push-pull "both" +[[%define api.push-pull both ]]) AT_PARSER_CHECK([./input 20], 0, [], [ignore], [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]]) @@ -534,7 +534,7 @@ AT_PARSER_CHECK([./input 10000], 2, [], [ignore], [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]]) AT_DATA_STACK_TORTURE([AT_USE_ALLOCA], -[[%define api.push-pull "both" +[[%define api.push-pull both ]]) AT_PARSER_CHECK([./input 20], 0, [], [ignore], [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])