// Decompiled by: Fernflower v0.6
// Date: 16.01.2011 23:16:12
// Copyright: 2008-2009, Stiver
// Home page: http://www.reversed-java.com
package org.antlr.runtime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.antlr.runtime.BitSet;
import org.antlr.runtime.EarlyExitException;
import org.antlr.runtime.FailedPredicateException;
import org.antlr.runtime.IntStream;
import org.antlr.runtime.MismatchedNotSetException;
import org.antlr.runtime.MismatchedSetException;
import org.antlr.runtime.MismatchedTokenException;
import org.antlr.runtime.MismatchedTreeNodeException;
import org.antlr.runtime.MissingTokenException;
import org.antlr.runtime.NoViableAltException;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.RecognizerSharedState;
import org.antlr.runtime.Token;
import org.antlr.runtime.UnwantedTokenException;
public abstract class BaseRecognizer {
public static final int MEMO_RULE_FAILED = -2;
public static final int MEMO_RULE_UNKNOWN = -1;
public static final int INITIAL_FOLLOW_STACK_SIZE = 100;
public static final int DEFAULT_TOKEN_CHANNEL = 0;
public static final int HIDDEN = 99;
public static final String NEXT_TOKEN_RULE_NAME = "nextToken";
protected RecognizerSharedState state;
public BaseRecognizer() {
this.state = new RecognizerSharedState();
}
public BaseRecognizer(RecognizerSharedState var1) {
if(var1 == null) {
var1 = new RecognizerSharedState();
}
this.state = var1;
}
public void reset() {
if(this.state != null) {
this.state._fsp = -1;
this.state.errorRecovery = false;
this.state.lastErrorIndex = -1;
this.state.failed = false;
this.state.syntaxErrors = 0;
this.state.backtracking = 0;
for(int var1 = 0; this.state.ruleMemo != null && var1 < this.state.ruleMemo.length; ++var1) {
this.state.ruleMemo[var1] = null;
}
}
}
public Object match(IntStream var1, int var2, BitSet var3) throws RecognitionException {
Object var4 = this.getCurrentInputSymbol(var1);
if(var1.LA(1) == var2) {
var1.consume();
this.state.errorRecovery = false;
this.state.failed = false;
return var4;
} else if(this.state.backtracking > 0) {
this.state.failed = true;
return var4;
} else {
var4 = this.recoverFromMismatchedToken(var1, var2, var3);
return var4;
}
}
public void matchAny(IntStream var1) {
this.state.errorRecovery = false;
this.state.failed = false;
var1.consume();
}
public boolean mismatchIsUnwantedToken(IntStream var1, int var2) {
return var1.LA(2) == var2;
}
public boolean mismatchIsMissingToken(IntStream var1, BitSet var2) {
if(var2 == null) {
return false;
} else {
if(var2.member(1)) {
BitSet var3 = this.computeContextSensitiveRuleFOLLOW();
var2 = var2.or(var3);
if(this.state._fsp >= 0) {
var2.remove(1);
}
}
return var2.member(var1.LA(1)) || var2.member(1);
}
}
public void reportError(RecognitionException var1) {
if(!this.state.errorRecovery) {
++this.state.syntaxErrors;
this.state.errorRecovery = true;
this.displayRecognitionError(this.getTokenNames(), var1);
}
}
public void displayRecognitionError(String[] var1, RecognitionException var2) {
String var3 = this.getErrorHeader(var2);
String var4 = this.getErrorMessage(var2, var1);
this.emitErrorMessage(var3 + " " + var4);
}
public String getErrorMessage(RecognitionException var1, String[] var2) {
String var3 = var1.getMessage();
String var5;
if(var1 instanceof UnwantedTokenException) {
UnwantedTokenException var4 = (UnwantedTokenException)var1;
var5 = "<unknown>";
if(var4.expecting == -1) {
var5 = "EOF";
} else {
var5 = var2[var4.expecting];
}
var3 = "extraneous input " + this.getTokenErrorDisplay(var4.getUnexpectedToken()) + " expecting " + var5;
} else if(var1 instanceof MissingTokenException) {
MissingTokenException var10 = (MissingTokenException)var1;
var5 = "<unknown>";
if(var10.expecting == -1) {
var5 = "EOF";
} else {
var5 = var2[var10.expecting];
}
var3 = "missing " + var5 + " at " + this.getTokenErrorDisplay(var1.token);
} else if(var1 instanceof MismatchedTokenException) {
MismatchedTokenException var6 = (MismatchedTokenException)var1;
var5 = "<unknown>";
if(var6.expecting == -1) {
var5 = "EOF";
} else {
var5 = var2[var6.expecting];
}
var3 = "mismatched input " + this.getTokenErrorDisplay(var1.token) + " expecting " + var5;
} else if(var1 instanceof MismatchedTreeNodeException) {
MismatchedTreeNodeException var7 = (MismatchedTreeNodeException)var1;
var5 = "<unknown>";
if(var7.expecting == -1) {
var5 = "EOF";
} else {
var5 = var2[var7.expecting];
}
var3 = "mismatched tree node: " + var7.node + " expecting " + var5;
} else if(var1 instanceof NoViableAltException) {
var3 = "no viable alternative at input " + this.getTokenErrorDisplay(var1.token);
} else if(var1 instanceof EarlyExitException) {
var3 = "required (...)+ loop did not match anything at input " + this.getTokenErrorDisplay(var1.token);
} else if(var1 instanceof MismatchedSetException) {
MismatchedSetException var8 = (MismatchedSetException)var1;
var3 = "mismatched input " + this.getTokenErrorDisplay(var1.token) + " expecting set " + var8.expecting;
} else if(var1 instanceof MismatchedNotSetException) {
MismatchedNotSetException var9 = (MismatchedNotSetException)var1;
var3 = "mismatched input " + this.getTokenErrorDisplay(var1.token) + " expecting set " + var9.expecting;
} else if(var1 instanceof FailedPredicateException) {
FailedPredicateException var11 = (FailedPredicateException)var1;
var3 = "rule " + var11.ruleName + " failed predicate: {" + var11.predicateText + "}?";
}
return var3;
}
public int getNumberOfSyntaxErrors() {
return this.state.syntaxErrors;
}
public String getErrorHeader(RecognitionException var1) {
return "line " + var1.line + ":" + var1.charPositionInLine;
}
public String getTokenErrorDisplay(Token var1) {
String var2 = var1.getText();
if(var2 == null) {
if(var1.getType() == -1) {
var2 = "<EOF>";
} else {
var2 = "<" + var1.getType() + ">";
}
}
var2 = var2.replaceAll("\n", "\\\\n");
var2 = var2.replaceAll("\r", "\\\\r");
var2 = var2.replaceAll("\t", "\\\\t");
return "\'" + var2 + "\'";
}
public void emitErrorMessage(String var1) {
System.err.println(var1);
}
public void recover(IntStream var1, RecognitionException var2) {
if(this.state.lastErrorIndex == var1.index()) {
var1.consume();
}
this.state.lastErrorIndex = var1.index();
BitSet var3 = this.computeErrorRecoverySet();
this.beginResync();
this.consumeUntil(var1, var3);
this.endResync();
}
public void beginResync() {
}
public void endResync() {
}
protected BitSet computeErrorRecoverySet() {
return this.combineFollows(false);
}
protected BitSet computeContextSensitiveRuleFOLLOW() {
return this.combineFollows(true);
}
protected BitSet combineFollows(boolean var1) {
int var2 = this.state._fsp;
BitSet var3 = new BitSet();
for(int var4 = var2; var4 >= 0; --var4) {
BitSet var5 = this.state.following[var4];
var3.orInPlace(var5);
if(var1) {
if(!var5.member(1)) {
break;
}
if(var4 > 0) {
var3.remove(1);
}
}
}
return var3;
}
protected Object recoverFromMismatchedToken(IntStream var1, int var2, BitSet var3) throws RecognitionException {
MismatchedTokenException var4 = null;
Object var5;
if(this.mismatchIsUnwantedToken(var1, var2)) {
UnwantedTokenException var7 = new UnwantedTokenException(var2, var1);
this.beginResync();
var1.consume();
this.endResync();
this.reportError(var7);
var5 = this.getCurrentInputSymbol(var1);
var1.consume();
return var5;
} else if(this.mismatchIsMissingToken(var1, var3)) {
var5 = this.getMissingSymbol(var1, var4, var2, var3);
MissingTokenException var6 = new MissingTokenException(var2, var1, var5);
this.reportError(var6);
return var5;
} else {
var4 = new MismatchedTokenException(var2, var1);
throw var4;
}
}
public Object recoverFromMismatchedSet(IntStream var1, RecognitionException var2, BitSet var3) throws RecognitionException {
if(this.mismatchIsMissingToken(var1, var3)) {
this.reportError(var2);
return this.getMissingSymbol(var1, var2, 0, var3);
} else {
throw var2;
}
}
protected Object getCurrentInputSymbol(IntStream var1) {
return null;
}
protected Object getMissingSymbol(IntStream var1, RecognitionException var2, int var3, BitSet var4) {
return null;
}
public void consumeUntil(IntStream var1, int var2) {
for(int var3 = var1.LA(1); var3 != -1 && var3 != var2; var3 = var1.LA(1)) {
var1.consume();
}
}
public void consumeUntil(IntStream var1, BitSet var2) {
for(int var3 = var1.LA(1); var3 != -1 && !var2.member(var3); var3 = var1.LA(1)) {
var1.consume();
}
}
protected void pushFollow(BitSet var1) {
if(this.state._fsp + 1 >= this.state.following.length) {
BitSet[] var2 = new BitSet[this.state.following.length * 2];
System.arraycopy(this.state.following, 0, var2, 0, this.state.following.length);
this.state.following = var2;
}
this.state.following[this.state._fsp += 1] = var1;
}
public List getRuleInvocationStack() {
String var1 = this.getClass().getName();
return getRuleInvocationStack(new Throwable(), var1);
}
public static List getRuleInvocationStack(Throwable var0, String var1) {
ArrayList var2 = new ArrayList();
StackTraceElement[] var3 = var0.getStackTrace();
boolean var4 = false;
for(int var6 = var3.length - 1; var6 >= 0; --var6) {
StackTraceElement var5 = var3[var6];
if(!var5.getClassName().startsWith("org.antlr.runtime.") && !var5.getMethodName().equals("nextToken") && var5.getClassName().equals(var1)) {
var2.add(var5.getMethodName());
}
}
return var2;
}
public int getBacktrackingLevel() {
return this.state.backtracking;
}
public void setBacktrackingLevel(int var1) {
this.state.backtracking = var1;
}
public boolean failed() {
return this.state.failed;
}
public String[] getTokenNames() {
return null;
}
public String getGrammarFileName() {
return null;
}
public abstract String getSourceName();
public List toStrings(List var1) {
if(var1 == null) {
return null;
} else {
ArrayList var2 = new ArrayList(var1.size());
for(int var3 = 0; var3 < var1.size(); ++var3) {
var2.add(((Token)var1.get(var3)).getText());
}
return var2;
}
}
public int getRuleMemoization(int var1, int var2) {
if(this.state.ruleMemo[var1] == null) {
this.state.ruleMemo[var1] = new HashMap();
}
Integer var3 = (Integer)this.state.ruleMemo[var1].get(new Integer(var2));
return var3 == null?-1:var3.intValue();
}
public boolean alreadyParsedRule(IntStream var1, int var2) {
int var3 = this.getRuleMemoization(var2, var1.index());
if(var3 == -1) {
return false;
} else {
if(var3 == -2) {
this.state.failed = true;
} else {
var1.seek(var3 + 1);
}
return true;
}
}
public void memoize(IntStream var1, int var2, int var3) {
int var4 = this.state.failed?-2:var1.index() - 1;
if(this.state.ruleMemo == null) {
System.err.println("!!!!!!!!! memo array is null for " + this.getGrammarFileName());
}
if(var2 >= this.state.ruleMemo.length) {
System.err.println("!!!!!!!!! memo size is " + this.state.ruleMemo.length + ", but rule index is " + var2);
}
if(this.state.ruleMemo[var2] != null) {
this.state.ruleMemo[var2].put(new Integer(var3), new Integer(var4));
}
}
public int getRuleMemoizationCacheSize() {
int var1 = 0;
for(int var2 = 0; this.state.ruleMemo != null && var2 < this.state.ruleMemo.length; ++var2) {
Map var3 = this.state.ruleMemo[var2];
if(var3 != null) {
var1 += var3.size();
}
}
return var1;
}
public void traceIn(String var1, int var2, Object var3) {
System.out.print("enter " + var1 + " " + var3);
if(this.state.backtracking > 0) {
System.out.print(" backtracking=" + this.state.backtracking);
}
System.out.println();
}
public void traceOut(String var1, int var2, Object var3) {
System.out.print("exit " + var1 + " " + var3);
if(this.state.backtracking > 0) {
System.out.print(" backtracking=" + this.state.backtracking);
if(this.state.failed) {
System.out.print(" failed");
} else {
System.out.print(" succeeded");
}
}
System.out.println();
}
}