You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
4.2 KiB
211 lines
4.2 KiB
#!/usr/bin/ruby
|
|
# encoding: utf-8
|
|
|
|
module ANTLR3
|
|
module Debug
|
|
=begin rdoc ANTLR3::Debug::EventHub
|
|
|
|
A special event listener that intercepts debug events and forwards them to other
|
|
debug event listners. As debug-mode recognizers are able to send event
|
|
information to only one listener, EventHubs provide a simple solution in
|
|
situations where multiple event listners are desired.
|
|
|
|
=end
|
|
class EventHub
|
|
include ANTLR3::Debug::EventListener
|
|
attr_reader :listeners
|
|
|
|
def initialize( *listeners )
|
|
@listeners = [ listeners ].flatten!
|
|
@listeners.compact!
|
|
end
|
|
|
|
def add( *listeners )
|
|
@listeners.push( *listeners )
|
|
end
|
|
|
|
def add_child( root, child )
|
|
for listener in @listeners
|
|
listener.add_child( root, child )
|
|
end
|
|
end
|
|
|
|
def backtrack( level )
|
|
for listener in @listeners
|
|
listener.backtrack( level )
|
|
end
|
|
end
|
|
|
|
def become_root( new_root, old_root )
|
|
for listener in @listeners
|
|
listener.become_root( new_root, old_root )
|
|
end
|
|
end
|
|
|
|
def begin_backtrack( level )
|
|
for listener in @listeners
|
|
listener.begin_backtrack( level )
|
|
end
|
|
end
|
|
|
|
def begin_resync()
|
|
for listener in @listeners
|
|
listener.begin_resync()
|
|
end
|
|
end
|
|
|
|
def commence()
|
|
for listener in @listeners
|
|
listener.commence()
|
|
end
|
|
end
|
|
|
|
def consume_hidden_token( tree )
|
|
for listener in @listeners
|
|
listener.consume_hidden_token( tree )
|
|
end
|
|
end
|
|
|
|
def consume_node( tree )
|
|
for listener in @listeners
|
|
listener.consume_node( tree )
|
|
end
|
|
end
|
|
|
|
def consume_token( tree )
|
|
for listener in @listeners
|
|
listener.consume_token( tree )
|
|
end
|
|
end
|
|
|
|
def create_node( node, token )
|
|
for listener in @listeners
|
|
listener.create_node( node, token )
|
|
end
|
|
end
|
|
|
|
def end_backtrack( level, successful )
|
|
for listener in @listeners
|
|
listener.end_backtrack( level, successful )
|
|
end
|
|
end
|
|
|
|
def end_resync()
|
|
for listener in @listeners
|
|
listener.end_resync()
|
|
end
|
|
end
|
|
|
|
def enter_alternative( alt )
|
|
for listener in @listeners
|
|
listener.enter_alternative( alt )
|
|
end
|
|
end
|
|
|
|
def enter_decision( decision_number )
|
|
for listener in @listeners
|
|
listener.enter_decision( decision_number )
|
|
end
|
|
end
|
|
|
|
def enter_rule( grammar_file_name, rule_name )
|
|
for listener in @listeners
|
|
listener.enter_rule( grammar_file_name, rule_name )
|
|
end
|
|
end
|
|
|
|
def enter_sub_rule( decision_number )
|
|
for listener in @listeners
|
|
listener.enter_sub_rule( decision_number )
|
|
end
|
|
end
|
|
|
|
def error_node( tree )
|
|
for listener in @listeners
|
|
listener.error_node( tree )
|
|
end
|
|
end
|
|
|
|
def exit_decision( decision_number )
|
|
for listener in @listeners
|
|
listener.exit_decision( decision_number )
|
|
end
|
|
end
|
|
|
|
def exit_rule( grammar_file_name, rule_name )
|
|
for listener in @listeners
|
|
listener.exit_rule( grammar_file_name, rule_name )
|
|
end
|
|
end
|
|
|
|
def exit_sub_rule( decision_number )
|
|
for listener in @listeners
|
|
listener.exit_sub_rule( decision_number )
|
|
end
|
|
end
|
|
|
|
def flat_node( tree )
|
|
for listener in @listeners
|
|
listener.flat_node( tree )
|
|
end
|
|
end
|
|
|
|
def location( line, position )
|
|
for listener in @listeners
|
|
listener.location( line, position )
|
|
end
|
|
end
|
|
|
|
def look( i, tree )
|
|
for listener in @listeners
|
|
listener.look( i, tree )
|
|
end
|
|
end
|
|
|
|
def mark( marker )
|
|
for listener in @listeners
|
|
listener.mark( marker )
|
|
end
|
|
end
|
|
|
|
def recognition_exception( exception )
|
|
for listener in @listeners
|
|
listener.recognition_exception( exception )
|
|
end
|
|
end
|
|
|
|
def resync()
|
|
for listener in @listeners
|
|
listener.resync()
|
|
end
|
|
end
|
|
|
|
def rewind( marker )
|
|
for listener in @listeners
|
|
listener.rewind( marker )
|
|
end
|
|
end
|
|
|
|
def semantic_predicate( result, predicate )
|
|
for listener in @listeners
|
|
listener.semantic_predicate( result, predicate )
|
|
end
|
|
end
|
|
|
|
def set_token_boundaries( tree, token_start_index, token_stop_index )
|
|
for listener in @listeners
|
|
listener.set_token_boundaries( tree, token_start_index, token_stop_index )
|
|
end
|
|
end
|
|
|
|
def terminate()
|
|
for listener in @listeners
|
|
listener.terminate()
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
end
|