From 8b152abaa7306efa4ce6ca55a0046b0d05ae2b37 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 14 Jun 2022 07:34:35 -0400 Subject: [PATCH] Add ItemSet#leading_item_sets --- lib/propane/parser/item_set.rb | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/propane/parser/item_set.rb b/lib/propane/parser/item_set.rb index 3aacee9..df85c41 100644 --- a/lib/propane/parser/item_set.rb +++ b/lib/propane/parser/item_set.rb @@ -17,8 +17,8 @@ class Propane # Maps a following symbol to its ItemSet. attr_reader :following_item_set - # @return [Set] - # Item sets leading to this item set. + # @return [Set] + # ItemSets leading to this item set. attr_reader :in_sets # Build an ItemSet. @@ -81,6 +81,18 @@ class Propane self == other end + # Set of ItemSets that lead to this ItemSet. + # + # This set includes this ItemSet. + # + # @return [Set] + # Set of all ItemSets that lead up to this ItemSet. + def leading_item_sets + @in_sets.reduce(Set[self]) do |result, item_set| + result + item_set.leading_item_sets + end + end + # Represent the ItemSet as a String. # # @return [String]