class Racc::State
A LALR state.
Attributes
              action[R]
            
            
              closure[R]
            
            
              core[R]
            
            
              defact[RW]
            
            
              goto_table[R]
            
            
              gotos[R]
            
            
              hash[R]
            
            
              ident[R]
            
            
              ritems[R]
            
            
              rrconf[R]
            
            
              rrules[R]
            
            
              srconf[R]
            
            
              stateid[R]
            
            
              stokens[R]
            
            Public Class Methods
                              new(ident, core)
                              click to toggle source
                            
                            # File racc/state.rb, line 609 def initialize(ident, core) @ident = ident @core = core @goto_table = {} @gotos = {} @stokens = nil @ritems = nil @action = {} @defact = nil @rrconf = nil @srconf = nil @closure = make_closure(@core) end
Public Instance Methods
                              ==(oth)
                              click to toggle source
                            
                            # File racc/state.rb, line 650 def ==(oth) @ident == oth.ident end
                              Also aliased as: eql?
                            
                          
                              check_la(la_rules)
                              click to toggle source
                            
                            # File racc/state.rb, line 667 def check_la(la_rules) @conflict = false s = [] r = [] @closure.each do |ptr| if t = ptr.dereference if t.terminal? s[t.ident] = t if t.ident == 1 # $error @conflict = true end end else r.push ptr.rule end end unless r.empty? if not s.empty? or r.size > 1 @conflict = true end end s.compact! @stokens = s @rrules = r if @conflict @la_rules_i = la_rules.size @la_rules = r.map {|i| i.ident } la_rules.concat r else @la_rules_i = @la_rules = nil end end
                              conflict?()
                              click to toggle source
                            
                            # File racc/state.rb, line 701 def conflict? @conflict end
                              inspect()
                              click to toggle source
                            
                            # File racc/state.rb, line 644 def inspect "<state #{@ident}>" end
                              Also aliased as: to_s
                            
                          
                              la=(la)
                              click to toggle source
                            
                            # File racc/state.rb, line 718 def la=(la) return unless @conflict i = @la_rules_i @ritems = r = [] @rrules.each do |rule| r.push Item.new(rule, la[i]) i += 1 end end
                              make_closure(core)
                              click to toggle source
                            
                            # File racc/state.rb, line 656 def make_closure(core) set = ISet.new core.each do |ptr| set.add ptr if t = ptr.dereference and t.nonterminal? set.update_a t.expand end end set.to_a end
                              n_rrconflicts()
                              click to toggle source
                            
                            # File racc/state.rb, line 754 def n_rrconflicts @rrconf ? @rrconf.size : 0 end
                              n_srconflicts()
                              click to toggle source
                            
                            # File racc/state.rb, line 750 def n_srconflicts @srconf ? @srconf.size : 0 end
                              rr_conflict(high, low, ctok)
                              click to toggle source
                            
                            # File racc/state.rb, line 728 def rr_conflict(high, low, ctok) c = RRconflict.new(@ident, high, low, ctok) @rrconf ||= {} if a = @rrconf[ctok] a.push c else @rrconf[ctok] = [c] end end
                              rruleid(rule)
                              click to toggle source
                            
                            # File racc/state.rb, line 705 def rruleid(rule) if i = @la_rules.index(rule.ident) @la_rules_i + i else puts '/// rruleid' p self p rule p @rrules p @la_rules_i raise 'racc: fatal: cannot get reduce rule id' end end
                              sr_conflict(shift, reduce)
                              click to toggle source
                            
                            # File racc/state.rb, line 739 def sr_conflict(shift, reduce) c = SRconflict.new(@ident, shift, reduce) @srconf ||= {} if a = @srconf[shift] a.push c else @srconf[shift] = [c] end end