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 Antlr.Runtime;
00040
00041 public class DebugTokenStream : ITokenStream
00042 {
00043 protected internal IDebugEventListener dbg;
00044 public ITokenStream input;
00045 protected internal bool initialStreamState = true;
00049 protected int lastMarker;
00050
00051 virtual public IDebugEventListener DebugListener
00052 {
00053 set { this.dbg = value; }
00054 }
00055
00056 public DebugTokenStream(ITokenStream input, IDebugEventListener dbg)
00057 {
00058 this.input = input;
00059 DebugListener = dbg;
00060
00061
00062 input.LT(1);
00063 }
00064
00065 public virtual void Consume()
00066 {
00067 if (initialStreamState)
00068 {
00069 ConsumeInitialHiddenTokens();
00070 }
00071 int a = input.Index();
00072 IToken t = input.LT(1);
00073 input.Consume();
00074 int b = input.Index();
00075 dbg.ConsumeToken(t);
00076 if (b > a + 1)
00077 {
00078
00079 for (int i = a + 1; i < b; i++)
00080 {
00081 dbg.ConsumeHiddenToken(input.Get(i));
00082 }
00083 }
00084 }
00085
00087 protected internal virtual void ConsumeInitialHiddenTokens()
00088 {
00089 int firstOnChannelTokenIndex = input.Index();
00090 for (int i = 0; i < firstOnChannelTokenIndex; i++)
00091 {
00092 dbg.ConsumeHiddenToken(input.Get(i));
00093 }
00094 initialStreamState = false;
00095 }
00096
00097 public virtual IToken LT(int i)
00098 {
00099 if (initialStreamState)
00100 {
00101 ConsumeInitialHiddenTokens();
00102 }
00103 dbg.LT(i, input.LT(i));
00104 return input.LT(i);
00105 }
00106
00107 public virtual int LA(int i)
00108 {
00109 if (initialStreamState)
00110 {
00111 ConsumeInitialHiddenTokens();
00112 }
00113 dbg.LT(i, input.LT(i));
00114 return input.LA(i);
00115 }
00116
00117 public virtual IToken Get(int i)
00118 {
00119 return input.Get(i);
00120 }
00121
00122 public virtual int Mark()
00123 {
00124 lastMarker = input.Mark();
00125 dbg.Mark(lastMarker);
00126 return lastMarker;
00127 }
00128
00129 public virtual int Index()
00130 {
00131 return input.Index();
00132 }
00133
00134 public virtual void Rewind(int marker)
00135 {
00136 dbg.Rewind(marker);
00137 input.Rewind(marker);
00138 }
00139
00140 public virtual void Rewind()
00141 {
00142 dbg.Rewind();
00143 input.Rewind(lastMarker);
00144 }
00145
00146 public virtual void Release(int marker)
00147 {
00148 }
00149
00150 public virtual void Seek(int index)
00151 {
00152 input.Seek(index);
00153 }
00154
00155 public virtual int Size()
00156 {
00157 return input.Size();
00158 }
00159
00160 public virtual ITokenSource TokenSource
00161 {
00162 get { return input.TokenSource; }
00163 }
00164
00165 public virtual string SourceName {
00166 get { return TokenSource.SourceName; }
00167 }
00168
00169 public override string ToString()
00170 {
00171 return input.ToString();
00172 }
00173
00174 public virtual string ToString(int start, int stop)
00175 {
00176 return input.ToString(start, stop);
00177 }
00178
00179 public virtual string ToString(IToken start, IToken stop)
00180 {
00181 return input.ToString(start, stop);
00182 }
00183 }
00184 }