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.



605
606
607
608
609
610
611
612
613
614
615
616
617
618
# File 'lib/racc/grammar.rb', line 605

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.



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

def action
  @action
end

#hashObject

Returns the value of attribute hash.



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

def hash
  @hash
end

#identObject

Returns the value of attribute ident.



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

def ident
  @ident
end

#ptrsObject (readonly)

Returns the value of attribute ptrs.



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

def ptrs
  @ptrs
end

#specified_precObject

Returns the value of attribute specified_prec.



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

def specified_prec
  @specified_prec
end

#symbolsObject (readonly)

Returns the value of attribute symbols.



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

def symbols
  @symbols
end

#targetObject

Returns the value of attribute target.



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

def target
  @target
end

Instance Method Details

#==(other) ⇒ Object



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

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

#[](idx) ⇒ Object



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

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

#accept?Boolean

Returns:

  • (Boolean)


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

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

#each(&block) ⇒ Object



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

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



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

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

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  @symbols.empty?
end

#inspectObject



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

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

#null=(n) ⇒ Object



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

def null=(n)    @null = n end

#nullable?Boolean

Returns:

  • (Boolean)


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

def nullable?() @null end

#prec(sym, &block) ⇒ Object



661
662
663
664
665
666
667
668
669
670
# File 'lib/racc/grammar.rb', line 661

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



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

def precedence
  @specified_prec || @precedence
end

#precedence=(sym) ⇒ Object



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

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

#replace(src, dest) ⇒ Object



716
717
718
719
# File 'lib/racc/grammar.rb', line 716

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

#ruleObject



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

def rule
  self
end

#sizeObject



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

def size
  @symbols.size
end

#to_sObject



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

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

#useless=(u) ⇒ Object



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

def useless=(u) @useless = u end

#useless?Boolean

Returns:

  • (Boolean)


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

def useless?()  @useless end

#|(x) ⇒ Object



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

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