/* Bison Grammar Parser -*- C -*-
- Copyright (C) 2002 Free Software Foundation, Inc.
+
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
PERCENT_LOCATIONS "%locations"
PERCENT_NAME_PREFIX "%name-prefix"
PERCENT_NO_LINES "%no-lines"
+ PERCENT_NONDETERMINISTIC_PARSER "%nondeterministic-parser"
PERCENT_OUTPUT "%output"
PERCENT_PARSE_PARAM "%parse-param {...}"
PERCENT_PURE_PARSER "%pure-parser"
| "%error-verbose" { error_verbose = 1; }
| "%expect" INT { expected_conflicts = $2; }
| "%file-prefix" "=" string_content { spec_file_prefix = $3; }
-| "%glr-parser" { glr_parser = 1; }
+| "%glr-parser" { nondeterministic_parser = true;
+ glr_parser = true; }
| "%lex-param {...}" { add_param ("lex_param", $1, @1); }
| "%locations" { locations_flag = 1; }
| "%name-prefix" "=" string_content { spec_name_prefix = $3; }
| "%no-lines" { no_lines_flag = 1; }
+| "%nondeterministic-parser" { nondeterministic_parser = true; }
| "%output" "=" string_content { spec_outfile = $3; }
| "%parse-param {...}" { add_param ("parse_param", $1, @1); }
-| "%pure-parser" { pure_parser = 1; }
+| "%pure-parser" { pure_parser = true; }
| "%skeleton" string_content { skeleton = $2; }
| "%token-table" { token_table_flag = 1; }
-| "%verbose" { report_flag = 1; }
+| "%verbose" { report_flag = report_states; }
| "%yacc" { yacc_flag = 1; }
| ";"
;
body of the grammar. */
rules_or_grammar_declaration:
rules
-| grammar_declaration
+| grammar_declaration ";"
{
if (yacc_flag)
complain_at (@$, _("POSIX forbids declarations in the grammar"));
{
yyerrok;
}
-| ";"
;
rules:
rhses.1:
rhs { grammar_rule_end (@1); }
| rhses.1 "|" rhs { grammar_rule_end (@3); }
+| rhses.1 ";"
;
rhs:
lloc_default (YYLTYPE const *rhs, int n)
{
int i;
- YYLTYPE r;
- r.start = r.end = rhs[n].end;
+ YYLTYPE loc;
+ loc.start = loc.end = rhs[n].end;
/* Ignore empty nonterminals the start of the the right-hand side.
Do not bother to ignore them at the end of the right-hand side,
for (i = 1; i <= n; i++)
if (! equal_boundaries (rhs[i].start, rhs[i].end))
{
- r.start = rhs[i].start;
+ loc.start = rhs[i].start;
break;
}
- return r;
+ return loc;
}