From 74d94fef72a140662e18a4682e84dc008eb2a260 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 25 Jul 2024 20:02:00 -0400 Subject: [PATCH] Do not build ItemSet follow sets - #28 --- lib/propane/parser.rb | 46 ---------------------------------- lib/propane/parser/item_set.rb | 4 --- 2 files changed, 50 deletions(-) diff --git a/lib/propane/parser.rb b/lib/propane/parser.rb index 42b57b2..9882cbd 100644 --- a/lib/propane/parser.rb +++ b/lib/propane/parser.rb @@ -39,7 +39,6 @@ class Propane end build_reduce_actions! - build_follow_sets! build_tables! write_log! if @warnings.size > 0 && @options[:warnings_as_errors] @@ -233,51 +232,6 @@ class Propane lookahead_tokens end - # Build the follow sets for each ItemSet. - # - # @return [void] - def build_follow_sets! - @item_sets.each do |item_set| - item_set.follow_set = build_follow_set_for_item_set(item_set) - end - end - - # Build the follow set for the given ItemSet. - # - # @param item_set [ItemSet] - # The ItemSet to build the follow set for. - # - # @return [Set] - # Follow set for the given ItemSet. - def build_follow_set_for_item_set(item_set) - follow_set = Set.new - rule_sets_to_check_after = Set.new - item_set.items.each do |item| - (1..).each do |offset| - case symbol = item.next_symbol(offset) - when nil - rule_sets_to_check_after << item.rule.rule_set - break - when Token - follow_set << symbol - break - when RuleSet - follow_set += symbol.start_token_set - unless symbol.could_be_empty? - break - end - end - end - end - reduce_lookaheads = build_lookahead_reduce_actions_for_item_set(item_set) - reduce_lookaheads.each do |token, rule_set| - if rule_sets_to_check_after.include?(rule_set) - follow_set << token - end - end - follow_set - end - def write_log! @log.puts Util.banner("Parser Rules") @grammar.rules.each do |rule| diff --git a/lib/propane/parser/item_set.rb b/lib/propane/parser/item_set.rb index 188436c..2fe8403 100644 --- a/lib/propane/parser/item_set.rb +++ b/lib/propane/parser/item_set.rb @@ -30,10 +30,6 @@ class Propane # more than one rule that could be reduced. attr_accessor :reduce_actions - # @return [Set] - # Follow set for the ItemSet. - attr_accessor :follow_set - # Build an ItemSet. # # @param items [Array]