class Racc::SymbolTable
Attributes
              anchor[R]
            
            
              dummy[R]
            
            
              error[R]
            
            
              nt_base[R]
            
            
              symbols[R]
            
            
              to_a[R]
            
            Public Class Methods
                              new()
                              click to toggle source
                            
                            # File racc/grammar.rb, line 873 def initialize @symbols = [] # :: [Racc::Sym] @cache = {} # :: {(String|Symbol) => Racc::Sym} @dummy = intern(:$start, true) @anchor = intern(false, true) # Symbol ID = 0 @error = intern(:error, false) # Symbol ID = 1 end
Public Instance Methods
                              [](id)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 885 def [](id) @symbols[id] end
                              delete(sym)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 901 def delete(sym) @symbols.delete sym @cache.delete sym.value end
                              each(&block)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 912 def each(&block) @symbols.each(&block) end
                              each_nonterminal(&block)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 928 def each_nonterminal(&block) @nterms.each(&block) end
                              each_terminal(&block)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 920 def each_terminal(&block) @terms.each(&block) end
                              fix()
                              click to toggle source
                            
                            # File racc/grammar.rb, line 932 def fix terms, nterms = @symbols.partition {|s| s.terminal? } @symbols = terms + nterms @terms = terms @nterms = nterms @nt_base = terms.size fix_ident check_terminals end
                              intern(val, dummy = false)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 889 def intern(val, dummy = false) @cache[val] ||= begin sym = Sym.new(val, dummy) @symbols.push sym sym end end
                              nonterminals()
                              click to toggle source
                            
                            # File racc/grammar.rb, line 924 def nonterminals @symbols[@nt_base, @symbols.size - @nt_base] end
                              nt_max()
                              click to toggle source
                            
                            # File racc/grammar.rb, line 908 def nt_max @symbols.size end
                              terminals(&block)
                              click to toggle source
                            
                            # File racc/grammar.rb, line 916 def terminals(&block) @symbols[0, @nt_base] end
Private Instance Methods
                              check_terminals()
                              click to toggle source
                            
                            # File racc/grammar.rb, line 950 def check_terminals return unless @symbols.any? {|s| s.should_terminal? } @anchor.should_terminal @error.should_terminal each_terminal do |t| t.should_terminal if t.string_symbol? end each do |s| s.should_terminal if s.assoc end terminals().reject {|t| t.should_terminal? }.each do |t| raise CompileError, "terminal #{t} not declared as terminal" end nonterminals().select {|n| n.should_terminal? }.each do |n| raise CompileError, "symbol #{n} declared as terminal but is not terminal" end end
                              fix_ident()
                              click to toggle source
                            
                            # File racc/grammar.rb, line 944 def fix_ident @symbols.each_with_index do |t, i| t.ident = i end end