From 89a5976064fd2a2017422f6856c6412cc44f15d9 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 18 May 2021 16:07:39 -0400 Subject: [PATCH] Make Regex::Parser build a NFA after parsing --- lib/imbecile/regex/parser.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/imbecile/regex/parser.rb b/lib/imbecile/regex/parser.rb index 0a692aa..768ad2d 100644 --- a/lib/imbecile/regex/parser.rb +++ b/lib/imbecile/regex/parser.rb @@ -107,13 +107,14 @@ module Imbecile nfa.start_state.add_transition(nil, nfa.end_state) else ranges = @units.map(&:range) - if unit.negate + if @negate ranges = negate_ranges(ranges) end ranges.each do |range| nfa.start_state.add_transition(range, nfa.end_state) end end + nfa end private def negate_ranges(ranges) @@ -171,10 +172,12 @@ module Imbecile end attr_reader :unit + attr_reader :nfa def initialize(pattern) @pattern = pattern.dup @unit = parse_alternates + @nfa = @unit.to_nfa if @pattern != "" raise Error.new(%[Unexpected "#{@pattern}" in pattern]) end