1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * [The "BSD licence"] 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2005-2008 Terence Parr 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved. 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Conversion to C#: 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved. 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Redistribution and use in source and binary forms, with or without 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * modification, are permitted provided that the following conditions 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * are met: 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 1. Redistributions of source code must retain the above copyright 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * notice, this list of conditions and the following disclaimer. 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 2. Redistributions in binary form must reproduce the above copyright 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * notice, this list of conditions and the following disclaimer in the 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * documentation and/or other materials provided with the distribution. 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 3. The name of the author may not be used to endorse or promote products 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * derived from this software without specific prior written permission. 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Debug 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Antlr.Runtime.JavaExtensions; 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Array = System.Array; 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using BaseTree = Antlr.Runtime.Tree.BaseTree; 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Console = System.Console; 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Exception = System.Exception; 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using IOException = System.IO.IOException; 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using ITree = Antlr.Runtime.Tree.ITree; 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Math = System.Math; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using Socket = System.Net.Sockets.Socket; 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using SocketException = System.Net.Sockets.SocketException; 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using TextReader = System.IO.TextReader; 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using TextWriter = System.IO.TextWriter; 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class RemoteDebugEventSocketListener 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const int MAX_EVENT_ELEMENTS = 8; 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener; 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string machine; 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int port; 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Socket channel = null; 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TextWriter @out; 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TextReader @in; 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string @event; 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary>Version of ANTLR (dictates events)</summary> */ 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public string version; 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public string grammarFileName; 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary> 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Track the last token index we saw during a consume. If same, then 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * set a flag that we have a problem. 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * </summary> 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int previousTokenIndex = -1; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool tokenIndexesInvalid = false; 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class ProxyToken : IToken 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int index; 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int type; 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int channel; 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int line; 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int charPos; 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string text; 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public ProxyToken( int index ) 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.index = index; 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public ProxyToken( int index, int type, int channel, 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int line, int charPos, string text ) 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.index = index; 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.type = type; 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.channel = channel; 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.line = line; 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.charPos = charPos; 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.text = text; 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region IToken Members 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public string Text 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return text; 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = value; 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int Type 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return type; 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = value; 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int Line 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return line; 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver line = value; 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int CharPositionInLine 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return charPos; 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver charPos = value; 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int Channel 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return channel; 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver channel = value; 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int StartIndex 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return -1; 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int StopIndex 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return -1; 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int TokenIndex 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return index; 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver index = value; 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public ICharStream InputStream 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return null; 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override string ToString() 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string channelStr = ""; 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( channel != TokenChannels.Default ) 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver channelStr = ",channel=" + channel; 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return "[" + Text + "/<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + ",@" + index + "]"; 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class ProxyTree : BaseTree 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int ID; 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int type; 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int line = 0; 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int charPos = -1; 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int tokenIndex = -1; 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string text; 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public ProxyTree( int ID, int type, int line, int charPos, int tokenIndex, string text ) 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.ID = ID; 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.type = type; 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.line = line; 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.charPos = charPos; 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.tokenIndex = tokenIndex; 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.text = text; 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public ProxyTree( int ID ) 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.ID = ID; 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region Properties 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override string Text 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return text; 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override int TokenStartIndex 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return tokenIndex; 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override int TokenStopIndex 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return 0; 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override int Type 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return type; 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override ITree DupNode() 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return null; 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public override string ToString() 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return "fix this"; 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public RemoteDebugEventSocketListener( IDebugEventListener listener, 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string machine, 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int port ) 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.listener = listener; 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.machine = machine; 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this.port = port; 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( !OpenConnection() ) 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new SocketException(); 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual void EventHandler() 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Handshake(); 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @event = @in.ReadLine(); 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver while ( @event != null ) 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Dispatch( @event ); 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Ack(); 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @event = @in.ReadLine(); 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( Exception e ) 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( e ); 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ExceptionExtensions.PrintStackTrace( e, Console.Error ); 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver finally 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CloseConnection(); 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual bool OpenConnection() 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool success = false; 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new System.NotImplementedException(); 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //channel = new Socket( machine, port ); 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //channel.setTcpNoDelay( true ); 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //OutputStream os = channel.getOutputStream(); 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //OutputStreamWriter osw = new OutputStreamWriter( os, "UTF8" ); 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //@out = new PrintWriter( new BufferedWriter( osw ) ); 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //InputStream @is = channel.getInputStream(); 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //InputStreamReader isr = new InputStreamReader( @is, "UTF8" ); 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //@in = new BufferedReader( isr ); 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //success = true; 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( Exception e ) 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( e ); 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return success; 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual void CloseConnection() 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @in.Close(); 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @in = null; 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @out.Close(); 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @out = null; 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver channel.Close(); 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver channel = null; 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( Exception e ) 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( e ); 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ExceptionExtensions.PrintStackTrace( e, Console.Error ); 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver finally 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( @in != null ) 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @in.Close(); 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( IOException ioe ) 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( ioe ); 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( @out != null ) 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @out.Close(); 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( channel != null ) 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver channel.Close(); 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( IOException ioe ) 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( ioe ); 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual void Handshake() 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string antlrLine = @in.ReadLine(); 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string[] antlrElements = GetEventElements( antlrLine ); 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver version = antlrElements[1]; 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string grammarLine = @in.ReadLine(); 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string[] grammarElements = GetEventElements( grammarLine ); 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver grammarFileName = grammarElements[1]; 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Ack(); 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Commence(); // inform listener after handshake 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual void Ack() 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @out.WriteLine( "ack" ); 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @out.Flush(); 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual void Dispatch( string line ) 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //JSystem.@out.println( "event: " + line ); 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string[] elements = GetEventElements( line ); 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( elements == null || elements[0] == null ) 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( "unknown debug event: " + line ); 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return; 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( elements[0].Equals( "enterRule" ) ) 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterRule( elements[1], elements[2] ); 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "exitRule" ) ) 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitRule( elements[1], elements[2] ); 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "enterAlt" ) ) 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterAlt( int.Parse( elements[1] ) ); 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "enterSubRule" ) ) 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterSubRule( int.Parse( elements[1] ) ); 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "exitSubRule" ) ) 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitSubRule( int.Parse( elements[1] ) ); 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "enterDecision" ) ) 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterDecision(int.Parse(elements[1]), elements[2].Equals("true")); 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "exitDecision" ) ) 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitDecision( int.Parse( elements[1] ) ); 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "location" ) ) 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Location( int.Parse( elements[1] ), 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( elements[2] ) ); 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "consumeToken" ) ) 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyToken t = DeserializeToken( elements, 1 ); 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( t.TokenIndex == previousTokenIndex ) 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenIndexesInvalid = true; 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver previousTokenIndex = t.TokenIndex; 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeToken( t ); 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "consumeHiddenToken" ) ) 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyToken t = DeserializeToken( elements, 1 ); 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( t.TokenIndex == previousTokenIndex ) 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenIndexesInvalid = true; 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver previousTokenIndex = t.TokenIndex; 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeHiddenToken( t ); 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "LT" ) ) 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IToken t = DeserializeToken( elements, 2 ); 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.LT( int.Parse( elements[1] ), t ); 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "mark" ) ) 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Mark( int.Parse( elements[1] ) ); 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "rewind" ) ) 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( elements[1] != null ) 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Rewind( int.Parse( elements[1] ) ); 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Rewind(); 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "beginBacktrack" ) ) 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BeginBacktrack( int.Parse( elements[1] ) ); 502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "endBacktrack" ) ) 504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int level = int.Parse( elements[1] ); 506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int successI = int.Parse( elements[2] ); 507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EndBacktrack( level, successI == DebugEventListenerConstants.True ); 508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "exception" ) ) 510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#if true 512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver throw new System.NotImplementedException(); 513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#else 514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string excName = elements[1]; 515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string indexS = elements[2]; 516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string lineS = elements[3]; 517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string posS = elements[4]; 518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Class excClass = null; 519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver excClass = Class.forName( excName ); 522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver RecognitionException e = 523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (RecognitionException)excClass.newInstance(); 524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver e.index = int.Parse( indexS ); 525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver e.line = int.Parse( lineS ); 526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver e.charPositionInLine = int.Parse( posS ); 527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.recognitionException( e ); 528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( ClassNotFoundException cnfe ) 530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.println( "can't find class " + cnfe ); 532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cnfe.printStackTrace( Console.Error ); 533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( InstantiationException ie ) 535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.println( "can't instantiate class " + ie ); 537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ie.printStackTrace( Console.Error ); 538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( IllegalAccessException iae ) 540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.println( "can't access class " + iae ); 542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver iae.printStackTrace( Console.Error ); 543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "beginResync" ) ) 547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BeginResync(); 549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "endResync" ) ) 551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EndResync(); 553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "terminate" ) ) 555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Terminate(); 557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "semanticPredicate" ) ) 559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool result = bool.Parse( elements[1] ); 561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string predicateText = elements[2]; 562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver predicateText = UnEscapeNewlines( predicateText ); 563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.SemanticPredicate( result, 564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver predicateText ); 565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "consumeNode" ) ) 567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = DeserializeNode( elements, 1 ); 569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeNode( node ); 570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "LN" ) ) 572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int i = int.Parse( elements[1] ); 574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = DeserializeNode( elements, 2 ); 575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.LT( i, node ); 576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "createNodeFromTokenElements" ) ) 578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ID = int.Parse( elements[1] ); 580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int type = int.Parse( elements[2] ); 581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string text = elements[3]; 582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = UnEscapeNewlines( text ); 583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = new ProxyTree( ID, type, -1, -1, -1, text ); 584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.CreateNode( node ); 585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "createNode" ) ) 587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ID = int.Parse( elements[1] ); 589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int tokenIndex = int.Parse( elements[2] ); 590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // create dummy node/token filled with ID, tokenIndex 591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = new ProxyTree( ID ); 592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyToken token = new ProxyToken( tokenIndex ); 593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.CreateNode( node, token ); 594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "nilNode" ) ) 596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ID = int.Parse( elements[1] ); 598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = new ProxyTree( ID ); 599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.NilNode( node ); 600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "errorNode" ) ) 602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // TODO: do we need a special tree here? 604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ID = int.Parse( elements[1] ); 605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int type = int.Parse( elements[2] ); 606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string text = elements[3]; 607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = UnEscapeNewlines( text ); 608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = new ProxyTree( ID, type, -1, -1, -1, text ); 609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ErrorNode( node ); 610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "becomeRoot" ) ) 612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int newRootID = int.Parse( elements[1] ); 614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int oldRootID = int.Parse( elements[2] ); 615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree newRoot = new ProxyTree( newRootID ); 616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree oldRoot = new ProxyTree( oldRootID ); 617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BecomeRoot( newRoot, oldRoot ); 618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "addChild" ) ) 620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int rootID = int.Parse( elements[1] ); 622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int childID = int.Parse( elements[2] ); 623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree root = new ProxyTree( rootID ); 624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree child = new ProxyTree( childID ); 625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.AddChild( root, child ); 626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else if ( elements[0].Equals( "setTokenBoundaries" ) ) 628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ID = int.Parse( elements[1] ); 630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyTree node = new ProxyTree( ID ); 631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.SetTokenBoundaries( 632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver node, 633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( elements[2] ), 634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( elements[3] ) ); 635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Console.Error.WriteLine( "unknown debug event: " + line ); 639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual ProxyTree DeserializeNode( string[] elements, int offset ) 643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ID = int.Parse( elements[offset + 0] ); 645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int type = int.Parse( elements[offset + 1] ); 646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int tokenLine = int.Parse( elements[offset + 2] ); 647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int charPositionInLine = int.Parse( elements[offset + 3] ); 648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int tokenIndex = int.Parse( elements[offset + 4] ); 649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string text = elements[offset + 5]; 650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = UnEscapeNewlines( text ); 651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return new ProxyTree( ID, type, tokenLine, charPositionInLine, tokenIndex, text ); 652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual ProxyToken DeserializeToken( string[] elements, 655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int offset ) 656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string indexS = elements[offset + 0]; 658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string typeS = elements[offset + 1]; 659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string channelS = elements[offset + 2]; 660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string lineS = elements[offset + 3]; 661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string posS = elements[offset + 4]; 662324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string text = elements[offset + 5]; 663324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = UnEscapeNewlines( text ); 664324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int index = int.Parse( indexS ); 665324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ProxyToken t = 666324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver new ProxyToken( index, 667324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( typeS ), 668324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( channelS ), 669324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( lineS ), 670324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int.Parse( posS ), 671324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text ); 672324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return t; 673324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 674324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 675324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary>Create a thread to listen to the remote running recognizer</summary> */ 676324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Start() 677324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 678324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver System.Threading.Thread t = new System.Threading.Thread( Run ); 679324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t.Start(); 680324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 681324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 682324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Run() 683324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 684324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EventHandler(); 685324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 686324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 687324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region Misc 688324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 689324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual string[] GetEventElements( string @event ) 690324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 691324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( @event == null ) 692324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 693324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return null; 694324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 695324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string[] elements = new string[MAX_EVENT_ELEMENTS]; 696324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string str = null; // a string element if present (must be last) 697324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try 698324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 699324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int firstQuoteIndex = @event.IndexOf( '"' ); 700324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( firstQuoteIndex >= 0 ) 701324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 702324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // treat specially; has a string argument like "a comment\n 703324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Note that the string is terminated by \n not end quote. 704324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Easier to parse that way. 705324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string eventWithoutString = @event.Substring( 0, firstQuoteIndex ); 706324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver str = @event.Substring( firstQuoteIndex + 1 ); 707324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @event = eventWithoutString; 708324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 709324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 710324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string[] tokens = @event.Split('\t'); 711324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Array.Copy(tokens, elements, Math.Min(tokens.Length, MAX_EVENT_ELEMENTS)); 712324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (tokens.Length >= MAX_EVENT_ELEMENTS) 713324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return elements; 714324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 715324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( str != null ) 716324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 717324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements[tokens.Length] = str; 718324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 719324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 720324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver catch ( Exception e ) 721324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 722324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ExceptionExtensions.PrintStackTrace( e, Console.Error ); 723324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 724324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return elements; 725324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 726324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 727324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected virtual string UnEscapeNewlines( string txt ) 728324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 729324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // this unescape is slow but easy to understand 730324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver txt = txt.Replace( "%0A", "\n" ); // unescape \n 731324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver txt = txt.Replace( "%0D", "\r" ); // unescape \r 732324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver txt = txt.Replace( "%25", "%" ); // undo escaped escape chars 733324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return txt; 734324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 735324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 736324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual bool TokenIndexesAreInvalid() 737324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 738324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return tokenIndexesInvalid; 739324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 740324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 741324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 742324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 743324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 744324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 745