class Journey::NFA::Visitor - journey-1.0.4 Documentation

# class Journey::NFA::Visitor

### Public Class Methods

new(tt) click to toggle source

    # File lib/journey/nfa/builder.rb, line 7
    def initialize tt
      @tt = tt
      @i  = -1
    end

### Public Instance Methods

terminal(node) click to toggle source

    # File lib/journey/nfa/builder.rb, line 50
    def terminal node
      from_i = @i += 1 # new state
      to_i   = @i += 1 # new state

      @tt[from_i, to_i] = node
      @tt.accepting = to_i
      @tt.add_memo to_i, node.memo

      [from_i, to_i]
    end

visit_CAT(node) click to toggle source

    # File lib/journey/nfa/builder.rb, line 12
    def visit_CAT node
      left  = visit node.left
      right = visit node.right

      @tt.merge left.last, right.first

      [left.first, right.last]
    end

visit_GROUP(node) click to toggle source

    # File lib/journey/nfa/builder.rb, line 21
    def visit_GROUP node
      from  = @i += 1
      left  = visit node.left
      to    = @i += 1

      @tt.accepting = to

      @tt[from, left.first] = nil
      @tt[left.last, to] = nil
      @tt[from, to] = nil

      [from, to]
    end

visit_OR(node) click to toggle source

    # File lib/journey/nfa/builder.rb, line 35
    def visit_OR node
      from  = @i += 1
      children = node.children.map { |c| visit c }
      to    = @i += 1

      children.each do |child|
        @tt[from, child.first]  = nil
        @tt[child.last, to]     = nil
      end

      @tt.accepting = to

      [from, to]
    end