Parent

Racc::State

A LALR state.

Attributes

ident[R]
core[R]
closure[R]
goto_table[R]
gotos[R]
stokens[R]
ritems[R]
rrules[R]
action[R]
defact[RW]
rrconf[R]
srconf[R]

Public Class Methods

new(ident, core) click to toggle source
     # File lib/racc/state.rb, line 608
608:     def initialize(ident, core)
609:       @ident = ident
610:       @core = core
611:       @goto_table = {}
612:       @gotos = {}
613:       @stokens = nil
614:       @ritems = nil
615:       @action = {}
616:       @defact = nil
617:       @rrconf = nil
618:       @srconf = nil
619: 
620:       @closure = make_closure(@core)
621:     end

Public Instance Methods

==(oth) click to toggle source
     # File lib/racc/state.rb, line 649
649:     def ==(oth)
650:       @ident == oth.ident
651:     end
Also aliased as: eql?
check_la(la_rules) click to toggle source
     # File lib/racc/state.rb, line 666
666:     def check_la(la_rules)
667:       @conflict = false
668:       s = []
669:       r = []
670:       @closure.each do |ptr|
671:         if t = ptr.dereference
672:           if t.terminal?
673:             s[t.ident] = t
674:             if t.ident == 1    # $error
675:               @conflict = true
676:             end
677:           end
678:         else
679:           r.push ptr.rule
680:         end
681:       end
682:       unless r.empty?
683:         if not s.empty? or r.size > 1
684:           @conflict = true
685:         end
686:       end
687:       s.compact!
688:       @stokens  = s
689:       @rrules = r
690: 
691:       if @conflict
692:         @la_rules_i = la_rules.size
693:         @la_rules = r.map {|i| i.ident }
694:         la_rules.concat r
695:       else
696:         @la_rules_i = @la_rules = nil
697:       end
698:     end
conflict?() click to toggle source
     # File lib/racc/state.rb, line 700
700:     def conflict?
701:       @conflict
702:     end
eql?(oth) click to toggle source
Alias for: ==
inspect() click to toggle source
     # File lib/racc/state.rb, line 643
643:     def inspect
644:       "<state #{@ident}>"
645:     end
Also aliased as: to_s
la=(la) click to toggle source
     # File lib/racc/state.rb, line 717
717:     def la=(la)
718:       return unless @conflict
719:       i = @la_rules_i
720:       @ritems = r = []
721:       @rrules.each do |rule|
722:         r.push Item.new(rule, la[i])
723:         i += 1
724:       end
725:     end
make_closure(core) click to toggle source
     # File lib/racc/state.rb, line 655
655:     def make_closure(core)
656:       set = ISet.new
657:       core.each do |ptr|
658:         set.add ptr
659:         if t = ptr.dereference and t.nonterminal?
660:           set.update_a t.expand
661:         end
662:       end
663:       set.to_a
664:     end
n_rrconflicts() click to toggle source
     # File lib/racc/state.rb, line 753
753:     def n_rrconflicts
754:       @rrconf ? @rrconf.size : 0
755:     end
n_srconflicts() click to toggle source
     # File lib/racc/state.rb, line 749
749:     def n_srconflicts
750:       @srconf ? @srconf.size : 0
751:     end
rr_conflict(high, low, ctok) click to toggle source
     # File lib/racc/state.rb, line 727
727:     def rr_conflict(high, low, ctok)
728:       c = RRconflict.new(@ident, high, low, ctok)
729: 
730:       @rrconf ||= {}
731:       if a = @rrconf[ctok]
732:         a.push c
733:       else
734:         @rrconf[ctok] = [c]
735:       end
736:     end
rruleid(rule) click to toggle source
     # File lib/racc/state.rb, line 704
704:     def rruleid(rule)
705:       if i = @la_rules.index(rule.ident)
706:         @la_rules_i + i
707:       else
708:         puts '/// rruleid'
709:         p self
710:         p rule
711:         p @rrules
712:         p @la_rules_i
713:         raise 'racc: fatal: cannot get reduce rule id'
714:       end
715:     end
sr_conflict(shift, reduce) click to toggle source
     # File lib/racc/state.rb, line 738
738:     def sr_conflict(shift, reduce)
739:       c = SRconflict.new(@ident, shift, reduce)
740: 
741:       @srconf ||= {}
742:       if a = @srconf[shift]
743:         a.push c
744:       else
745:         @srconf[shift] = [c]
746:       end
747:     end
to_s() click to toggle source
Alias for: inspect

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.