%token PERCENT_EXPECT "%expect"
%token PERCENT_START "%start"
%token PERCENT_PREC "%prec"
+%token PERCENT_DPREC "%dprec"
+%token PERCENT_MERGE "%merge"
%token PERCENT_VERBOSE "%verbose"
%token PERCENT_ERROR_VERBOSE "%error-verbose"
%token PERCENT_DEFINE "%define"
%token PERCENT_PURE_PARSER "%pure-parser"
+%token PERCENT_GLR_PARSER "%glr-parser"
%token PERCENT_DEFINES "%defines"
| "%no-lines" { no_lines_flag = 1; }
| "%output" "=" string_content { spec_outfile = $3; }
| "%pure-parser" { pure_parser = 1; }
+| "%glr-parser" { glr_parser = 1; }
| "%skeleton" string_content { skeleton = $2; }
| "%token-table" { token_table_flag = 1; }
| "%verbose" { report_flag = 1; }
{
symbol_list_t *list;
for (list = $4; list; list = list->next)
- symbol_destructor_set (list->sym, list->location, $3);
+ symbol_destructor_set (list->sym, $3, @3);
symbol_list_free ($4);
current_braced_code = action_braced_code;
}
{
symbol_list_t *list;
for (list = $3; list; list = list->next)
- symbol_type_set (list->sym, list->location, $2);
+ symbol_type_set (list->sym, $2, @2);
symbol_list_free ($3);
}
;
++current_prec;
for (list = $3; list; list = list->next)
{
- symbol_type_set (list->sym, list->location, current_type);
- symbol_precedence_set (list->sym, list->location, current_prec, $1);
+ symbol_type_set (list->sym, current_type, @2);
+ symbol_precedence_set (list->sym, current_prec, $1, @1);
}
symbol_list_free ($3);
current_type = NULL;
| ID
{
symbol_class_set ($1, current_class, @1);
- symbol_type_set ($1, @1, current_type);
+ symbol_type_set ($1, current_type, @1);
}
| ID INT
{
symbol_class_set ($1, current_class, @1);
- symbol_type_set ($1, @1, current_type);
+ symbol_type_set ($1, current_type, @1);
symbol_user_token_number_set ($1, $2, @2);
}
| ID string_as_id
{
symbol_class_set ($1, current_class, @1);
- symbol_type_set ($1, @1, current_type);
+ symbol_type_set ($1, current_type, @1);
symbol_make_alias ($1, $2);
}
| ID INT string_as_id
{
symbol_class_set ($1, current_class, @1);
- symbol_type_set ($1, @1, current_type);
+ symbol_type_set ($1, current_type, @1);
symbol_user_token_number_set ($1, $2, @2);
symbol_make_alias ($1, $3);
}
{ grammar_current_rule_action_append ($2, @2); }
| rhs "%prec" symbol
{ grammar_current_rule_prec_set ($3, @3); }
+| rhs "%dprec" INT
+ { grammar_current_rule_dprec_set ($3, @3); }
+| rhs "%merge" TYPE
+ { grammar_current_rule_merge_set ($3, @3); }
;
symbol:
ID { $$ = $1; }
| string_as_id { $$ = $1; }
-| CHARACTER { $$ = getsym ($1, @1); }
+| CHARACTER { $$ = symbol_get ($1, @1); }
;
action:
string_as_id:
STRING
{
- $$ = getsym ($1, @1);
+ $$ = symbol_get ($1, @1);
symbol_class_set ($$, token_sym, @1);
}
;