Identify fragile reductions at compile time
This commit is contained in:
parent
a92067702d
commit
2d436cf141
13 changed files with 4843 additions and 4790 deletions
|
|
@ -290,8 +290,12 @@ class CCodeGenerator {
|
|||
add("SHIFT_EXTRA()");
|
||||
break;
|
||||
case ParseActionTypeReduce:
|
||||
add("REDUCE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ")");
|
||||
if (reduce_action_is_fragile(action))
|
||||
add("REDUCE_FRAGILE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ")");
|
||||
else
|
||||
add("REDUCE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ")");
|
||||
break;
|
||||
case ParseActionTypeReduceExtra:
|
||||
add("REDUCE_EXTRA(" + symbol_id(action.symbol) + ")");
|
||||
|
|
@ -339,6 +343,11 @@ class CCodeGenerator {
|
|||
: syntax_grammar.rule_name(symbol);
|
||||
}
|
||||
|
||||
bool reduce_action_is_fragile(const ParseAction &action) const {
|
||||
return parse_table.fragile_production_ids.find(action.production_id) !=
|
||||
parse_table.fragile_production_ids.end();
|
||||
}
|
||||
|
||||
// C-code generation functions
|
||||
|
||||
void _switch(string condition, function<void()> body) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue