From 5af3179ff2766e095ffb2c09790da6031ebb893c Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 15 Jun 2022 23:27:19 -0400 Subject: [PATCH] Add RuleSet#start_token_set --- lib/propane/rule_set.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/propane/rule_set.rb b/lib/propane/rule_set.rb index a47054c..fb6c101 100644 --- a/lib/propane/rule_set.rb +++ b/lib/propane/rule_set.rb @@ -40,6 +40,30 @@ class Propane @could_be_empty end + # Build the start token set for the RuleSet. + # + # @return [Set] + # Start token set for the RuleSet. + def start_token_set + if @_start_token_set.nil? + @_start_token_set = Set.new + @rules.each do |rule| + rule.components.each do |component| + if component.is_a?(Token) + @_start_token_set << component + break + else + @_start_token_set += component.start_token_set + unless component.could_be_empty? + break + end + end + end + end + end + @_start_token_set + end + end end