package org.eclipse.wst.jsdt.internal.compiler.parser; | |
import java.io.*; | |
import org.eclipse.wst.jsdt.core.compiler.CharOperation; | |
import org.eclipse.wst.jsdt.core.compiler.InvalidInputException; | |
import org.eclipse.wst.jsdt.internal.compiler.CompilationResult; | |
import org.eclipse.wst.jsdt.internal.compiler.ast.*; | |
import org.eclipse.wst.jsdt.internal.compiler.env.ICompilationUnit; | |
import org.eclipse.wst.jsdt.internal.compiler.impl.CompilerOptions; | |
import org.eclipse.wst.jsdt.internal.compiler.impl.ReferenceContext; | |
import org.eclipse.wst.jsdt.internal.compiler.lookup.BindingIds; | |
import org.eclipse.wst.jsdt.internal.compiler.lookup.CompilerModifiers; | |
import org.eclipse.wst.jsdt.internal.compiler.lookup.TypeIds; | |
import org.eclipse.wst.jsdt.internal.compiler.parser.diagnose.DiagnoseParser; | |
import org.eclipse.wst.jsdt.internal.compiler.problem.AbortCompilation; | |
import org.eclipse.wst.jsdt.internal.compiler.problem.ProblemReporter; | |
import org.eclipse.wst.jsdt.internal.compiler.problem.ProblemSeverities; | |
import org.eclipse.wst.jsdt.internal.compiler.util.Util; | |
public class Parser | |
implements BindingIds, ParserBasicInformation, TerminalTokens, | |
CompilerModifiers, OperatorIds, TypeIds { | |
protected ProblemReporter problemReporter; | |
public int firstToken; // handle for multiple parsing goals | |
public int lastAct; //handle for multiple parsing goals | |
protected ReferenceContext referenceContext; | |
public int currentToken; | |
private int synchronizedBlockSourceStart; | |
//error recovery management | |
protected int lastCheckPoint; | |
protected RecoveredElement currentElement; | |
public static boolean VERBOSE_RECOVERY = false; | |
protected boolean restartRecovery; | |
protected int listLength; // for recovering some incomplete list (interfaces, throws or parameters) | |
protected boolean hasError; | |
protected boolean hasReportedError; | |
public static boolean fineErrorDiagnose = true; //TODO remove the static modifier when new diagnose is ready | |
public boolean reportSyntaxErrorIsRequired = true; | |
public boolean reportOnlyOneSyntaxError = false; | |
protected int recoveredStaticInitializerStart; | |
protected int lastIgnoredToken, nextIgnoredToken; | |
protected int lastErrorEndPosition; | |
protected boolean ignoreNextOpeningBrace; | |
// assert is 1.4 feature only | |
protected long sourceLevel; | |
//internal data for the automat | |
protected final static int StackIncrement = 255; | |
protected int stateStackTop; | |
protected int[] stack = new int[StackIncrement]; | |
//scanner token | |
public Scanner scanner; | |
//ast stack | |
final static int AstStackIncrement = 100; | |
protected int astPtr; | |
protected AstNode[] astStack = | |
new AstNode[AstStackIncrement]; | |
protected int astLengthPtr; | |
protected int[] astLengthStack; | |
public CompilationUnitDeclaration compilationUnit; /*the result from parse()*/ | |
AstNode[] noAstNodes = | |
new AstNode[AstStackIncrement]; | |
//expression stack | |
final static int ExpressionStackIncrement = 100; | |
protected int expressionPtr; | |
protected Expression[] expressionStack = | |
new Expression[ExpressionStackIncrement]; | |
protected int expressionLengthPtr; | |
protected int[] expressionLengthStack; | |
Expression[] noExpressions = | |
new Expression[ExpressionStackIncrement]; | |
//identifiers stacks | |
protected int identifierPtr; | |
protected char[][] identifierStack; | |
protected int identifierLengthPtr; | |
protected int[] identifierLengthStack; | |
protected long[] identifierPositionStack; | |
//positions , dimensions , .... (what ever is int) ..... stack | |
protected int intPtr; | |
protected int[] intStack; | |
protected int endPosition; //accurate only when used ! (the start position is pushed into intStack while the end the current one) | |
protected int endStatementPosition; | |
protected int lParenPos, rParenPos; //accurate only when used ! | |
//modifiers dimensions nestedType etc....... | |
protected boolean optimizeStringLiterals = true; | |
protected int modifiers; | |
protected int modifiersSourceStart; | |
protected int nestedType, dimensions; | |
protected int[] nestedMethod; //the ptr is nestedType | |
protected int[] realBlockStack; | |
protected int realBlockPtr; | |
protected boolean diet = false; //tells the scanner to jump over some parts of the code/expressions like method bodies | |
protected int dietInt = 0; // if > 0 force the none-diet-parsing mode (even if diet if requested) [field parsing with anonymous inner classes...] | |
protected int[] variablesCounter; | |
public void foo() { | |
byte rhs[] = { | |
0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, | |
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
1, 1, 2, 2, 1, 1, 1, 1, 3, 4, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
1, 5, 1, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 4, 1, 1, 1, 1, 2, 1, 1, 1, | |
1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 1, 3, 1, 3, 1, 2, 1, 1, 1, | |
3, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 1, 3, 3, 7, 0, 0, 0, 0, 0, 2, 1, | |
1, 1, 2, 2, 4, 4, 5, 4, 4, 2, 1, 2, 3, 3, 1, 3, 3, 1, 3, 1, 4, 0, | |
2, 1, 2, 2, 4, 1, 1, 2, 5, 5, 7, 7, 7, 7, 2, 2, 3, 2, 2, 3, 1, 2, | |
1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, 3, 4, 1, 3, 4, 0, 1, 2, 1, 1, | |
1, 1, 2, 3, 4, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 5, 7, 7, 6, | |
2, 3, 3, 4, 1, 2, 2, 1, 2, 3, 2, 5, 5, 7, 9, 9, 1, 1, 1, 1, 3, 3, | |
5, 2, 3, 2, 3, 3, 3, 5, 1, 3, 4, 1, 2, 5, 2, 1, 1, 1, 1, 1, 1, 1, | |
3, 1, 1, 3, 3, 3, 3, 3, 1, 1, 5, 6, 8, 7, 2, 0, 2, 0, 1, 3, 3, 3, | |
3, 4, 3, 4, 1, 2, 3, 2, 1, 1, 2, 2, 3, 3, 4, 6, 6, 4, 4, 4, 1, 1, | |
1, 1, 2, 2, 0, 1, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 6, 6, 5, 0, 0, 1, | |
3, 3, 3, 1, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, | |
3, 1, 3, 1, 3, 1, 3, 1, 5, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, | |
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 0, 1, 0, 1, 0, 1, 0, | |
1 | |
}; | |
} | |
} |