Method: Kleene::DSL#literal

Defined in:
lib/kleene/dsl.rb

#literal(token_stream, alphabet = DEFAULT_ALPHABET) ⇒ Object

given a string with N characters in it: N+1 states: start state and N other states structure: start state -> transition for first character in the string -> state for having observed first character in the string ->

transition for second character in the string -> state for having observed second character in the string ->
...
transition for last character in the string -> state for having observed last character in the string (marked final)


15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/kleene/dsl.rb', line 15

def literal(token_stream, alphabet = DEFAULT_ALPHABET)
  start = current_state = State.new
  nfa = NFA.new(start, alphabet)
  token_stream.each_char do |token|
    next_state = State.new
    nfa.add_transition(token, current_state, next_state)
    current_state = next_state
  end
  current_state.final = true
  nfa.update_final_states
  nfa.set_regex_pattern(token_stream)
  nfa
end