Generate C code for the in-progress symbols in each parse state

This commit is contained in:
Max Brunsfeld 2016-02-18 20:22:18 -08:00
parent 00d953f507
commit ffcd8b5c49
4 changed files with 89 additions and 18 deletions

View file

@ -131,6 +131,12 @@ class ParseTableBuilder {
auto pair = parse_state_ids.find(item_set);
if (pair == parse_state_ids.end()) {
ParseStateId state_id = parse_table.add_state();
for (const auto &entry : item_set.entries) {
const ParseItem &item = entry.first;
if (item.step_index > 0 && item.lhs() != rules::START())
parse_table.states[state_id].in_progress_symbols.insert(item.lhs());
}
parse_state_ids[item_set] = state_id;
item_sets_to_process.push_back({ item_set, state_id });
return state_id;