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 |