# class Racc::Rule

### Attributes

action[R]
hash[R]
ident[RW]
ptrs[R]
specified_prec[RW]
symbols[R]
target[RW]

### Public Class Methods

new(target, syms, act) click to toggle source

    # File lib/racc/grammar.rb, line 608
    def initialize(target, syms, act)
      @target = target
      @symbols = syms
      @action = act
      @alternatives = []

      @ident = nil
      @hash = nil
      @ptrs = nil
      @precedence = nil
      @specified_prec = nil
      @null = nil
      @useless = nil
    end

### Public Instance Methods

==(other) click to toggle source

    # File lib/racc/grammar.rb, line 687
    def ==(other)
      other.kind_of?(Rule) and @ident == other.ident
    end

[](idx) click to toggle source

    # File lib/racc/grammar.rb, line 691
    def [](idx)
      @symbols[idx]
    end

accept?() click to toggle source

    # File lib/racc/grammar.rb, line 707
    def accept?
      if tok = @symbols[-1]
        tok.anchor?
      else
        false
      end
    end

each(&block) click to toggle source

    # File lib/racc/grammar.rb, line 715
    def each(&block)
      @symbols.each(&block)
    end

each_rule() { |self| ... } click to toggle source

    # File lib/racc/grammar.rb, line 636
    def each_rule(&block)
      yield self
      @alternatives.each(&block)
    end

empty?() click to toggle source

    # File lib/racc/grammar.rb, line 699
    def empty?
      @symbols.empty?
    end

hash=(n) click to toggle source

    # File lib/racc/grammar.rb, line 646
    def hash=(n)
      @hash = n
      ptrs = []
      @symbols.each_with_index do |sym, idx|
        ptrs.push LocationPointer.new(self, idx, sym)
      end
      ptrs.push LocationPointer.new(self, @symbols.size, nil)
      @ptrs = ptrs
    end

inspect() click to toggle source

    # File lib/racc/grammar.rb, line 683
    def inspect
      "#<Racc::Rule id=#{@ident} (#{@target})>"
    end

null=(n) click to toggle source

    # File lib/racc/grammar.rb, line 678
    def null=(n)    @null = n end

nullable?() click to toggle source

    # File lib/racc/grammar.rb, line 677
    def nullable?() @null end

prec(sym, &block) click to toggle source

    # File lib/racc/grammar.rb, line 664
    def prec(sym, &block)
      @specified_prec = sym
      if block
        unless @action.empty?
          raise CompileError, 'both of rule action block and prec block given'
        end
        @action = UserAction.proc(block)
      end
      self
    end

precedence() click to toggle source

    # File lib/racc/grammar.rb, line 656
    def precedence
      @specified_prec || @precedence
    end

precedence=(sym) click to toggle source

    # File lib/racc/grammar.rb, line 660
    def precedence=(sym)
      @precedence ||= sym
    end

replace(src, dest) click to toggle source

    # File lib/racc/grammar.rb, line 719
    def replace(src, dest)
      @target = dest
      @symbols = @symbols.map {|s| s == src ? dest : s }
    end

rule() click to toggle source

    # File lib/racc/grammar.rb, line 632
    def rule
      self
    end

size() click to toggle source

    # File lib/racc/grammar.rb, line 695
    def size
      @symbols.size
    end

to_s() click to toggle source

    # File lib/racc/grammar.rb, line 703
    def to_s
      "#<rule#{@ident}>"
    end

useless=(u) click to toggle source

    # File lib/racc/grammar.rb, line 681
    def useless=(u) @useless = u end

useless?() click to toggle source

    # File lib/racc/grammar.rb, line 680
    def useless?()  @useless end

|(x) click to toggle source

    # File lib/racc/grammar.rb, line 627
    def |(x)
      @alternatives.push x.rule
      self
    end