Object
# File racc/grammar.rb, line 242 def _add(target, x) case x when Sym @delayed.each do |rule| rule.replace x, target if rule.target == x end @grammar.symboltable.delete x else x.each_rule do |r| r.target = target @grammar.add r end end flush_delayed end
# File racc/grammar.rb, line 262 def _added?(sym) @grammar.added?(sym) or @delayed.detect {|r| r.target == sym } end
# File racc/grammar.rb, line 258 def _delayed_add(rule) @delayed.push rule end
# File racc/grammar.rb, line 321 def _intern(x) case x when Symbol, String @grammar.intern(x) when Racc::Sym x else raise TypeError, "wrong type #{x.class} (expected Symbol/String/Racc::Sym)" end end
# File racc/grammar.rb, line 282 def action(&block) id = "@#{@seqs["action"] += 1}".intern _delayed_add Rule.new(@grammar.intern(id), [], UserAction.proc(block)) id end
# File racc/grammar.rb, line 266 def flush_delayed return if @delayed.empty? @delayed.each do |rule| @grammar.add rule end @delayed.clear end
# File racc/grammar.rb, line 214 def grammar flush_delayed @grammar.each do |rule| if rule.specified_prec rule.specified_prec = @grammar.intern(rule.specified_prec) end end @grammar.init @grammar end
# File racc/grammar.rb, line 296 def many(sym, &block) _defmetasyntax("many", _intern(sym), block) {|target| seq() { [] }\ | seq(target, sym) {|list, x| list.push x; list } } end
# File racc/grammar.rb, line 303 def many1(sym, &block) _defmetasyntax("many1", _intern(sym), block) {|target| seq(sym) {|x| [x] }\ | seq(target, sym) {|list, x| list.push x; list } } end
# File racc/grammar.rb, line 231 def method_missing(mid, *args, &block) unless mid.to_s[-1,1] == '=' super # raises NoMethodError end target = @grammar.intern(mid.to_s.chop.intern) unless args.size == 1 raise ArgumentError, "too many arguments for #{mid} (#{args.size} for 1)" end _add target, args.first end
# File racc/grammar.rb, line 278 def null(&block) seq(&block) end
# File racc/grammar.rb, line 290 def option(sym, default = nil, &block) _defmetasyntax("option", _intern(sym), block) {|target| seq() { default } | seq(sym) } end
# File racc/grammar.rb, line 225 def precedence_table(&block) env = PrecedenceDefinitionEnv.new(@grammar) env.instance_eval(&block) @grammar.end_precedence_declaration env.reverse end
# File racc/grammar.rb, line 310 def separated_by(sep, sym, &block) option(separated_by1(sep, sym), [], &block) end