%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 cf499cff31)

Conflicts:

	doc/bison.texinfo
	src/parse-gram.c
	src/parse-gram.h
	tests/actions.at
	tests/calc.at
This commit is contained in:
Joel E. Denny
2009-08-28 03:46:37 -04:00
parent 3a414bbfa0
commit f37495f601
13 changed files with 225 additions and 178 deletions

View File

@@ -1,3 +1,21 @@
2009-08-28 Joel E. Denny <jdenny@clemson.edu>
%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 <jdenny@clemson.edu> 2009-08-28 Joel E. Denny <jdenny@clemson.edu>
%define lr.type: make values lowercase IDs. %define lr.type: make values lowercase IDs.

27
NEWS
View File

@@ -20,9 +20,9 @@ Bison News
default. You can specify the type of parser tables in the grammar default. You can specify the type of parser tables in the grammar
file with these directives: file with these directives:
%define lr.type "lalr" %define lr.type lalr
%define lr.type "ielr" %define lr.type ielr
%define lr.type "canonical-lr" %define lr.type canonical-lr
The default reduction optimization in the parser tables can also be The default reduction optimization in the parser tables can also be
adjusted using `%define lr.default-reductions'. See the documentation 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 These features are experimental. More user feedback will help to
stabilize them. 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 Each of these command-line options
@@ -54,7 +56,7 @@ Bison News
quietly override %define, but -D and --define do not. For further quietly override %define, but -D and --define do not. For further
details, see the section "Bison Options" in the Bison manual. details, see the section "Bison Options" in the Bison manual.
** %define variables renamed. *** Variables renamed.
The following %define variables The following %define variables
@@ -69,7 +71,18 @@ Bison News
The old names are now deprecated but will be maintained indefinitely The old names are now deprecated but will be maintained indefinitely
for backward compatibility. 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 Consistently with directives (such as %error-verbose) and variables
(e.g. push-pull), symbol names may include dashes in any position, (e.g. push-pull), symbol names may include dashes in any position,

View File

@@ -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}): parser (@pxref{Decl Summary,,%define api.push-pull}):
@example @example
%define api.push-pull "push" %define api.push-pull push
@end example @end example
In almost all cases, you want to ensure that your push parser is also 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 @example
%define api.pure %define api.pure
%define api.push-pull "push" %define api.push-pull push
@end example @end example
There is a major notable functional difference between the pure push parser 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 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, 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 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 @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} 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 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 would be used. However, the user should note that it is implemented in the
generated parser by calling @code{yypull_parse}. generated parser by calling @code{yypull_parse}.
This makes the @code{yyparse} function that is generated with the 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 @code{yyparse} function. If the user
calls the @code{yypull_parse} function it will parse the rest of the input 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 stream. It is possible to @code{yypush_parse} tokens to select a subgrammar
@@ -4664,8 +4664,8 @@ yypstate_delete (ps);
@end example @end example
Adding the @code{%define api.pure} declaration does exactly the same thing to 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 the generated parser with @code{%define api.push-pull both} as it did for
@code{%define api.push-pull "push"}. @code{%define api.push-pull push}.
@node Decl Summary @node Decl Summary
@subsection Bison Declaration Summary @subsection Bison Declaration Summary
@@ -4834,6 +4834,7 @@ already defined, so that the debugging facilities are compiled.
@end deffn @end deffn
@deffn {Directive} %define @var{variable} @deffn {Directive} %define @var{variable}
@deffnx {Directive} %define @var{variable} @var{value}
@deffnx {Directive} %define @var{variable} "@var{value}" @deffnx {Directive} %define @var{variable} "@var{value}"
Define a variable to adjust Bison's behavior. Define a variable to adjust Bison's behavior.
The possible choices for @var{variable}, as well as their meanings, depend on 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 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}]}. 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{""}. @code{""}.
Some @var{variable}s may be used as Booleans. 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: of the following four conditions:
@enumerate @enumerate
@item @code{"@var{value}"} is @code{"true"} @item @code{@var{value}} is @code{true}
@item @code{"@var{value}"} is omitted (or is @code{""}). @item @code{@var{value}} is omitted (or @code{""} is specified).
This is equivalent to @code{"true"}. 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. @item @var{variable} is never defined.
In this case, Bison selects a default value, which may depend on the selected 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 Accepted Values: Boolean
@item Default Value: @code{"false"} @item Default Value: @code{false}
@end itemize @end itemize
@item api.push-pull @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. (The current push parsing interface is experimental and may evolve.
More user feedback will help to stabilize it.) 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 @end itemize
@item lr.default-reductions @item lr.default-reductions
@@ -4920,7 +4925,7 @@ More user feedback will help to stabilize it.)
@item Accepted Values: @item Accepted Values:
@itemize @itemize
@item @code{"all"}. @item @code{all}.
For @acronym{LALR} and @acronym{IELR} parsers (@pxref{Decl For @acronym{LALR} and @acronym{IELR} parsers (@pxref{Decl
Summary,,lr.type}) by default, all states are permitted to contain Summary,,lr.type}) by default, all states are permitted to contain
default reductions. 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 reductions in an @acronym{LALR} or @acronym{IELR} state can contain
tokens that are syntactically incorrect for some left contexts. tokens that are syntactically incorrect for some left contexts.
@item @code{"consistent"}. @item @code{consistent}.
@cindex consistent states @cindex consistent states
A consistent state is a state that has only one possible action. 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 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 soon as it @emph{needs} the syntactically unacceptable token from the
scanner. scanner.
@item @code{"accepting"}. @item @code{accepting}.
@cindex accepting state @cindex accepting state
By default, the only default reduction permitted in a canonical By default, the only default reduction permitted in a canonical
@acronym{LR} parser is the accept action in the accepting state, which @acronym{LR} parser is the accept action in the accepting state, which
@@ -4956,8 +4961,8 @@ without performing any extra reductions.
@item Default Value: @item Default Value:
@itemize @itemize
@item @code{"accepting"} if @code{lr.type} is @code{"canonical-lr"}. @item @code{accepting} if @code{lr.type} is @code{canonical-lr}.
@item @code{"all"} otherwise. @item @code{all} otherwise.
@end itemize @end itemize
@end itemize @end itemize
@@ -4978,7 +4983,7 @@ are useless in the generated parser.
@item Accepted Values: Boolean @item Accepted Values: Boolean
@item Default Value: @code{"false"} @item Default Value: @code{false}
@item Caveats: @item Caveats:
@@ -5020,7 +5025,7 @@ More user feedback will help to stabilize it.)
@item Accepted Values: @item Accepted Values:
@itemize @itemize
@item @code{"lalr"}. @item @code{lalr}.
While Bison generates @acronym{LALR} parser tables by default for While Bison generates @acronym{LALR} parser tables by default for
historical reasons, @acronym{IELR} or canonical @acronym{LR} is almost historical reasons, @acronym{IELR} or canonical @acronym{LR} is almost
always preferable for deterministic parsers. 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}. from @acronym{IELR} and canonical @acronym{LR}.
@end itemize @end itemize
@item @code{"ielr"}. @item @code{ielr}.
@acronym{IELR} is a minimal @acronym{LR} algorithm. @acronym{IELR} is a minimal @acronym{LR} algorithm.
That is, given any grammar (@acronym{LR} or non-@acronym{LR}), That is, given any grammar (@acronym{LR} or non-@acronym{LR}),
@acronym{IELR} and canonical @acronym{LR} always accept exactly the same @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. of magnitude less as well.
This can significantly reduce the complexity of developing of a grammar. This can significantly reduce the complexity of developing of a grammar.
@item @code{"canonical-lr"}. @item @code{canonical-lr}.
@cindex delayed syntax errors @cindex delayed syntax errors
@cindex syntax errors delayed @cindex syntax errors delayed
The only advantage of canonical @acronym{LR} over @acronym{IELR} is 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. facilitate the development of a grammar.
@end itemize @end itemize
@item Default Value: @code{"lalr"} @item Default Value: @code{lalr}
@end itemize @end itemize
@item namespace @item namespace
@@ -5460,8 +5465,8 @@ exp: @dots{} @{ @dots{}; *randomness += 1; @dots{} @}
More user feedback will help to stabilize it.) More user feedback will help to stabilize it.)
You call the function @code{yypush_parse} to parse a single token. This 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 function is available if either the @code{%define api.push-pull push} or
@code{%define api.push-pull "both"} declaration is used. @code{%define api.push-pull both} declaration is used.
@xref{Push Decl, ,A Push Parser}. @xref{Push Decl, ,A Push Parser}.
@deftypefun int yypush_parse (yypstate *yyps) @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.) More user feedback will help to stabilize it.)
You call the function @code{yypull_parse} to parse the rest of the input 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. declaration is used.
@xref{Push Decl, ,A Push Parser}. @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.) More user feedback will help to stabilize it.)
You call the function @code{yypstate_new} to create a new parser instance. 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 This function is available if either the @code{%define api.push-pull push} or
@code{%define api.push-pull "both"} declaration is used. @code{%define api.push-pull both} declaration is used.
@xref{Push Decl, ,A Push Parser}. @xref{Push Decl, ,A Push Parser}.
@deftypefun yypstate *yypstate_new (void) @deftypefun yypstate *yypstate_new (void)
@@ -5513,8 +5518,8 @@ allocated.
More user feedback will help to stabilize it.) More user feedback will help to stabilize it.)
You call the function @code{yypstate_delete} to delete a parser instance. 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 function is available if either the @code{%define api.push-pull push} or
@code{%define api.push-pull "both"} declaration is used. @code{%define api.push-pull both} declaration is used.
@xref{Push Decl, ,A Push Parser}. @xref{Push Decl, ,A Push Parser}.
@deftypefun void yypstate_delete (yypstate *yyps) @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 a range composed of a pair of positions (possibly spanning several
files). The location class is an inner class of the parser; the name files). The location class is an inner class of the parser; the name
is @code{Location} by default, and may also be renamed using 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. The location class treats the position as a completely opaque value.
By default, the class name is @code{Position}, but this can be changed By default, the class name is @code{Position}, but this can be changed
@@ -9965,6 +9970,7 @@ Precedence}.
@deffn {Directive} %define @var{define-variable} @deffn {Directive} %define @var{define-variable}
@deffnx {Directive} %define @var{define-variable} @var{value} @deffnx {Directive} %define @var{define-variable} @var{value}
@deffnx {Directive} %define @var{define-variable} "@var{value}"
Define a variable to adjust Bison's behavior. Define a variable to adjust Bison's behavior.
@xref{Decl Summary,,%define}. @xref{Decl Summary,,%define}.
@end deffn @end deffn

View File

@@ -35,7 +35,7 @@
#include "state.h" #include "state.h"
#include "symtab.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; typedef enum { LR_TYPE__LALR, LR_TYPE__IELR, LR_TYPE__CANONICAL_LR } LrType;
/** /**

View File

@@ -560,16 +560,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */ /* YYFINAL -- State number of the termination state. */
#define YYFINAL 3 #define YYFINAL 3
/* YYLAST -- Last index in YYTABLE. */ /* YYLAST -- Last index in YYTABLE. */
#define YYLAST 159 #define YYLAST 160
/* YYNTOKENS -- Number of terminals. */ /* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 58 #define YYNTOKENS 58
/* YYNNTS -- Number of nonterminals. */ /* YYNNTS -- Number of nonterminals. */
#define YYNNTS 34 #define YYNNTS 34
/* YYNRULES -- Number of rules. */ /* YYNRULES -- Number of rules. */
#define YYNRULES 107 #define YYNRULES 108
/* YYNRULES -- Number of states. */ /* YYNRULES -- Number of states. */
#define YYNSTATES 147 #define YYNSTATES 148
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2 #define YYUNDEFTOK 2
@@ -630,7 +630,7 @@ static const yytype_uint16 yyprhs[] =
180, 182, 184, 187, 190, 194, 196, 199, 201, 204, 180, 182, 184, 187, 190, 194, 196, 199, 201, 204,
206, 209, 212, 213, 218, 220, 224, 227, 228, 232, 206, 209, 212, 213, 218, 220, 224, 227, 228, 232,
236, 240, 244, 248, 249, 251, 253, 255, 256, 258, 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. */ /* 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, 81, 50, 82, -1, 81, 52, -1, -1, 82, 89,
83, -1, 82, 43, 83, -1, 82, 13, 89, -1, 83, -1, 82, 43, 83, -1, 82, 13, 89, -1,
82, 14, 4, -1, 82, 15, 53, -1, -1, 56, 82, 14, 4, -1, 82, 15, 53, -1, -1, 56,
-1, 47, -1, 3, -1, -1, 3, -1, 43, -1, -1, 47, -1, 3, -1, -1, 47, -1, 3, -1,
47, -1, 44, -1, 48, -1, 87, -1, 90, -1, 43, -1, 47, -1, 44, -1, 48, -1, 87, -1,
3, -1, -1, 49, 45, -1 90, -1, 3, -1, -1, 49, 45, -1
}; };
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ /* 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, 442, 443, 448, 450, 455, 456, 460, 461, 462, 463,
468, 473, 478, 484, 490, 501, 502, 511, 512, 518, 468, 473, 478, 484, 490, 501, 502, 511, 512, 518,
519, 520, 527, 527, 532, 533, 534, 539, 541, 543, 519, 520, 527, 527, 532, 533, 534, 539, 541, 543,
545, 547, 549, 554, 556, 567, 568, 573, 574, 583, 545, 547, 549, 554, 556, 567, 568, 573, 574, 575,
603, 605, 614, 619, 620, 625, 632, 634 584, 604, 606, 615, 620, 621, 626, 633, 635
}; };
#endif #endif
@@ -739,8 +739,8 @@ static const yytype_uint8 yyr1[] =
71, 71, 72, 72, 73, 73, 74, 74, 74, 74, 71, 71, 72, 72, 73, 73, 74, 74, 74, 74,
75, 75, 75, 75, 75, 76, 76, 77, 77, 78, 75, 75, 75, 75, 75, 76, 76, 77, 77, 78,
78, 78, 80, 79, 81, 81, 81, 82, 82, 82, 78, 78, 80, 79, 81, 81, 81, 82, 82, 82,
82, 82, 82, 83, 83, 84, 84, 85, 85, 86, 82, 82, 82, 83, 83, 84, 84, 85, 85, 85,
87, 87, 88, 89, 89, 90, 91, 91 86, 87, 87, 88, 89, 89, 90, 91, 91
}; };
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ /* 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, 1, 1, 2, 2, 3, 1, 2, 1, 2, 1,
2, 2, 0, 4, 1, 3, 2, 0, 3, 3, 2, 2, 0, 4, 1, 3, 2, 0, 3, 3,
3, 3, 3, 0, 1, 1, 1, 0, 1, 1, 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. /* 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, 16, 0, 0, 0, 20, 0, 41, 23, 24,
0, 0, 28, 0, 0, 0, 31, 32, 33, 0, 0, 0, 28, 0, 0, 0, 31, 32, 33, 0,
6, 34, 44, 4, 5, 36, 35, 56, 0, 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, 12, 13, 14, 0, 17, 18, 19, 21, 0, 25,
0, 27, 29, 30, 105, 101, 100, 103, 37, 104, 0, 27, 29, 30, 106, 102, 101, 104, 37, 105,
0, 102, 0, 0, 77, 79, 93, 45, 0, 57, 0, 103, 0, 0, 77, 79, 93, 45, 0, 57,
0, 70, 75, 50, 71, 48, 51, 62, 67, 68, 0, 70, 75, 50, 71, 48, 51, 62, 67, 68,
69, 38, 64, 66, 39, 43, 98, 8, 15, 22, 69, 38, 64, 66, 39, 43, 99, 98, 8, 15,
26, 81, 80, 0, 78, 2, 94, 82, 46, 52, 22, 26, 81, 80, 0, 78, 2, 94, 82, 46,
58, 60, 76, 72, 73, 63, 65, 107, 87, 59, 52, 58, 60, 76, 72, 73, 63, 65, 108, 87,
61, 74, 83, 84, 87, 86, 0, 0, 0, 93, 59, 61, 74, 83, 84, 87, 86, 0, 0, 0,
93, 85, 90, 91, 92, 89, 88 93, 93, 85, 90, 91, 92, 89, 88
}; };
/* YYDEFGOTO[NTERM-NUM]. */ /* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] = static const yytype_int16 yydefgoto[] =
{ {
-1, 1, 2, 43, 82, 88, 45, 49, 48, 46, -1, 1, 2, 43, 82, 88, 45, 49, 48, 46,
47, 90, 119, 120, 96, 101, 102, 92, 93, 83, 47, 90, 120, 121, 96, 101, 102, 92, 93, 83,
84, 85, 128, 132, 133, 117, 58, 107, 55, 77, 84, 85, 129, 133, 134, 118, 58, 108, 55, 77,
86, 103, 79, 115 86, 103, 79, 116
}; };
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -795,54 +795,55 @@ static const yytype_int16 yydefgoto[] =
#define YYPACT_NINF -60 #define YYPACT_NINF -60
static const yytype_int16 yypact[] = static const yytype_int16 yypact[] =
{ {
-60, 4, 102, -60, -60, -60, 7, 10, 22, -60, -60, 4, 103, -60, -60, -60, -2, -1, 10, -60,
-60, -60, -6, -60, -60, 27, 40, -60, 65, 72, -60, -60, 17, -60, -60, 27, 66, -60, 72, 79,
2, -60, 35, 79, 47, -60, 11, -60, -60, -60, 2, -60, 47, 88, 49, -60, 11, -60, -60, -60,
25, 48, -60, 89, 90, 0, -60, -60, -60, 15, 25, 50, -60, 91, 92, 0, -60, -60, -60, 15,
-60, -60, 52, -60, -60, -60, -60, 41, -2, -2, -60, -60, 51, -60, -60, -60, -60, 48, -8, -8,
0, 26, 26, -60, 59, -60, -60, -60, 92, -60, 0, 26, 26, -60, 60, -60, -60, -60, 31, -60,
-60, -60, -60, 100, -60, -60, -60, -60, 101, -60, -60, -60, -60, 101, -60, -60, -60, -60, 102, -60,
112, -60, -60, -60, -60, -60, -60, -60, -60, -60, 113, -60, -60, -60, -60, -60, -60, -60, -60, -60,
64, -60, 93, 1, -60, -60, 49, -60, 59, -60, 54, -60, 65, 1, -60, -60, 62, -60, 60, -60,
0, -60, -60, -2, 83, -2, 0, -60, -60, -60, 0, -60, -60, -8, 83, -8, 0, -60, -60, -60,
-60, 26, -60, -60, 26, -60, -60, -60, -60, -60, -60, 26, -60, -60, 26, -60, -60, -60, -60, -60,
-60, -60, -60, 103, -60, -60, -60, -60, -60, 0, -60, -60, -60, -60, 104, -60, -60, -60, -60, -60,
-60, 113, -60, 143, -60, -60, -60, -60, -60, -60, 0, -60, 142, -60, 144, -60, -60, -60, -60, -60,
-60, -60, -16, 53, -60, -60, 0, 145, 94, 49, -60, -60, -60, -9, 53, -60, -60, 0, 146, 95,
49, 53, -60, -60, -60, -60, -60 62, 62, 53, -60, -60, -60, -60, -60
}; };
/* YYPGOTO[NTERM-NUM]. */ /* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] = static const yytype_int16 yypgoto[] =
{ {
-60, -60, -60, -60, 148, -60, -60, -60, -60, -60, -60, -60, -60, -60, 149, -60, -60, -60, -60, -60,
-60, -60, -60, 33, -60, 104, -42, -18, 106, -60, -60, -60, -60, 33, -60, 105, -42, -18, 107, -60,
74, -60, -60, -60, 24, -51, -60, -60, -36, -10, 75, -60, -60, -60, 24, -52, -60, -60, -36, -11,
-60, -35, -59, -60 -60, -35, -59, -60
}; };
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which positive, shift that token. If negative, reduce the rule which
number is the opposite. If YYTABLE_NINF, syntax error. */ number is the opposite. If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -107 #define YYTABLE_NINF -108
static const yytype_int16 yytable[] = 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, 8, 9, 10, 11, 67, 97, 80, 12, 105, 14,
4, 5, 6, 7, 8, 9, 10, 11, 69, 74, 4, 5, 6, 7, 8, 9, 10, 11, 69, 74,
56, 12, 27, 14, 134, 124, 135, 53, 94, 94, 56, 12, 27, 14, 106, 125, 75, 94, 94, 76,
35, 54, 75, 59, 75, 76, 27, 76, 63, 81, 35, 135, 51, 136, 75, 91, 27, 76, 63, 81,
113, 91, 118, 51, 35, 121, 74, 68, 42, 126, 114, 50, 119, 52, 35, 122, 74, 68, 42, 127,
50, 125, 126, 81, 131, 52, 136, 137, 138, 60, 53, 126, 127, 81, 54, 132, 137, 138, 139, 59,
75, 70, 42, 76, 57, 122, 61, 122, 64, 98, 75, 70, 42, 76, 57, 123, 60, 123, 107, 98,
99, 100, 65, 94, 121, 94, 74, 123, 145, 146, 99, 100, 94, 61, 94, 122, 74, 124, 146, 147,
66, 71, 72, 73, 89, 106, 139, 75, 140, 87, 64, 65, 66, 71, 72, 73, 140, 75, 87, 141,
76, 142, 53, 108, 109, 116, 140, 4, 5, 6, 76, 89, 143, 53, 109, 110, 112, 141, 4, 5,
7, 8, 9, 10, 11, 110, 111, 130, 12, 13, 6, 7, 8, 9, 10, 11, 111, 113, 117, 12,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
34, 35, 36, 37, 38, 112, 74, 144, 127, 143, 33, 34, 35, 36, 37, 38, 131, 74, 145, 128,
44, 39, 129, 40, 41, 95, 104, 114, 141, 42 144, 44, 39, 130, 40, 41, 95, 104, 115, 142,
42
}; };
#define yypact_value_is_default(yystate) \ #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, 35, 0, 1, 3, 0, 3, 5, 6, 7, 8,
9, 10, 11, 12, 3, 50, 1, 16, 54, 18, 9, 10, 11, 12, 3, 50, 1, 16, 54, 18,
5, 6, 7, 8, 9, 10, 11, 12, 3, 3, 5, 6, 7, 8, 9, 10, 11, 12, 3, 3,
3, 16, 31, 18, 50, 94, 52, 43, 48, 49, 3, 16, 31, 18, 3, 94, 44, 48, 49, 47,
39, 47, 44, 3, 44, 47, 31, 47, 46, 48, 39, 50, 43, 52, 44, 53, 31, 47, 46, 48,
49, 53, 88, 43, 39, 90, 3, 46, 57, 101, 49, 53, 88, 43, 39, 90, 3, 46, 57, 101,
53, 96, 104, 48, 123, 43, 13, 14, 15, 4, 43, 96, 104, 48, 47, 124, 13, 14, 15, 3,
44, 46, 57, 47, 47, 93, 4, 95, 43, 53, 44, 46, 57, 47, 47, 93, 4, 95, 47, 53,
54, 55, 3, 93, 119, 95, 3, 4, 139, 140, 54, 55, 93, 4, 95, 120, 3, 4, 140, 141,
43, 43, 3, 3, 53, 3, 43, 44, 133, 47, 43, 3, 43, 43, 3, 3, 43, 44, 47, 134,
47, 136, 43, 3, 3, 56, 141, 5, 6, 7, 47, 53, 137, 43, 3, 3, 52, 142, 5, 6,
8, 9, 10, 11, 12, 3, 52, 4, 16, 17, 7, 8, 9, 10, 11, 12, 3, 52, 56, 16,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
38, 39, 40, 41, 42, 52, 3, 53, 45, 4, 37, 38, 39, 40, 41, 42, 4, 3, 53, 45,
2, 49, 119, 51, 52, 49, 52, 83, 134, 57 4, 2, 49, 120, 51, 52, 49, 52, 83, 135,
57
}; };
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing /* 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, 46, 43, 3, 3, 3, 44, 47, 87, 89, 90,
1, 48, 62, 77, 78, 79, 88, 47, 63, 53, 1, 48, 62, 77, 78, 79, 88, 47, 63, 53,
69, 53, 75, 76, 87, 76, 72, 89, 53, 54, 69, 53, 75, 76, 87, 76, 72, 89, 53, 54,
55, 73, 74, 89, 73, 86, 3, 85, 3, 3, 55, 73, 74, 89, 73, 86, 3, 47, 85, 3,
3, 52, 52, 49, 78, 91, 56, 83, 86, 70, 3, 3, 52, 52, 49, 78, 91, 56, 83, 86,
71, 89, 75, 4, 90, 89, 74, 45, 80, 71, 70, 71, 89, 75, 4, 90, 89, 74, 45, 80,
4, 90, 81, 82, 50, 52, 13, 14, 15, 43, 71, 4, 90, 81, 82, 50, 52, 13, 14, 15,
89, 82, 89, 4, 53, 83, 83 43, 89, 82, 89, 4, 53, 83, 83
}; };
#define yyerrok (yyerrstatus = 0) #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); }; { fputs (quotearg_style (c_quoting_style, (yyvaluep->chars)), stderr); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1048 "parse-gram.c" #line 1050 "parse-gram.c"
break; break;
case 4: /* "\"integer\"" */ case 4: /* "\"integer\"" */
@@ -1053,7 +1055,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "%d", (yyvaluep->integer)); }; { fprintf (stderr, "%d", (yyvaluep->integer)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1057 "parse-gram.c" #line 1059 "parse-gram.c"
break; break;
case 43: /* "\"{...}\"" */ case 43: /* "\"{...}\"" */
@@ -1062,7 +1064,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->code)); }; { fprintf (stderr, "{\n%s\n}", (yyvaluep->code)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1066 "parse-gram.c" #line 1068 "parse-gram.c"
break; break;
case 44: /* "\"char\"" */ case 44: /* "\"char\"" */
@@ -1071,7 +1073,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fputs (char_name ((yyvaluep->character)), stderr); }; { fputs (char_name ((yyvaluep->character)), stderr); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1075 "parse-gram.c" #line 1077 "parse-gram.c"
break; break;
case 45: /* "\"epilogue\"" */ case 45: /* "\"epilogue\"" */
@@ -1080,7 +1082,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1084 "parse-gram.c" #line 1086 "parse-gram.c"
break; break;
case 47: /* "\"identifier\"" */ case 47: /* "\"identifier\"" */
@@ -1089,7 +1091,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fputs ((yyvaluep->uniqstr), stderr); }; { fputs ((yyvaluep->uniqstr), stderr); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1093 "parse-gram.c" #line 1095 "parse-gram.c"
break; break;
case 48: /* "\"identifier:\"" */ case 48: /* "\"identifier:\"" */
@@ -1098,7 +1100,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "%s:", (yyvaluep->uniqstr)); }; { fprintf (stderr, "%s:", (yyvaluep->uniqstr)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1102 "parse-gram.c" #line 1104 "parse-gram.c"
break; break;
case 51: /* "\"%{...%}\"" */ case 51: /* "\"%{...%}\"" */
@@ -1107,7 +1109,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1111 "parse-gram.c" #line 1113 "parse-gram.c"
break; break;
case 53: /* "\"type\"" */ case 53: /* "\"type\"" */
@@ -1116,7 +1118,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); }; { fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1120 "parse-gram.c" #line 1122 "parse-gram.c"
break; break;
case 84: /* "variable" */ case 84: /* "variable" */
@@ -1125,7 +1127,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fputs ((yyvaluep->uniqstr), stderr); }; { fputs ((yyvaluep->uniqstr), stderr); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1129 "parse-gram.c" #line 1131 "parse-gram.c"
break; break;
case 85: /* "content.opt" */ case 85: /* "content.opt" */
@@ -1134,7 +1136,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1138 "parse-gram.c" #line 1140 "parse-gram.c"
break; break;
case 86: /* "braceless" */ case 86: /* "braceless" */
@@ -1143,7 +1145,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); }; { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1147 "parse-gram.c" #line 1149 "parse-gram.c"
break; break;
case 87: /* "id" */ case 87: /* "id" */
@@ -1152,7 +1154,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1156 "parse-gram.c" #line 1158 "parse-gram.c"
break; break;
case 88: /* "id_colon" */ case 88: /* "id_colon" */
@@ -1161,7 +1163,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); }; { fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1165 "parse-gram.c" #line 1167 "parse-gram.c"
break; break;
case 89: /* "symbol" */ case 89: /* "symbol" */
@@ -1170,7 +1172,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1174 "parse-gram.c" #line 1176 "parse-gram.c"
break; break;
case 90: /* "string_as_id" */ case 90: /* "string_as_id" */
@@ -1179,7 +1181,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); }; { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
/* Line 721 of yacc.c */ /* Line 721 of yacc.c */
#line 1183 "parse-gram.c" #line 1185 "parse-gram.c"
break; break;
default: default:
break; break;
@@ -1710,7 +1712,7 @@ YYLTYPE yylloc;
} }
/* Line 1250 of yacc.c */ /* Line 1250 of yacc.c */
#line 1714 "parse-gram.c" #line 1716 "parse-gram.c"
yylsp[0] = yylloc; yylsp[0] = yylloc;
goto yysetstate; goto yysetstate;
@@ -2587,10 +2589,17 @@ yyreduce:
{ (yyval.chars) = ""; } { (yyval.chars) = ""; }
break; break;
case 99: case 98:
/* Line 1463 of yacc.c */ /* Line 1463 of yacc.c */
#line 584 "parse-gram.y" #line 574 "parse-gram.y"
{ (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); }
break;
case 100:
/* Line 1463 of yacc.c */
#line 585 "parse-gram.y"
{ {
code_props plain_code; code_props plain_code;
(yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n'; (yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n';
@@ -2601,17 +2610,17 @@ yyreduce:
} }
break; break;
case 100:
/* Line 1463 of yacc.c */
#line 604 "parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 101: case 101:
/* Line 1463 of yacc.c */ /* Line 1463 of yacc.c */
#line 606 "parse-gram.y" #line 605 "parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 102:
/* Line 1463 of yacc.c */
#line 607 "parse-gram.y"
{ {
(yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)])); (yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false); symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
@@ -2619,27 +2628,27 @@ yyreduce:
} }
break; break;
case 102: case 103:
/* Line 1463 of yacc.c */ /* 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)])); } { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break; break;
case 105: case 106:
/* Line 1463 of yacc.c */ /* 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)])); (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); symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
} }
break; break;
case 107: case 108:
/* Line 1463 of yacc.c */ /* Line 1463 of yacc.c */
#line 635 "parse-gram.y" #line 636 "parse-gram.y"
{ {
code_props plain_code; code_props plain_code;
code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
@@ -2653,7 +2662,7 @@ yyreduce:
/* Line 1463 of yacc.c */ /* Line 1463 of yacc.c */
#line 2657 "parse-gram.c" #line 2666 "parse-gram.c"
default: break; default: break;
} }
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2872,7 +2881,7 @@ yyreturn:
/* Line 1683 of yacc.c */ /* Line 1683 of yacc.c */
#line 645 "parse-gram.y" #line 646 "parse-gram.y"

View File

@@ -571,6 +571,7 @@ variable:
/* Some content or empty by default. */ /* Some content or empty by default. */
content.opt: content.opt:
/* Nothing. */ { $$ = ""; } /* Nothing. */ { $$ = ""; }
| ID { $$ = $1; }
| STRING | STRING
; ;

View File

@@ -576,7 +576,7 @@ AT_CHECK_CALC_LALR([%yacc])
AT_CHECK_CALC_LALR([%error-verbose]) AT_CHECK_CALC_LALR([%error-verbose])
AT_CHECK_CALC_LALR([%define api.pure %locations]) 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])
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])
@@ -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([%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.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}]) 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}])

View File

@@ -42,18 +42,18 @@ AT_CHECK([[diff -u input-lalr.output input.output \
[[0]], [$1])]) [[0]], [$1])])
AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]], AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]],
[[%define lr.type "lalr" [[%define lr.type lalr
]$3], ]$3],
[$4], [$5], [$6], [$7], [$4], [$5], [$6], [$7],
[AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]], AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]],
[[%define lr.type "ielr" [[%define lr.type ielr
]$3], ]$3],
[$4], [$5], [$6], [$7], [$4], [$5], [$6], [$7],
[AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12]) [AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]], AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]],
[[last-state,no-xml]], [[last-state,no-xml]],
[[%define lr.type "canonical-lr" [[%define lr.type canonical-lr
]$3], ]$3],
[$4], [$5], [$6], [$7], [$4], [$5], [$6], [$7],
[$9], [$10], [$11], [$12]) [$9], [$10], [$11], [$12])

View File

@@ -1004,7 +1004,7 @@ AT_SETUP([[%define enum variables]])
# Front-end. # Front-end.
AT_DATA([[input.y]], AT_DATA([[input.y]],
[[%define lr.default-reductions "bogus" [[%define lr.default-reductions bogus
%% %%
start: ; start: ;
]]) ]])
@@ -1017,7 +1017,7 @@ input.y:1.9-29: accepted value: `accepting'
# Back-end. # Back-end.
AT_DATA([[input.y]], AT_DATA([[input.y]],
[[%define api.push-pull "neither" [[%define api.push-pull neither
%% %%
start: ; start: ;
]]) ]])
@@ -1052,7 +1052,7 @@ input.y:1.9-21: accepted value: `both'
]]) ]])
AT_DATA([[input.y]], AT_DATA([[input.y]],
[[%define lr.keep_unreachable_states "maybe" [[%define lr.keep_unreachable_states maybe
%% %%
start: ; 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]], [[]])
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]], [[""]])
AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [["false"]]) AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[false]])
AT_CHECK_API_PURE([[%language "java"]], [["true"]]) AT_CHECK_API_PURE([[%language "java"]], [[true]])
AT_CHECK_API_PURE([[%language "java"]], [["false"]]) AT_CHECK_API_PURE([[%language "java"]], [[false]])
AT_CLEANUP AT_CLEANUP

View File

@@ -77,7 +77,7 @@ m4_pushdef([AT_LOCATION_IF],
[m4_bmatch([$3], [%locations], [$1], [$2])]) [m4_bmatch([$3], [%locations], [$1], [$2])])
m4_pushdef([AT_PURE_IF], m4_pushdef([AT_PURE_IF],
[m4_bmatch([$3], [%define *api\.pure\|%pure-parser], [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])]) [$2])])
m4_pushdef([AT_PURE_AND_LOC_IF], m4_pushdef([AT_PURE_AND_LOC_IF],
[m4_bmatch([$3], [%locations], [AT_PURE_IF($@)], [$2])]) [m4_bmatch([$3], [%locations], [AT_PURE_IF($@)], [$2])])

View File

@@ -33,7 +33,7 @@ AT_DATA_GRAMMAR([[input.y]],
void yyerror (char const *msg); 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); 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]], AT_DATA([[input.y]],
[[%glr-parser [[%glr-parser
%define api.push-pull "push" %define api.push-pull push
%% %%
start: ; start: ;
]]) ]])

View File

@@ -375,19 +375,19 @@ m4_define([AT_TEST_LR_TYPE],
AT_TEST_TABLES_AND_PARSE([[no %define lr.type: ]$1], AT_TEST_TABLES_AND_PARSE([[no %define lr.type: ]$1],
[[LALR]], [[]], [[LALR]], [[]],
[$2], m4_shiftn(2, $@)) [$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]], [[]], [[LALR]], [[]],
[[%define lr.type "lalr" [[%define lr.type lalr
]$2], ]$2],
m4_shiftn(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]], [[]], [[IELR]], [[]],
[[%define lr.type "ielr" [[%define lr.type ielr
]$2], ]$2],
m4_shiftn(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]], [[]], [[canonical LR]], [[]],
[[%define lr.type "canonical-lr" [[%define lr.type canonical-lr
]$2], ]$2],
m4_shiftn(2, $@)) m4_shiftn(2, $@))
]) ])
@@ -1454,17 +1454,17 @@ AT_TEST_TABLES_AND_PARSE([[no %define lr.default-reductions]],
[[all]], [[]], [[all]], [[]],
[[]], [[]],
[$1], [$2], [[]], [$3]) [$1], [$2], [[]], [$3])
AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions "all"]], AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions all]],
[[all]], [[]], [[all]], [[]],
[[%define lr.default-reductions "all"]], [[%define lr.default-reductions all]],
[$1], [$2], [[]], [$3]) [$1], [$2], [[]], [$3])
AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions "consistent"]], AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions consistent]],
[[consistent]], [[]], [[consistent]], [[]],
[[%define lr.default-reductions "consistent"]], [[%define lr.default-reductions consistent]],
[$1], [$2], [[]], [$3]) [$1], [$2], [[]], [$3])
AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions "accepting"]], AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions accepting]],
[[accepting]], [[]], [[accepting]], [[]],
[[%define lr.default-reductions "accepting"]], [[%define lr.default-reductions accepting]],
[$1], [$2], [[]], [$3]) [$1], [$2], [[]], [$3])
]) ])

View File

@@ -496,7 +496,7 @@ AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
# just helps guarantee we don't let the YYSTACK_USE_ALLOCA feature affect # just helps guarantee we don't let the YYSTACK_USE_ALLOCA feature affect
# push parsers. # push parsers.
AT_DATA_STACK_TORTURE([AT_USE_ALLOCA], AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
[[%define api.push-pull "both" [[%define api.push-pull both
]]) ]])
AT_PARSER_CHECK([./input 20], 0, [], [ignore], AT_PARSER_CHECK([./input 20], 0, [], [ignore],
[[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]]) [[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"]]) [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
AT_DATA_STACK_TORTURE([AT_USE_ALLOCA], AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
[[%define api.push-pull "both" [[%define api.push-pull both
]]) ]])
AT_PARSER_CHECK([./input 20], 0, [], [ignore], AT_PARSER_CHECK([./input 20], 0, [], [ignore],
[[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]]) [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])