Make Regex::Parser build a NFA after parsing
This commit is contained in:
parent
d3df67be1e
commit
89a5976064
@ -107,13 +107,14 @@ module Imbecile
|
|||||||
nfa.start_state.add_transition(nil, nfa.end_state)
|
nfa.start_state.add_transition(nil, nfa.end_state)
|
||||||
else
|
else
|
||||||
ranges = @units.map(&:range)
|
ranges = @units.map(&:range)
|
||||||
if unit.negate
|
if @negate
|
||||||
ranges = negate_ranges(ranges)
|
ranges = negate_ranges(ranges)
|
||||||
end
|
end
|
||||||
ranges.each do |range|
|
ranges.each do |range|
|
||||||
nfa.start_state.add_transition(range, nfa.end_state)
|
nfa.start_state.add_transition(range, nfa.end_state)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
nfa
|
||||||
end
|
end
|
||||||
private
|
private
|
||||||
def negate_ranges(ranges)
|
def negate_ranges(ranges)
|
||||||
@ -171,10 +172,12 @@ module Imbecile
|
|||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :unit
|
attr_reader :unit
|
||||||
|
attr_reader :nfa
|
||||||
|
|
||||||
def initialize(pattern)
|
def initialize(pattern)
|
||||||
@pattern = pattern.dup
|
@pattern = pattern.dup
|
||||||
@unit = parse_alternates
|
@unit = parse_alternates
|
||||||
|
@nfa = @unit.to_nfa
|
||||||
if @pattern != ""
|
if @pattern != ""
|
||||||
raise Error.new(%[Unexpected "#{@pattern}" in pattern])
|
raise Error.new(%[Unexpected "#{@pattern}" in pattern])
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user