package org.eclipse.jdt.internal.compiler.parser; import java.io.*; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.core.compiler.InvalidInputException; import org.eclipse.jdt.internal.compiler.CompilationResult; import org.eclipse.jdt.internal.compiler.ast.*; import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; import org.eclipse.jdt.internal.compiler.impl.ReferenceContext; import org.eclipse.jdt.internal.compiler.lookup.BindingIds; import org.eclipse.jdt.internal.compiler.lookup.CompilerModifiers; import org.eclipse.jdt.internal.compiler.lookup.TypeIds; import org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser; import org.eclipse.jdt.internal.compiler.problem.AbortCompilation; import org.eclipse.jdt.internal.compiler.problem.ProblemReporter; import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities; import org.eclipse.jdt.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 }; } }