blob: f1e2b5f81bc6551d26afc8bf2b20dced26c1848f [file] [log] [blame]
#!/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