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}