# File lib/racc/grammar.rb, line 239
239: def _add(target, x)
240: case x
241: when Sym
242: @delayed.each do |rule|
243: rule.replace x, target if rule.target == x
244: end
245: @grammar.symboltable.delete x
246: else
247: x.each_rule do |r|
248: r.target = target
249: @grammar.add r
250: end
251: end
252: flush_delayed
253: end
# File lib/racc/grammar.rb, line 259
259: def _added?(sym)
260: @grammar.added?(sym) or @delayed.detect {|r| r.target == sym }
261: end
# File lib/racc/grammar.rb, line 255
255: def _delayed_add(rule)
256: @delayed.push rule
257: end
# File lib/racc/grammar.rb, line 318
318: def _intern(x)
319: case x
320: when Symbol, String
321: @grammar.intern(x)
322: when Racc::Sym
323: x
324: else
325: raise TypeError, "wrong type #{x.class} (expected Symbol/String/Racc::Sym)"
326: end
327: end
# File lib/racc/grammar.rb, line 279
279: def action(&block)
280: id = "@#{@seqs["action"] += 1}".intern
281: _delayed_add Rule.new(@grammar.intern(id), [], UserAction.proc(block))
282: id
283: end
# File lib/racc/grammar.rb, line 263
263: def flush_delayed
264: return if @delayed.empty?
265: @delayed.each do |rule|
266: @grammar.add rule
267: end
268: @delayed.clear
269: end
# File lib/racc/grammar.rb, line 211
211: def grammar
212: flush_delayed
213: @grammar.each do |rule|
214: if rule.specified_prec
215: rule.specified_prec = @grammar.intern(rule.specified_prec)
216: end
217: end
218: @grammar.init
219: @grammar
220: end
# File lib/racc/grammar.rb, line 293
293: def many(sym, &block)
294: _defmetasyntax("many", _intern(sym), block) {|target|
295: seq() { [] } | seq(target, sym) {|list, x| list.push x; list }
296: }
297: end
# File lib/racc/grammar.rb, line 300
300: def many1(sym, &block)
301: _defmetasyntax("many1", _intern(sym), block) {|target|
302: seq(sym) {|x| [x] } | seq(target, sym) {|list, x| list.push x; list }
303: }
304: end
# File lib/racc/grammar.rb, line 228
228: def method_missing(mid, *args, &block)
229: unless mid.to_s[1,1] == '='
230: super # raises NoMethodError
231: end
232: target = @grammar.intern(mid.to_s.chop.intern)
233: unless args.size == 1
234: raise ArgumentError, "too many arguments for #{mid} (#{args.size} for 1)"
235: end
236: _add target, args.first
237: end
# File lib/racc/grammar.rb, line 275
275: def null(&block)
276: seq(&block)
277: end
# File lib/racc/grammar.rb, line 287
287: def option(sym, default = nil, &block)
288: _defmetasyntax("option", _intern(sym), block) {|target|
289: seq() { default } | seq(sym)
290: }
291: end
# File lib/racc/grammar.rb, line 222
222: def precedence_table(&block)
223: env = PrecedenceDefinitionEnv.new(@grammar)
224: env.instance_eval(&block)
225: @grammar.end_precedence_declaration env.reverse
226: end
# File lib/racc/grammar.rb, line 307
307: def separated_by(sep, sym, &block)
308: option(separated_by1(sep, sym), [], &block)
309: end
# File lib/racc/grammar.rb, line 331
331: def _defmetasyntax(type, id, action, &block)
332: if action
333: idbase = "#{type}@#{id}-#{@seqs[type] += 1}"
334: target = _wrap(idbase, "#{idbase}-core", action)
335: _regist("#{idbase}-core", &block)
336: else
337: target = _regist("#{type}@#{id}", &block)
338: end
339: @grammar.intern(target)
340: end
# File lib/racc/grammar.rb, line 342
342: def _regist(target_name)
343: target = target_name.intern
344: unless _added?(@grammar.intern(target))
345: yield(target).each_rule do |rule|
346: rule.target = @grammar.intern(target)
347: _delayed_add rule
348: end
349: end
350: target
351: end
# File lib/racc/grammar.rb, line 353
353: def _wrap(target_name, sym, block)
354: target = target_name.intern
355: _delayed_add Rule.new(@grammar.intern(target),
356: [@grammar.intern(sym.intern)],
357: UserAction.proc(block))
358: target
359: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.