| #!/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 |