#!/usr/bin/ruby # encoding: utf-8 module ANTLR3 module Debug =begin rdoc ANTLR3::Debug::RuleTracer RuleTracer is simple debug event listener that writes the names of rule methods as they are entered and exitted to an output stream. =end class RuleTracer include EventListener ARROW_IN = '--> '.freeze ARROW_OUT = '<-- '.freeze attr_reader :level attr_accessor :spaces_per_indent, :device def initialize( options = {} ) @input = options[ :input ] @level = 0 @spaces_per_indent = options[ :spaces_per_indent ] || 2 @device = options[ :device ] || options[ :output ] || $stderr end def enter_rule( grammar_file, name ) indent = @level * @spaces_per_indent @device.print( ' ' * indent, ARROW_IN, name ) if @input input_symbol = @input.look || :EOF @device.puts( " look = %p" % input_symbol ) else @device.print( "\n" ) end @level += 1 end def exit_rule( grammar_file, name ) @level -= 1 indent = @level * @spaces_per_indent @device.print( ' ' * indent, ARROW_OUT, name ) if @input input_symbol = ( @input.look || :EOF ) @device.puts( " look = %p" % input_symbol ) else @device.print( "\n" ) end end end end end