]> git.saurik.com Git - bison.git/blobdiff - src/parse-gram.y
(EXTRA_DIST): Add the following files, which
[bison.git] / src / parse-gram.y
index c5d8024fa3315a258532360d99777698d2e94523..dad4e8cf3041c5f8e41ef6356acd3c2fff87f8df 100644 (file)
@@ -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"
@@ -173,24 +175,26 @@ declarations:
 declaration:
   grammar_declaration
 | PROLOGUE                                 { prologue_augment ($1, @1); }
-| "%debug"                                 { debug_flag = 1; }
+| "%debug"                                 { debug_flag = true; }
 | "%define" string_content string_content  { muscle_insert ($2, $3); }
-| "%defines"                               { defines_flag = 1; }
-| "%error-verbose"                         { error_verbose = 1; }
+| "%defines"                               { defines_flag = true; }
+| "%error-verbose"                         { error_verbose = true; }
 | "%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; }
+| "%locations"                             { locations_flag = true; }
 | "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
-| "%no-lines"                              { no_lines_flag = 1; }
+| "%no-lines"                              { no_lines_flag = true; }
+| "%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; }
+| "%token-table"                           { token_table_flag = true; }
 | "%verbose"                               { report_flag = report_states; }
-| "%yacc"                                  { yacc_flag = 1; }
+| "%yacc"                                  { yacc_flag = true; }
 | ";"
 ;
 
@@ -203,7 +207,7 @@ grammar_declaration:
     }
 | "%union {...}"
     {
-      typed = 1;
+      typed = true;
       MUSCLE_INSERT_INT ("stype_line", @1.start.line);
       muscle_insert ("stype", $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;
 }