Class: Journey::NFA::Simulator

Inherits:
Object
  • Object
show all
Defined in:
lib/journey/nfa/simulator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transition_table) ⇒ Simulator

Returns a new instance of Simulator.



16
17
18
# File 'lib/journey/nfa/simulator.rb', line 16

def initialize transition_table
  @tt = transition_table
end

Instance Attribute Details

#ttObject (readonly)

Returns the value of attribute tt.



14
15
16
# File 'lib/journey/nfa/simulator.rb', line 14

def tt
  @tt
end

Instance Method Details

#simulate(string) ⇒ Object Also known as: =~, match



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/journey/nfa/simulator.rb', line 20

def simulate string
  input = StringScanner.new string
  state = tt.eclosure 0
  until input.eos?
    sym   = input.scan(/[\/\.\?]|[^\/\.\?]+/)

    # FIXME: tt.eclosure is not needed for the GTG
    state = tt.eclosure tt.move(state, sym)
  end

  acceptance_states = state.find_all { |s|
    tt.accepting? tt.eclosure(s).sort.last
  }

  return if acceptance_states.empty?

  memos = acceptance_states.map { |x| tt.memo x }.flatten.compact

  MatchData.new memos
end