Class: Aurum::Grammar::LexicalRules::SubsetDeterminizer

Inherits:
Object
  • Object
show all
Defined in:
lib/aurum/grammar/automata.rb

Instance Method Summary collapse

Constructor Details

#initialize(nondeterministic, accepts) ⇒ SubsetDeterminizer

Returns a new instance of SubsetDeterminizer.



85
86
87
88
# File 'lib/aurum/grammar/automata.rb', line 85

def initialize nondeterministic, accepts
  @unmarked, @dstates, @accepts = [], [], accepts
  @nondeterministic, @deterministic, @accept_states = nondeterministic, Automata.new, {}
end

Instance Method Details

#determinizeObject



90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/aurum/grammar/automata.rb', line 90

def determinize
  unmark(closure([0]))
  until @unmarked.empty?
    start = @unmarked.pop
    @nondeterministic.alphabet(@dstates[start]) do |states, character_set|
      destination_state = closure(states)
      destination = unmark(destination_state) unless destination = @dstates.index(destination_state)
      @deterministic.connect(start, character_set, destination)
    end
  end
  return @deterministic, @accept_states
end