Parent

Included Modules

Racc::SymbolTable

Attributes

dummy[R]
anchor[R]
error[R]
symbols[R]
nt_base[R]

Public Class Methods

new() click to toggle source
     # File lib/racc/grammar.rb, line 870
870:     def initialize
871:       @symbols = []   # :: [Racc::Sym]
872:       @cache   = {}   # :: {(String|Symbol) => Racc::Sym}
873:       @dummy  = intern(:$start, true)
874:       @anchor = intern(false, true)     # Symbol ID = 0
875:       @error  = intern(:error, false)   # Symbol ID = 1
876:     end

Public Instance Methods

[](id) click to toggle source
     # File lib/racc/grammar.rb, line 882
882:     def [](id)
883:       @symbols[id]
884:     end
delete(sym) click to toggle source
     # File lib/racc/grammar.rb, line 898
898:     def delete(sym)
899:       @symbols.delete sym
900:       @cache.delete sym.value
901:     end
each(&block) click to toggle source
     # File lib/racc/grammar.rb, line 909
909:     def each(&block)
910:       @symbols.each(&block)
911:     end
each_nonterminal(&block) click to toggle source
     # File lib/racc/grammar.rb, line 925
925:     def each_nonterminal(&block)
926:       @nterms.each(&block)
927:     end
each_terminal(&block) click to toggle source
     # File lib/racc/grammar.rb, line 917
917:     def each_terminal(&block)
918:       @terms.each(&block)
919:     end
fix() click to toggle source
     # File lib/racc/grammar.rb, line 929
929:     def fix
930:       terms, nterms = @symbols.partition {|s| s.terminal? }
931:       @symbols = terms + nterms
932:       @terms = terms
933:       @nterms = nterms
934:       @nt_base = terms.size
935:       fix_ident
936:       check_terminals
937:     end
intern(val, dummy = false) click to toggle source
     # File lib/racc/grammar.rb, line 886
886:     def intern(val, dummy = false)
887:       @cache[val] ||=
888:           begin
889:             sym = Sym.new(val, dummy)
890:             @symbols.push sym
891:             sym
892:           end
893:     end
nonterminals() click to toggle source
     # File lib/racc/grammar.rb, line 921
921:     def nonterminals
922:       @symbols[@nt_base, @symbols.size - @nt_base]
923:     end
nt_max() click to toggle source
     # File lib/racc/grammar.rb, line 905
905:     def nt_max
906:       @symbols.size
907:     end
terminals(&block) click to toggle source
     # File lib/racc/grammar.rb, line 913
913:     def terminals(&block)
914:       @symbols[0, @nt_base]
915:     end

Private Instance Methods

check_terminals() click to toggle source
     # File lib/racc/grammar.rb, line 947
947:     def check_terminals
948:       return unless @symbols.any? {|s| s.should_terminal? }
949:       @anchor.should_terminal
950:       @error.should_terminal
951:       each_terminal do |t|
952:         t.should_terminal if t.string_symbol?
953:       end
954:       each do |s|
955:         s.should_terminal if s.assoc
956:       end
957:       terminals().reject {|t| t.should_terminal? }.each do |t|
958:         raise CompileError, "terminal #{t} not declared as terminal"
959:       end
960:       nonterminals().select {|n| n.should_terminal? }.each do |n|
961:         raise CompileError, "symbol #{n} declared as terminal but is not terminal"
962:       end
963:     end
fix_ident() click to toggle source
     # File lib/racc/grammar.rb, line 941
941:     def fix_ident
942:       @symbols.each_with_index do |t, i|
943:         t.ident = i
944:       end
945:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.