diff --git a/lib/imbecile/fa.rb b/lib/imbecile/fa.rb index 489afa7..0909358 100644 --- a/lib/imbecile/fa.rb +++ b/lib/imbecile/fa.rb @@ -56,35 +56,6 @@ module Imbecile end end - def build_tables - transition_table = [] - state_table = [] - states = enumerate - states.each do |state, id| - accepts = - if state.accepts.nil? - TOKEN_NONE - elsif state.accepts.name - state.accepts.id - else - TOKEN_DROP - end - state_table << { - transition_table_index: transition_table.size, - n_transitions: state.transitions.size, - accepts: accepts, - } - state.transitions.each do |transition| - transition_table << { - first: transition.code_point_range.first, - last: transition.code_point_range.last, - destination: states[transition.destination], - } - end - end - [transition_table, state_table] - end - end end diff --git a/lib/imbecile/lexer/dfa.rb b/lib/imbecile/lexer/dfa.rb index ab5d3d2..74903f4 100644 --- a/lib/imbecile/lexer/dfa.rb +++ b/lib/imbecile/lexer/dfa.rb @@ -22,6 +22,35 @@ module Imbecile @start_state = @states[0] end + def build_tables + transition_table = [] + state_table = [] + states = enumerate + states.each do |state, id| + accepts = + if state.accepts.nil? + TOKEN_NONE + elsif state.accepts.name + state.accepts.id + else + TOKEN_DROP + end + state_table << { + transition_table_index: transition_table.size, + n_transitions: state.transitions.size, + accepts: accepts, + } + state.transitions.each do |transition| + transition_table << { + first: transition.code_point_range.first, + last: transition.code_point_range.last, + destination: states[transition.destination], + } + end + end + [transition_table, state_table] + end + private def register_nfa_state_set(nfa_state_set)