From 11a1ea8dfecd21ecf2aa677be83c1ff2b4e0d81d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 5 Oct 2015 17:02:59 -0700 Subject: [PATCH] Reuse separator-rule in LexTableBuilder --- src/compiler/build_tables/build_lex_table.cc | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/compiler/build_tables/build_lex_table.cc b/src/compiler/build_tables/build_lex_table.cc index 5548173e..e7b29a0c 100644 --- a/src/compiler/build_tables/build_lex_table.cc +++ b/src/compiler/build_tables/build_lex_table.cc @@ -35,12 +35,18 @@ class LexTableBuilder { ParseTable *parse_table; unordered_map lex_state_ids; LexTable lex_table; + rule_ptr separator_rule; public: LexTableBuilder(ParseTable *parse_table, const LexicalGrammar &lex_grammar) : lex_grammar(lex_grammar), conflict_manager(lex_grammar), - parse_table(parse_table) {} + parse_table(parse_table) { + vector separators; + for (const auto &rule : lex_grammar.separators) + separators.push_back(rules::Repeat::build(rule)); + separator_rule = rules::Choice::build(separators); + } LexTable build() { for (auto &parse_state : parse_table->states) { @@ -127,20 +133,13 @@ class LexTableBuilder { rule_ptr after_separators(rule_ptr rule) { return rules::Seq::build({ make_shared( - separator_rule(), map({ + separator_rule, map({ { rules::START_TOKEN, 1 }, { rules::PRECEDENCE, -1 }, })), rule, }); } - rule_ptr separator_rule() const { - vector separators; - for (const auto &rule : lex_grammar.separators) - separators.push_back(rules::Repeat::build(rule)); - return rules::Choice::build(separators); - } - set precedence_values_for_item_set(const LexItemSet &item_set) const { set result; for (const auto &item : item_set.entries) {