123456789_123456789_123456789_123456789_123456789_

Class: Racc::Rule

Relationships & Source Files
Inherits: Object
Defined in: lib/racc/grammar.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(target, syms, act) ⇒ Rule

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 603

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

Instance Attribute Details

#accept?Boolean (readonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 702

def accept?
  if tok = @symbols[-1]
    tok.anchor?
  else
    false
  end
end

#action (readonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 620

attr_reader :action

#empty?Boolean (readonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 694

def empty?
  @symbols.empty?
end

#hash (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 638

attr_reader :hash

#hash=(n) (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 641

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

#ident (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 636

attr_accessor :ident

#null=(n) (writeonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 673

def null=(n)    @null = n end

#precedence (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 651

def precedence
  @specified_prec || @precedence
end

#precedence=(sym) (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 655

def precedence=(sym)
  @precedence ||= sym
end

#ptrs (readonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 639

attr_reader :ptrs

#specified_prec (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 670

attr_accessor :specified_prec

#symbols (readonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 619

attr_reader :symbols

#target (rw)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 618

attr_accessor :target

#useless=(u) (writeonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 676

def useless=(u) @useless = u end

Instance Method Details

#==(other)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 682

def ==(other)
  other.kind_of?(Rule) and @ident == other.ident
end

#[](idx)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 686

def [](idx)
  @symbols[idx]
end

#each(&block)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 710

def each(&block)
  @symbols.each(&block)
end

#each_rule {|_self| ... }

Yields:

  • (_self)

Yield Parameters:

  • _self (Rule)

    the object that the method was called on

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 631

def each_rule(&block)
  yield self
  @alternatives.each(&block)
end

#inspect

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 678

def inspect
  "#<Racc::Rule id=#{@ident} (#{@target})>"
end

#nullable?Boolean

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 672

def nullable?() @null end

#prec(sym, &block)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 659

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

#replace(src, dest)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 714

def replace(src, dest)
  @target = dest
  @symbols = @symbols.map {|s| s == src ? dest : s }
end

#rule

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 627

def rule
  self
end

#size

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 690

def size
  @symbols.size
end

#to_s

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 698

def to_s
  "#<rule#{@ident}>"
end

#useless?Boolean (writeonly)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 675

def useless?()  @useless end

#|(x)

[ GitHub ]

  
# File 'lib/racc/grammar.rb', line 622

def |(x)
  @alternatives.push x.rule
  self
end