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
"%parse-param {...}"
"%printer {...}"
"%union {...}"
- BRACED_CODE action
PROLOGUE EPILOGUE
%printer { fprintf (stderr, "\"%s\"", $$); }
STRING string_content
"%parse-param {...}"
"%printer {...}"
"%union {...}"
- BRACED_CODE action
PROLOGUE EPILOGUE
%type <uniqstr> TYPE
%printer { fprintf (stderr, "<%s>", $$); } TYPE
{
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"
| 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
| 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. */