1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver[The "BSD licence"] 3324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2007-2008 Johannes Luber 4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2005-2007 Kunle Odutola 5324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverAll rights reserved. 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverRedistribution and use in source and binary forms, with or without 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodification, are permitted provided that the following conditions 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverare met: 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1. Redistributions of source code MUST RETAIN the above copyright 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver notice, this list of conditions and the following disclaimer. 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver2. Redistributions in binary form MUST REPRODUCE the above copyright 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver notice, this list of conditions and the following disclaimer in 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver the documentation and/or other materials provided with the 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver distribution. 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver3. The name of the author may not be used to endorse or promote products 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver derived from this software without specific prior WRITTEN permission. 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver4. Unless explicitly state otherwise, any contribution intentionally 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver submitted for inclusion in this work to the copyright owner or licensor 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shall be under the terms and conditions of this license, without any 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver additional terms or conditions. 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 27324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 28324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 32324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/ 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using System; 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// <summary> 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// A source of tokens must provide a sequence of tokens via NextToken() 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// and also must reveal it's source of characters; CommonToken's text is 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// computed from a CharStream; it only store indices into the char stream. 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Errors from the lexer are never passed to the parser. Either you want 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// to keep going or you do not upon token recognition error. If you do not 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// want to continue lexing then you do not want to continue parsing. Just 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// throw an exception not under RecognitionException and Java will naturally 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// toss you all the way out of the recognizers. If you want to continue 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// lexing then you should not throw an exception to the parser--it has already 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// requested a token. Keep lexing until you get a valid one. Just report 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// errors and keep going, looking for a valid token. 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// </summary> 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public interface ITokenSource 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// <summary> 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Returns a Token object from the input stream (usually a CharStream). 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Does not fail/return upon lexing error; just keeps chewing on the 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// characters until it gets a good one; errors are not passed through 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// to the parser. 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// </summary> 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IToken NextToken(); 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// <summary> 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Where are you getting tokens from? normally the implication will simply 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// ask lexers input stream. 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// </summary> 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver string SourceName { 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver get; 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}