class Rutile::NFA::Node
Attributes
default[RW]
edges[RW]
not[RW]
on_stack[RW]
pos[RW]
value[RW]
Public Class Methods
new(pos)
click to toggle source
# File lib/rutile/nfa.rb, line 5 def initialize(pos) @pos = pos @edges = {} @value = :transition_state @on_stack = false @default = nil end
Public Instance Methods
add(char, pos)
click to toggle source
# File lib/rutile/nfa.rb, line 19 def add(char, pos) if @edges[char] == nil @edges[char] = [] end @edges[char] << pos end
dup()
click to toggle source
# File lib/rutile/nfa.rb, line 43 def dup dupl = Node.new @pos dupl.value = @value dupl.default = @default dupl.on_stack = @on_stack dupl.edges = Marshal.load(Marshal.dump(@edges)) return dupl end
empty(char)
click to toggle source
# File lib/rutile/nfa.rb, line 26 def empty(char) @edges[char] = [] end
mark()
click to toggle source
# File lib/rutile/nfa.rb, line 54 def mark @on_stack = true end
marked?()
click to toggle source
# File lib/rutile/nfa.rb, line 62 def marked? @on_stack end
next(char)
click to toggle source
# File lib/rutile/nfa.rb, line 13 def next(char) ret = @edges[char] return @default if !@default.nil? && ret.nil? return ret ? ret : [] end
set_not(pos)
click to toggle source
# File lib/rutile/nfa.rb, line 38 def set_not(pos) @default = pos end
unmark()
click to toggle source
# File lib/rutile/nfa.rb, line 58 def unmark @on_stack = false end
update_pos(offset)
click to toggle source
# File lib/rutile/nfa.rb, line 30 def update_pos(offset) @edges.keys.each do |k| @edges[k] = @edges[k].map {|n| (n == :not) ? :not : n + offset}.to_a end @pos += offset @default = @default.map {|x| x + offset} if @default end