From 1daaf4485ff036ab56bfb617ec6a4877ebeb864f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 16 Jun 2014 13:37:34 -0700 Subject: [PATCH] Refactor item set transition functions --- .../build_tables/item_set_transitions_spec.cc | 2 -- spec/compiler/compiler_specs.cc | 2 +- .../build_tables/build_parse_table.cc | 1 - .../build_tables/item_set_transitions.cc | 33 ++++++------------- .../build_tables/item_set_transitions.h | 8 ++--- 5 files changed, 13 insertions(+), 33 deletions(-) diff --git a/spec/compiler/build_tables/item_set_transitions_spec.cc b/spec/compiler/build_tables/item_set_transitions_spec.cc index a6262ef1..95c33414 100644 --- a/spec/compiler/build_tables/item_set_transitions_spec.cc +++ b/spec/compiler/build_tables/item_set_transitions_spec.cc @@ -40,8 +40,6 @@ describe("syntactic item set transitions", [&]() { { ParseItem(Symbol(0), seq({ i_token(22), i_sym(1) }), 3), { Symbol(23, SymbolOptionToken) } }, }); - SymTransitions sym_transitions; - AssertThat(sym_transitions(set1, grammar), Equals(map({ { Symbol(22, SymbolOptionToken), ParseItemSet({ { ParseItem(Symbol(0), i_sym(1), 4), { Symbol(23, SymbolOptionToken) } }, diff --git a/spec/compiler/compiler_specs.cc b/spec/compiler/compiler_specs.cc index 2fdde15a..b971db39 100644 --- a/spec/compiler/compiler_specs.cc +++ b/spec/compiler/compiler_specs.cc @@ -5,7 +5,7 @@ int main(int argc, char *argv[]) { "", "--no-color", "--only=" - "" + "compiles the javascript" }; return bandit::run(4, const_cast(args)); } diff --git a/src/compiler/build_tables/build_parse_table.cc b/src/compiler/build_tables/build_parse_table.cc index 90faf0a1..c2605bea 100644 --- a/src/compiler/build_tables/build_parse_table.cc +++ b/src/compiler/build_tables/build_parse_table.cc @@ -26,7 +26,6 @@ namespace tree_sitter { const PreparedGrammar grammar; ParseConflictManager conflict_manager; unordered_map parse_state_ids; - SymTransitions sym_transitions; ParseTable parse_table; ParseStateId add_parse_state(const ParseItemSet &item_set) { diff --git a/src/compiler/build_tables/item_set_transitions.cc b/src/compiler/build_tables/item_set_transitions.cc index 6c44a23a..acdf5cc2 100644 --- a/src/compiler/build_tables/item_set_transitions.cc +++ b/src/compiler/build_tables/item_set_transitions.cc @@ -13,28 +13,20 @@ namespace tree_sitter { namespace build_tables { map - SymTransitions::operator()(const ParseItemSet &item_set, const PreparedGrammar &grammar) { + sym_transitions(const ParseItemSet &item_set, const PreparedGrammar &grammar) { map result; - for (const auto &pair : item_set) { const ParseItem &item = pair.first; const set &lookahead_symbols = pair.second; - map result_for_item; for (auto &transition : sym_transitions(item.rule)) { ParseItem new_item(item.lhs, transition.second, item.consumed_symbol_count + 1); - result_for_item.insert({ - transition.first, - item_set_closure(new_item, lookahead_symbols, grammar) - }); + merge_sym_transitions(&result, {{ transition.first, item_set_closure(new_item, lookahead_symbols, grammar) }}, + [](ParseItemSet *left, const ParseItemSet *right) { + for (auto &pair : *right) + left->operator[](pair.first).insert(pair.second.begin(), pair.second.end()); + }); } - - merge_sym_transitions(&result, result_for_item, - [](ParseItemSet *left, const ParseItemSet *right) { - for (auto &pair : *right) - left->operator[](pair.first).insert(pair.second.begin(), pair.second.end()); - }); } - return result; } @@ -42,18 +34,13 @@ namespace tree_sitter { char_transitions(const LexItemSet &item_set, const PreparedGrammar &grammar) { map result; for (const LexItem &item : item_set) { - map item_transitions; for (auto &transition : char_transitions(item.rule)) { LexItem next_item(item.lhs, transition.second); - item_transitions.insert({ - transition.first, - LexItemSet({ next_item }) - }); + merge_char_transitions(&result, {{ transition.first, LexItemSet({ next_item }) }}, + [](LexItemSet *left, const LexItemSet *right) { + left->insert(right->begin(), right->end()); + }); } - merge_char_transitions(&result, item_transitions, - [](LexItemSet *left, const LexItemSet *right) { - left->insert(right->begin(), right->end()); - }); } return result; } diff --git a/src/compiler/build_tables/item_set_transitions.h b/src/compiler/build_tables/item_set_transitions.h index 39354178..6cb62ebc 100644 --- a/src/compiler/build_tables/item_set_transitions.h +++ b/src/compiler/build_tables/item_set_transitions.h @@ -13,12 +13,8 @@ namespace tree_sitter { } namespace build_tables { - class SymTransitions { - public: - std::map - operator()(const ParseItemSet &item_set, const PreparedGrammar &grammar); - std::map> transitions_cache; - }; + std::map + sym_transitions(const ParseItemSet &item_set, const PreparedGrammar &grammar); std::map char_transitions(const LexItemSet &item_set, const PreparedGrammar &grammar);