From 43f5caf4499278573765e90260b6958443cb117e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 20 May 2021 17:34:18 -0400 Subject: [PATCH] Fix some NFA creation --- lib/imbecile/regex/nfa.rb | 2 +- lib/imbecile/regex/unit.rb | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/imbecile/regex/nfa.rb b/lib/imbecile/regex/nfa.rb index fbbbe55..a3a7079 100644 --- a/lib/imbecile/regex/nfa.rb +++ b/lib/imbecile/regex/nfa.rb @@ -31,7 +31,7 @@ module Imbecile def empty nfa = NFA.new - nfa.end_state = nfa.start_state + nfa.start_state.add_transition(nil, nfa.end_state) nfa end diff --git a/lib/imbecile/regex/unit.rb b/lib/imbecile/regex/unit.rb index e94156b..c793234 100644 --- a/lib/imbecile/regex/unit.rb +++ b/lib/imbecile/regex/unit.rb @@ -16,12 +16,16 @@ module Imbecile if @units.empty? NFA.empty else - @units.map do |unit| + nfa = NFA.new + unit_nfas = @units.map do |unit| unit.to_nfa - end.reduce do |result, nfa| - result.end_state.add_transition(nil, nfa.start_state) - result end + nfa.start_state.add_transition(nil, unit_nfas[0].start_state) + unit_nfas.reduce do |prev_nfa, next_nfa| + prev_nfa.end_state.add_transition(nil, next_nfa.start_state) + next_nfa + end.end_state.add_transition(nil, nfa.end_state) + nfa end end end @@ -156,7 +160,7 @@ module Imbecile end unit_nfa.end_state.add_transition(nil, nfa.end_state) if @max_count.nil? - unit_nfa.end_state.add_transition(nil, nfa.start_state) + unit_nfa.end_state.add_transition(nil, unit_nfa.start_state) else (@max_count - @min_count).times do prev_nfa = unit_nfa