Class: Ibex::LALR::IELRPartition
- Inherits:
-
Object
- Object
- Ibex::LALR::IELRPartition
- Defined in:
- lib/ibex/lalr/ielr_partition.rb
Overview
Deterministically merges compatible canonical LR(1) states and splits partitions until their outgoing transitions are congruent.
Constant Summary collapse
- AUGMENTED_PRODUCTION =
: Integer
-1 #: Integer
Instance Method Summary collapse
- #build ⇒ Object
-
#initialize(grammar, states, transitions) ⇒ IELRPartition
constructor
A new instance of IELRPartition.
Constructor Details
#initialize(grammar, states, transitions) ⇒ IELRPartition
Returns a new instance of IELRPartition.
19 20 21 22 23 24 |
# File 'lib/ibex/lalr/ielr_partition.rb', line 19 def initialize(grammar, states, transitions) @grammar = grammar @states = states @transitions = transitions @contributions = Array.new(states.length) { |state_id| action_contributions(state_id) } end |
Instance Method Details
#build ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ibex/lalr/ielr_partition.rb', line 27 def build partitions = refine_transitions(initial_partitions) indexes = partition_indexes(partitions) items = partitions.map { |members| merge_items(members) } transitions = partitions.map do |members| @transitions.fetch(members.first).to_h do |symbol_id, target| [symbol_id, indexes.fetch(target)] end end [items, transitions] end |