Move FA class out of Regex class
This commit is contained in:
1 parent
37d6917b49
commit
28591907c1
8 files changed
+169
-175
No files matched your search
@@ -0,0 +1,51 @@
|
||||
module Imbecile
|
||||
class FA
|
||||
|
||||
class State
|
||||
|
||||
attr_accessor :accepts
|
||||
attr_reader :transitions
|
||||
|
||||
def initialize
|
||||
@transitions = []
|
||||
end
|
||||
|
||||
def add_transition(code_point_range, destination)
|
||||
@transitions << Transition.new(code_point_range, destination)
|
||||
end
|
||||
|
||||
# Determine the set of states that can be reached by nil transitions.
|
||||
# from this state.
|
||||
#
|
||||
# @return [Set<NFA::State>]
|
||||
# Set of states.
|
||||
def nil_transition_states
|
||||
states = Set[self]
|
||||
analyze_state = lambda do |state|
|
||||
state.nil_transitions.each do |transition|
|
||||
unless states.include?(transition.destination)
|
||||
states << transition.destination
|
||||
analyze_state[transition.destination]
|
||||
end
|
||||
end
|
||||
end
|
||||
analyze_state[self]
|
||||
states
|
||||
end
|
||||
|
||||
def nil_transitions
|
||||
@transitions.select do |transition|
|
||||
transition.nil?
|
||||
end
|
||||
end
|
||||
|
||||
def cp_transitions
|
||||
@transitions.reject do |transition|
|
||||
transition.nil?
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,23 @@
|
||||
module Imbecile
|
||||
class FA
|
||||
class State
|
||||
|
||||
class Transition
|
||||
|
||||
attr_reader :code_point_range
|
||||
attr_reader :destination
|
||||
|
||||
def initialize(code_point_range, destination)
|
||||
@code_point_range = code_point_range
|
||||
@destination = destination
|
||||
end
|
||||
|
||||
def nil?
|
||||
@code_point_range.nil?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user