Class: Ibex::LALR::IELRPartition

Inherits:
Object
  • Object
show all
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

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

#buildObject



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