Recursively build item sets
This commit is contained in:
parent
ceb7e9ee32
commit
9dffa3c41a
@ -10,15 +10,26 @@ class Imbecile
|
|||||||
pattern.components << token_eof
|
pattern.components << token_eof
|
||||||
Item.new(pattern, 0)
|
Item.new(pattern, 0)
|
||||||
end
|
end
|
||||||
start_item_set = ItemSet.new(start_items)
|
eval_item_sets = Set.new
|
||||||
|
eval_item_sets << ItemSet.new(start_items)
|
||||||
|
|
||||||
puts "Start item set:"
|
while eval_item_sets.size > 0
|
||||||
puts start_item_set
|
this_eval_item_sets = eval_item_sets
|
||||||
start_item_set.follow_symbols.each do |follow_symbol|
|
eval_item_sets = Set.new
|
||||||
follow_set = start_item_set.follow_set(follow_symbol)
|
this_eval_item_sets.each do |item_set|
|
||||||
puts
|
unless item_sets_set.include?(item_set)
|
||||||
puts "follow set:"
|
item_set.id = @item_sets.size
|
||||||
puts follow_set
|
@item_sets << item_set
|
||||||
|
item_sets_set << item_set
|
||||||
|
puts "Item set #{item_set.id}:"
|
||||||
|
puts item_set
|
||||||
|
puts
|
||||||
|
item_set.follow_symbols.each do |follow_symbol|
|
||||||
|
follow_set = item_set.follow_set(follow_symbol)
|
||||||
|
eval_item_sets << follow_set
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -5,13 +5,15 @@ class Imbecile
|
|||||||
|
|
||||||
attr_reader :items
|
attr_reader :items
|
||||||
|
|
||||||
|
attr_accessor :id
|
||||||
|
|
||||||
def initialize(items)
|
def initialize(items)
|
||||||
@items = Set.new(items)
|
@items = Set.new(items)
|
||||||
close!
|
close!
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow_symbols
|
def follow_symbols
|
||||||
Set.new(@items.map(&:follow_symbol))
|
Set.new(@items.map(&:follow_symbol).compact)
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow_set(symbol)
|
def follow_set(symbol)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user