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