00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 namespace Antlr.Runtime.Debug
00037 {
00038 using System;
00039 using IList = System.Collections.IList;
00040 using ArrayList = System.Collections.ArrayList;
00041 using IToken = Antlr.Runtime.IToken;
00042 using RecognitionException = Antlr.Runtime.RecognitionException;
00043
00053 public class DebugEventHub : IDebugEventListener
00054 {
00055 protected IList listeners = new ArrayList();
00056
00057 public DebugEventHub(IDebugEventListener listener)
00058 {
00059 listeners.Add(listener);
00060 }
00061
00062 public DebugEventHub(params IDebugEventListener[] listeners)
00063 {
00064
00065 foreach (IDebugEventListener listener in listeners)
00066 {
00067 this.listeners.Add(listener);
00068 }
00069 }
00070
00078 public void AddListener(IDebugEventListener listener)
00079 {
00080 listeners.Add(listeners);
00081 }
00082
00083 public void EnterRule(string grammarFileName, string ruleName)
00084 {
00085 for (int i = 0; i < listeners.Count; i++)
00086 {
00087 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00088 listener.EnterRule(grammarFileName, ruleName);
00089 }
00090 }
00091
00092 public void ExitRule(string grammarFileName, string ruleName)
00093 {
00094 for (int i = 0; i < listeners.Count; i++)
00095 {
00096 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00097 listener.ExitRule(grammarFileName, ruleName);
00098 }
00099 }
00100
00101 public void EnterAlt(int alt)
00102 {
00103 for (int i = 0; i < listeners.Count; i++)
00104 {
00105 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00106 listener.EnterAlt(alt);
00107 }
00108 }
00109
00110 public void EnterSubRule(int decisionNumber)
00111 {
00112 for (int i = 0; i < listeners.Count; i++)
00113 {
00114 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00115 listener.EnterSubRule(decisionNumber);
00116 }
00117 }
00118
00119 public void ExitSubRule(int decisionNumber)
00120 {
00121 for (int i = 0; i < listeners.Count; i++)
00122 {
00123 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00124 listener.ExitSubRule(decisionNumber);
00125 }
00126 }
00127
00128 public void EnterDecision(int decisionNumber)
00129 {
00130 for (int i = 0; i < listeners.Count; i++)
00131 {
00132 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00133 listener.EnterDecision(decisionNumber);
00134 }
00135 }
00136
00137 public void ExitDecision(int decisionNumber)
00138 {
00139 for (int i = 0; i < listeners.Count; i++)
00140 {
00141 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00142 listener.ExitDecision(decisionNumber);
00143 }
00144 }
00145
00146 public void Location(int line, int pos)
00147 {
00148 for (int i = 0; i < listeners.Count; i++)
00149 {
00150 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00151 listener.Location(line, pos);
00152 }
00153 }
00154
00155 public void ConsumeToken(IToken token)
00156 {
00157 for (int i = 0; i < listeners.Count; i++)
00158 {
00159 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00160 listener.ConsumeToken(token);
00161 }
00162 }
00163
00164 public void ConsumeHiddenToken(IToken token)
00165 {
00166 for (int i = 0; i < listeners.Count; i++)
00167 {
00168 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00169 listener.ConsumeHiddenToken(token);
00170 }
00171 }
00172
00173 public void LT(int index, IToken t)
00174 {
00175 for (int i = 0; i < listeners.Count; i++)
00176 {
00177 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00178 listener.LT(index, t);
00179 }
00180 }
00181
00182 public void Mark(int index)
00183 {
00184 for (int i = 0; i < listeners.Count; i++)
00185 {
00186 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00187 listener.Mark(index);
00188 }
00189 }
00190
00191 public void Rewind(int index)
00192 {
00193 for (int i = 0; i < listeners.Count; i++)
00194 {
00195 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00196 listener.Rewind(index);
00197 }
00198 }
00199
00200 public void Rewind()
00201 {
00202 for (int i = 0; i < listeners.Count; i++)
00203 {
00204 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00205 listener.Rewind();
00206 }
00207 }
00208
00209 public void BeginBacktrack(int level)
00210 {
00211 for (int i = 0; i < listeners.Count; i++)
00212 {
00213 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00214 listener.BeginBacktrack(level);
00215 }
00216 }
00217
00218 public void EndBacktrack(int level, bool successful)
00219 {
00220 for (int i = 0; i < listeners.Count; i++)
00221 {
00222 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00223 listener.EndBacktrack(level, successful);
00224 }
00225 }
00226
00227 public void RecognitionException(RecognitionException e)
00228 {
00229 for (int i = 0; i < listeners.Count; i++)
00230 {
00231 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00232 listener.RecognitionException(e);
00233 }
00234 }
00235
00236 public void BeginResync()
00237 {
00238 for (int i = 0; i < listeners.Count; i++)
00239 {
00240 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00241 listener.BeginResync();
00242 }
00243 }
00244
00245 public void EndResync()
00246 {
00247 for (int i = 0; i < listeners.Count; i++)
00248 {
00249 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00250 listener.EndResync();
00251 }
00252 }
00253
00254 public void SemanticPredicate(bool result, string predicate)
00255 {
00256 for (int i = 0; i < listeners.Count; i++)
00257 {
00258 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00259 listener.SemanticPredicate(result, predicate);
00260 }
00261 }
00262
00263 public void Commence()
00264 {
00265 for (int i = 0; i < listeners.Count; i++)
00266 {
00267 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00268 listener.Commence();
00269 }
00270 }
00271
00272 public void Terminate()
00273 {
00274 for (int i = 0; i < listeners.Count; i++)
00275 {
00276 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00277 listener.Terminate();
00278 }
00279 }
00280
00281
00282 #region Tree parsing stuff
00283
00284 public void ConsumeNode(object t)
00285 {
00286 for (int i = 0; i < listeners.Count; i++)
00287 {
00288 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00289 listener.ConsumeNode(t);
00290 }
00291 }
00292
00293 public void LT(int index, object t)
00294 {
00295 for (int i = 0; i < listeners.Count; i++)
00296 {
00297 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00298 listener.LT(index, t);
00299 }
00300 }
00301
00302 #endregion
00303
00304
00305 #region AST Stuff
00306
00307 public void GetNilNode(object t)
00308 {
00309 for (int i = 0; i < listeners.Count; i++)
00310 {
00311 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00312 listener.GetNilNode(t);
00313 }
00314 }
00315
00316 public void ErrorNode(object t) {
00317 for (int i = 0; i < listeners.Count; i++) {
00318 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00319 listener.ErrorNode(t);
00320 }
00321 }
00322
00323 public void CreateNode(object t)
00324 {
00325 for (int i = 0; i < listeners.Count; i++)
00326 {
00327 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00328 listener.CreateNode(t);
00329 }
00330 }
00331
00332 public void CreateNode(object node, IToken token)
00333 {
00334 for (int i = 0; i < listeners.Count; i++)
00335 {
00336 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00337 listener.CreateNode(node, token);
00338 }
00339 }
00340
00341 public void BecomeRoot(object newRoot, object oldRoot)
00342 {
00343 for (int i = 0; i < listeners.Count; i++)
00344 {
00345 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00346 listener.BecomeRoot(newRoot, oldRoot);
00347 }
00348 }
00349
00350 public void AddChild(object root, object child)
00351 {
00352 for (int i = 0; i < listeners.Count; i++)
00353 {
00354 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00355 listener.AddChild(root, child);
00356 }
00357 }
00358
00359 public void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex)
00360 {
00361 for (int i = 0; i < listeners.Count; i++)
00362 {
00363 IDebugEventListener listener = (IDebugEventListener)listeners[i];
00364 listener.SetTokenBoundaries(t, tokenStartIndex, tokenStopIndex);
00365 }
00366 }
00367
00368 #endregion
00369 }
00370 }