A LALR state.
# 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
# File lib/racc/state.rb, line 649 649: def ==(oth) 650: @ident == oth.ident 651: end
# 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
# File lib/racc/state.rb, line 700 700: def conflict? 701: @conflict 702: end
# File lib/racc/state.rb, line 643 643: def inspect 644: "<state #{@ident}>" 645: end
# 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
# 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
# File lib/racc/state.rb, line 753 753: def n_rrconflicts 754: @rrconf ? @rrconf.size : 0 755: end
# File lib/racc/state.rb, line 749 749: def n_srconflicts 750: @srconf ? @srconf.size : 0 751: end
# 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
# 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
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.