Class: Racc::Rule

Inherits:
Object show all
Defined in:
lib/racc/grammar.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target, syms, act) ⇒ Rule

Returns a new instance of Rule.



603
604
605
606
607
608
609
610
611
612
613
614
615
616
# 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

#actionObject (readonly)

Returns the value of attribute action.



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

def action
  @action
end

#hashObject

Returns the value of attribute hash.



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

def hash
  @hash
end

#identObject

Returns the value of attribute ident.



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

def ident
  @ident
end

#ptrsObject (readonly)

Returns the value of attribute ptrs.



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

def ptrs
  @ptrs
end

#specified_precObject

Returns the value of attribute specified_prec.



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

def specified_prec
  @specified_prec
end

#symbolsObject (readonly)

Returns the value of attribute symbols.



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

def symbols
  @symbols
end

#targetObject

Returns the value of attribute target.



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

def target
  @target
end

Instance Method Details

#==(other) ⇒ Object



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

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

#[](idx) ⇒ Object



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

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

#accept?Boolean

Returns:

  • (Boolean)


702
703
704
705
706
707
708
# File 'lib/racc/grammar.rb', line 702

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

#each(&block) ⇒ Object



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

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

#each_rule {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Racc::Rule)

    the object that the method was called on



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

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

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  @symbols.empty?
end

#inspectObject



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

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

#null=(n) ⇒ Object



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

def null=(n)    @null = n end

#nullable?Boolean

Returns:

  • (Boolean)


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

def nullable?() @null end

#prec(sym, &block) ⇒ Object



659
660
661
662
663
664
665
666
667
668
# 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

#precedenceObject



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

def precedence
  @specified_prec || @precedence
end

#precedence=(sym) ⇒ Object



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

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

#replace(src, dest) ⇒ Object



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

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

#ruleObject



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

def rule
  self
end

#sizeObject



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

def size
  @symbols.size
end

#to_sObject



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

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

#useless=(u) ⇒ Object



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

def useless=(u) @useless = u end

#useless?Boolean

Returns:

  • (Boolean)


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

def useless?()  @useless end

#|(x) ⇒ Object



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

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