1 #!/usr/bin/ruby 2 # encoding: utf-8 3 4 module ANTLR3 5 module Debug 6 =begin rdoc ANTLR3::Debug::EventHub 7 8 A special event listener that intercepts debug events and forwards them to other 9 debug event listners. As debug-mode recognizers are able to send event 10 information to only one listener, EventHubs provide a simple solution in 11 situations where multiple event listners are desired. 12 13 =end 14 class EventHub 15 include ANTLR3::Debug::EventListener 16 attr_reader :listeners 17 18 def initialize( *listeners ) 19 @listeners = [ listeners ].flatten! 20 @listeners.compact! 21 end 22 23 def add( *listeners ) 24 @listeners.push( *listeners ) 25 end 26 27 def add_child( root, child ) 28 for listener in @listeners 29 listener.add_child( root, child ) 30 end 31 end 32 33 def backtrack( level ) 34 for listener in @listeners 35 listener.backtrack( level ) 36 end 37 end 38 39 def become_root( new_root, old_root ) 40 for listener in @listeners 41 listener.become_root( new_root, old_root ) 42 end 43 end 44 45 def begin_backtrack( level ) 46 for listener in @listeners 47 listener.begin_backtrack( level ) 48 end 49 end 50 51 def begin_resync() 52 for listener in @listeners 53 listener.begin_resync() 54 end 55 end 56 57 def commence() 58 for listener in @listeners 59 listener.commence() 60 end 61 end 62 63 def consume_hidden_token( tree ) 64 for listener in @listeners 65 listener.consume_hidden_token( tree ) 66 end 67 end 68 69 def consume_node( tree ) 70 for listener in @listeners 71 listener.consume_node( tree ) 72 end 73 end 74 75 def consume_token( tree ) 76 for listener in @listeners 77 listener.consume_token( tree ) 78 end 79 end 80 81 def create_node( node, token ) 82 for listener in @listeners 83 listener.create_node( node, token ) 84 end 85 end 86 87 def end_backtrack( level, successful ) 88 for listener in @listeners 89 listener.end_backtrack( level, successful ) 90 end 91 end 92 93 def end_resync() 94 for listener in @listeners 95 listener.end_resync() 96 end 97 end 98 99 def enter_alternative( alt ) 100 for listener in @listeners 101 listener.enter_alternative( alt ) 102 end 103 end 104 105 def enter_decision( decision_number ) 106 for listener in @listeners 107 listener.enter_decision( decision_number ) 108 end 109 end 110 111 def enter_rule( grammar_file_name, rule_name ) 112 for listener in @listeners 113 listener.enter_rule( grammar_file_name, rule_name ) 114 end 115 end 116 117 def enter_sub_rule( decision_number ) 118 for listener in @listeners 119 listener.enter_sub_rule( decision_number ) 120 end 121 end 122 123 def error_node( tree ) 124 for listener in @listeners 125 listener.error_node( tree ) 126 end 127 end 128 129 def exit_decision( decision_number ) 130 for listener in @listeners 131 listener.exit_decision( decision_number ) 132 end 133 end 134 135 def exit_rule( grammar_file_name, rule_name ) 136 for listener in @listeners 137 listener.exit_rule( grammar_file_name, rule_name ) 138 end 139 end 140 141 def exit_sub_rule( decision_number ) 142 for listener in @listeners 143 listener.exit_sub_rule( decision_number ) 144 end 145 end 146 147 def flat_node( tree ) 148 for listener in @listeners 149 listener.flat_node( tree ) 150 end 151 end 152 153 def location( line, position ) 154 for listener in @listeners 155 listener.location( line, position ) 156 end 157 end 158 159 def look( i, tree ) 160 for listener in @listeners 161 listener.look( i, tree ) 162 end 163 end 164 165 def mark( marker ) 166 for listener in @listeners 167 listener.mark( marker ) 168 end 169 end 170 171 def recognition_exception( exception ) 172 for listener in @listeners 173 listener.recognition_exception( exception ) 174 end 175 end 176 177 def resync() 178 for listener in @listeners 179 listener.resync() 180 end 181 end 182 183 def rewind( marker ) 184 for listener in @listeners 185 listener.rewind( marker ) 186 end 187 end 188 189 def semantic_predicate( result, predicate ) 190 for listener in @listeners 191 listener.semantic_predicate( result, predicate ) 192 end 193 end 194 195 def set_token_boundaries( tree, token_start_index, token_stop_index ) 196 for listener in @listeners 197 listener.set_token_boundaries( tree, token_start_index, token_stop_index ) 198 end 199 end 200 201 def terminate() 202 for listener in @listeners 203 listener.terminate() 204 end 205 end 206 207 end 208 209 end 210 end 211