1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** A parser for TokenStreams.  "parser grammars" result in a subclass
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *  of this.
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.runtime.Parser = function(input, state) {
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    org.antlr.runtime.Parser.superclass.constructor.call(this, state);
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    this.setTokenStream(input);
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver};
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.lang.extend(org.antlr.runtime.Parser, org.antlr.runtime.BaseRecognizer, {
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    reset: function() {
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        // reset all recognizer state variables
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		org.antlr.runtime.Parser.superclass.reset.call(this);
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		if ( org.antlr.lang.isValue(this.input) ) {
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			this.input.seek(0); // rewind the input
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	},
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    getCurrentInputSymbol: function(input) {
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return input.LT(1);
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    getMissingSymbol: function(input,
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                               e,
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                               expectedTokenType,
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                               follow)
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var tokenText =
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            "<missing "+this.getTokenNames()[expectedTokenType]+">";
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var t = new org.antlr.runtime.CommonToken(expectedTokenType, tokenText);
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var current = input.LT(1);
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var old_current;
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if ( current.getType() === org.antlr.runtime.Token.EOF ) {
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            old_current = current;
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            current = input.LT(-1);
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // handle edge case where there are no good tokens in the stream
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (!current) {
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                current = old_current;
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        t.line = current.getLine();
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        t.charPositionInLine = current.getCharPositionInLine();
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        t.channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return t;
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	/** Set the token stream and reset the parser */
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    setTokenStream: function(input) {
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		this.input = null;
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		this.reset();
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		this.input = input;
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	},
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    getTokenStream: function() {
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		return this.input;
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	},
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    getSourceName: function() {
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return this.input.getSourceName();
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    traceIn: function(ruleName, ruleIndex)  {
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		org.antlr.runtime.Parser.superclass.traceIn.call(
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                this, ruleName, ruleIndex, this.input.LT(1));
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	},
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    traceOut: function(ruleName, ruleIndex)  {
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		org.antlr.runtime.Parser.superclass.traceOut.call(
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                this, ruleName, ruleIndex, this.input.LT(1));
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	}
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver});
72