]> git.saurik.com Git - bison.git/blobdiff - src/parse-gram.y
Various DJGGP specific issues in /djgpp.
[bison.git] / src / parse-gram.y
index 701b63b4aba0eca71af322f9dfcffbcb9b0961b8..11cd489e36f578999f3d6e5c5ddc9b040385d23f 100644 (file)
@@ -57,6 +57,19 @@ static uniqstr current_type = 0;
 static symbol *current_lhs;
 static location current_lhs_location;
 static int current_prec = 0;
+
+#ifdef UINT_FAST8_MAX
+# define YYTYPE_UINT8 uint_fast8_t
+#endif
+#ifdef INT_FAST8_MAX
+# define YYTYPE_INT8 int_fast8_t
+#endif
+#ifdef UINT_FAST16_MAX
+# define YYTYPE_UINT16 uint_fast16_t
+#endif
+#ifdef INT_FAST16_MAX
+# define YYTYPE_INT16 int_fast16_t
+#endif
 %}
 
 %debug
@@ -163,7 +176,6 @@ static int current_prec = 0;
              "%parse-param {...}"
              "%printer {...}"
              "%union {...}"
-             BRACED_CODE action
              PROLOGUE EPILOGUE
 %printer { fprintf (stderr, "\"%s\"", $$); }
              STRING string_content
@@ -174,7 +186,6 @@ static int current_prec = 0;
              "%parse-param {...}"
              "%printer {...}"
              "%union {...}"
-             BRACED_CODE action
              PROLOGUE EPILOGUE
 %type <uniqstr> TYPE
 %printer { fprintf (stderr, "<%s>", $$); } TYPE
@@ -276,7 +287,7 @@ grammar_declaration:
     {
       symbol_list *list;
       for (list = $2; list; list = list->next)
-       symbol_printer_set (list->sym, $1, list->location);
+       symbol_printer_set (list->sym, $1, @1);
       symbol_list_free ($2);
     }
 | "%default-prec"
@@ -417,7 +428,6 @@ rhs:
 | rhs symbol
     { grammar_current_rule_symbol_append ($2, @2); }
 | rhs action
-    { grammar_current_rule_action_append ($2, @2); }
 | rhs "%prec" symbol
     { grammar_current_rule_prec_set ($3, @3); }
 | rhs "%dprec" INT
@@ -431,9 +441,21 @@ symbol:
 | string_as_id    { $$ = $1; }
 ;
 
+/* Handle the semantics of an action specially, with a mid-rule
+   action, so that grammar_current_rule_action_append is invoked
+   immediately after the braced code is read by the scanner.
+
+   This implementation relies on the LALR(1) parsing algorithm.
+   If grammar_current_rule_action_append were executed in a normal
+   action for this rule, then when the input grammar contains two
+   successive actions, the scanner would have to read both actions
+   before reducing this rule.  That wouldn't work, since the scanner
+   relies on all preceding input actions being processed by
+   grammar_current_rule_action_append before it scans the next
+   action.  */
 action:
+    { grammar_current_rule_action_append (last_string, last_braced_code_loc); }
   BRACED_CODE
-    { $$ = $1; }
 ;
 
 /* A string used as an ID: quote it.  */