X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/5320ca4d6fe045c2e4deb6f46f901264cd4d0351..637fa3f83edca74df6a9d834ffe7bfd4d7468793:/src/parse-gram.y diff --git a/src/parse-gram.y b/src/parse-gram.y index e8863018..02608bb0 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -1,5 +1,6 @@ /* 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. @@ -119,6 +120,7 @@ int current_prec = 0; 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" @@ -179,17 +181,19 @@ declaration: | "%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; } | ";" ; @@ -328,7 +332,7 @@ grammar: body of the grammar. */ rules_or_grammar_declaration: rules -| grammar_declaration +| grammar_declaration ";" { if (yacc_flag) complain_at (@$, _("POSIX forbids declarations in the grammar")); @@ -337,7 +341,6 @@ rules_or_grammar_declaration: { yyerrok; } -| ";" ; rules: @@ -347,6 +350,7 @@ rules: rhses.1: rhs { grammar_rule_end (@1); } | rhses.1 "|" rhs { grammar_rule_end (@3); } +| rhses.1 ";" ; rhs: @@ -413,8 +417,8 @@ static YYLTYPE 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, @@ -422,11 +426,11 @@ lloc_default (YYLTYPE const *rhs, int n) 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; }