// Decompiled by: Fernflower v0.6
// Date: 16.01.2011 23:15:52
// Copyright: 2008-2009, Stiver
// Home page: http://www.reversed-java.com
package org.antlr.runtime;
import org.antlr.runtime.BaseRecognizer;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonToken;
import org.antlr.runtime.EarlyExitException;
import org.antlr.runtime.MismatchedNotSetException;
import org.antlr.runtime.MismatchedRangeException;
import org.antlr.runtime.MismatchedSetException;
import org.antlr.runtime.MismatchedTokenException;
import org.antlr.runtime.NoViableAltException;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.RecognizerSharedState;
import org.antlr.runtime.Token;
import org.antlr.runtime.TokenSource;
public abstract class Lexer extends BaseRecognizer implements TokenSource {
protected CharStream input;
public Lexer() {
}
public Lexer(CharStream var1) {
this.input = var1;
}
public Lexer(CharStream var1, RecognizerSharedState var2) {
super(var2);
this.input = var1;
}
public void reset() {
super.reset();
if(this.input != null) {
this.input.seek(0);
}
if(this.state != null) {
this.state.token = null;
this.state.type = 0;
this.state.channel = 0;
this.state.tokenStartCharIndex = -1;
this.state.tokenStartCharPositionInLine = -1;
this.state.tokenStartLine = -1;
this.state.text = null;
}
}
public Token nextToken() {
while(true) {
this.state.token = null;
this.state.channel = 0;
this.state.tokenStartCharIndex = this.input.index();
this.state.tokenStartCharPositionInLine = this.input.getCharPositionInLine();
this.state.tokenStartLine = this.input.getLine();
this.state.text = null;
if(this.input.LA(1) == -1) {
return Token.EOF_TOKEN;
}
try {
this.mTokens();
if(this.state.token == null) {
this.emit();
} else if(this.state.token == Token.SKIP_TOKEN) {
continue;
}
return this.state.token;
} catch (NoViableAltException var2) {
this.reportError(var2);
this.recover(var2);
} catch (RecognitionException var3) {
this.reportError(var3);
}
}
}
public void skip() {
this.state.token = Token.SKIP_TOKEN;
}
public abstract void mTokens() throws RecognitionException;
public void setCharStream(CharStream var1) {
this.input = null;
this.reset();
this.input = var1;
}
public CharStream getCharStream() {
return this.input;
}
public String getSourceName() {
return this.input.getSourceName();
}
public void emit(Token var1) {
this.state.token = var1;
}
public Token emit() {
CommonToken var1 = new CommonToken(this.input, this.state.type, this.state.channel, this.state.tokenStartCharIndex, this.getCharIndex() - 1);
var1.setLine(this.state.tokenStartLine);
var1.setText(this.state.text);
var1.setCharPositionInLine(this.state.tokenStartCharPositionInLine);
this.emit(var1);
return var1;
}
public void match(String var1) throws MismatchedTokenException {
for(int var2 = 0; var2 < var1.length(); this.state.failed = false) {
if(this.input.LA(1) != var1.charAt(var2)) {
if(this.state.backtracking > 0) {
this.state.failed = true;
return;
}
MismatchedTokenException var3 = new MismatchedTokenException(var1.charAt(var2), this.input);
this.recover(var3);
throw var3;
}
++var2;
this.input.consume();
}
}
public void matchAny() {
this.input.consume();
}
public void match(int var1) throws MismatchedTokenException {
if(this.input.LA(1) != var1) {
if(this.state.backtracking > 0) {
this.state.failed = true;
} else {
MismatchedTokenException var2 = new MismatchedTokenException(var1, this.input);
this.recover(var2);
throw var2;
}
} else {
this.input.consume();
this.state.failed = false;
}
}
public void matchRange(int var1, int var2) throws MismatchedRangeException {
if(this.input.LA(1) >= var1 && this.input.LA(1) <= var2) {
this.input.consume();
this.state.failed = false;
} else if(this.state.backtracking > 0) {
this.state.failed = true;
} else {
MismatchedRangeException var3 = new MismatchedRangeException(var1, var2, this.input);
this.recover(var3);
throw var3;
}
}
public int getLine() {
return this.input.getLine();
}
public int getCharPositionInLine() {
return this.input.getCharPositionInLine();
}
public int getCharIndex() {
return this.input.index();
}
public String getText() {
return this.state.text != null?this.state.text:this.input.substring(this.state.tokenStartCharIndex, this.getCharIndex() - 1);
}
public void setText(String var1) {
this.state.text = var1;
}
public void reportError(RecognitionException var1) {
this.displayRecognitionError(this.getTokenNames(), var1);
}
public String getErrorMessage(RecognitionException var1, String[] var2) {
String var3 = null;
if(var1 instanceof MismatchedTokenException) {
MismatchedTokenException var4 = (MismatchedTokenException)var1;
var3 = "mismatched character " + this.getCharErrorDisplay(var1.c) + " expecting " + this.getCharErrorDisplay(var4.expecting);
} else if(var1 instanceof NoViableAltException) {
NoViableAltException var5 = (NoViableAltException)var1;
var3 = "no viable alternative at character " + this.getCharErrorDisplay(var1.c);
} else if(var1 instanceof EarlyExitException) {
EarlyExitException var6 = (EarlyExitException)var1;
var3 = "required (...)+ loop did not match anything at character " + this.getCharErrorDisplay(var1.c);
} else if(var1 instanceof MismatchedNotSetException) {
MismatchedNotSetException var7 = (MismatchedNotSetException)var1;
var3 = "mismatched character " + this.getCharErrorDisplay(var1.c) + " expecting set " + var7.expecting;
} else if(var1 instanceof MismatchedSetException) {
MismatchedSetException var8 = (MismatchedSetException)var1;
var3 = "mismatched character " + this.getCharErrorDisplay(var1.c) + " expecting set " + var8.expecting;
} else if(var1 instanceof MismatchedRangeException) {
MismatchedRangeException var9 = (MismatchedRangeException)var1;
var3 = "mismatched character " + this.getCharErrorDisplay(var1.c) + " expecting set " + this.getCharErrorDisplay(var9.a) + ".." + this.getCharErrorDisplay(var9.b);
} else {
var3 = super.getErrorMessage(var1, var2);
}
return var3;
}
public String getCharErrorDisplay(int var1) {
String var2 = String.valueOf((char)var1);
switch(var1) {
case -1:
var2 = "<EOF>";
break;
case 9:
var2 = "\\t";
break;
case 10:
var2 = "\\n";
break;
case 13:
var2 = "\\r";
}
return "\'" + var2 + "\'";
}
public void recover(RecognitionException var1) {
this.input.consume();
}
public void traceIn(String var1, int var2) {
String var3 = (char)this.input.LT(1) + " line=" + this.getLine() + ":" + this.getCharPositionInLine();
super.traceIn(var1, var2, var3);
}
public void traceOut(String var1, int var2) {
String var3 = (char)this.input.LT(1) + " line=" + this.getLine() + ":" + this.getCharPositionInLine();
super.traceOut(var1, var2, var3);
}
}