module ANTLR3::Debug::ParserEvents

ParserEvents adds debugging event hook methods and functionality that is required by the code ANTLR generated when called with the -debug switch.

Attributes

debug_listener[R]

Public Class Methods

included( klass ) click to toggle source
Calls superclass method
# File lib/antlr3/debug.rb, line 146
def self.included( klass )
  super
  if klass.is_a?( ::Class )
    def klass.debug?
      true
    end
  end
end
new( stream, options = {} ) click to toggle source
Calls superclass method
# File lib/antlr3/debug.rb, line 158
def initialize( stream, options = {} )
  @debug_listener = options[ :debug_listener ] ||= begin
    EventSocketProxy.new( self, options ).handshake
  end
  options[ :state ] ||= Debug::RecognizerSharedState.new
  super( stream, options )
  if @input.is_a?( Debug::TokenStream )
    @input.debug_listener ||= @debug_listener
  else
    @input = Debug::TokenStream.wrap( @input, @debug_listener )
  end
end

Public Instance Methods

backtrack() { || ... } click to toggle source
# File lib/antlr3/debug.rb, line 217
def backtrack
  @state.backtracking += 1
  @debug_listener.begin_backtrack( @state.backtracking )
  start = @input.mark
  success =
    begin yield
    rescue BacktrackingFailed then false
    else true
    end
  return success
ensure
  @input.rewind( start )
  @debug_listener.end_backtrack( @state.backtracking, ( success rescue nil ) )
  @state.backtracking -= 1
end
begin_backtrack() click to toggle source
# File lib/antlr3/debug.rb, line 209
def begin_backtrack
  @debug_listener.begin_backtrack( @state.backtracking )
end
begin_resync() click to toggle source
Calls superclass method
# File lib/antlr3/debug.rb, line 191
def begin_resync
  @debug_listener.begin_resync
  super
end
cyclic_decision=( flag ) click to toggle source
# File lib/antlr3/debug.rb, line 179
def cyclic_decision=( flag )
  @state.cyclic_decision = flag
end
cyclic_decision?() click to toggle source
# File lib/antlr3/debug.rb, line 175
def cyclic_decision?
  @state.cyclic_decision
end
debug_listener=( dbg ) click to toggle source

custom attribute writer for debug_listener propegates the change in listener to the parser’s debugging input stream

# File lib/antlr3/debug.rb, line 186
def debug_listener=( dbg )
  @debug_listener = dbg
  @input.debug_listener = dbg rescue nil
end
end_backtrack( successful ) click to toggle source
# File lib/antlr3/debug.rb, line 213
def end_backtrack( successful )
  @debug_listener.end_backtrack( @state.backtracking, successful )
end
end_resync() click to toggle source
Calls superclass method
# File lib/antlr3/debug.rb, line 196
def end_resync
  @debug_listener.end_resync
  super
end
in_alternative( alt_number ) click to toggle source
# File lib/antlr3/debug.rb, line 266
def in_alternative( alt_number )
  @debug_listener.enter_alternative( alt_number )
end
in_decision( decision_number ) { || ... } click to toggle source
# File lib/antlr3/debug.rb, line 277
def in_decision( decision_number )
  @debug_listener.enter_decision( decision_number )
  yield
ensure
  @debug_listener.exit_decision( decision_number )
end
in_rule( grammar_file, rule_name ) { || ... } click to toggle source
# File lib/antlr3/debug.rb, line 245
def in_rule( grammar_file, rule_name )
  @state.rule_invocation_stack.empty? and @debug_listener.commence
  @debug_listener.enter_rule( grammar_file, rule_name )
  @state.rule_invocation_stack.push( grammar_file, rule_name )
  yield
ensure
  @state.rule_invocation_stack.pop( 2 )
  @debug_listener.exit_rule( grammar_file, rule_name )
  @state.rule_invocation_stack.empty? and @debug_listener.terminate
end
in_subrule( decision_number ) { || ... } click to toggle source
# File lib/antlr3/debug.rb, line 270
def in_subrule( decision_number )
  @debug_listener.enter_subrule( decision_number )
  yield
ensure
  @debug_listener.exit_subrule( decision_number )
end
missing_symbol( error, expected_type, follow ) click to toggle source
Calls superclass method
# File lib/antlr3/debug.rb, line 239
def missing_symbol( error, expected_type, follow )
  symbol = super
  @debug_listener.consume_node( symbol )
  return( symbol )
end
predicate?( description ) { || ... } click to toggle source
# File lib/antlr3/debug.rb, line 260
def predicate?( description )
  result = yield
  @debug_listener.semantic_predicate( result, description )
  return result
end
report_error( exc ) click to toggle source
Calls superclass method
# File lib/antlr3/debug.rb, line 233
def report_error( exc )
  ANTLR3::RecognitionError === exc and
    @debug_listener.recognition_exception( exc )
  super
end
resync() { |self| ... } click to toggle source

TO-DO: is this pointless?

# File lib/antlr3/debug.rb, line 202
def resync
  begin_resync
  yield( self )
ensure
  end_resync
end
rule_invocation_stack() click to toggle source
# File lib/antlr3/debug.rb, line 256
def rule_invocation_stack
  @state.rule_invocation_stack.each_slice( 2 ).to_a
end
rule_level() click to toggle source
# File lib/antlr3/debug.rb, line 171
def rule_level
  @state.rule_invocation_stack.length
end