public class Parser extends Scanner implements ParserActions, Constants
This class implements an operator precedence parser. Errors are reported to the Environment object, if the error can't be resolved immediately, a SyntaxError exception is thrown.
Error recovery is implemented by catching SyntaxError exceptions and discarding input tokens until an input token is reached that is possibly a legal continuation.
The parse tree that is constructed represents the input exactly (no rewrites to simpler forms). This is important if the resulting tree is to be used for code formatting in a programming environment. Currently only documentation comments are retained.
The parsing algorithm does NOT use any type information. Changes in the type system do not affect the structure of the parse tree. This restriction does introduce an ambiguity an expression of the form: (e1) e2 is assumed to be a cast if e2 does not start with an operator. That means that (a) - b is interpreted as subtract b from a and not cast negative b to type a. However, if a is a simple type (byte, int, ...) then it is assumed to be a cast.
WARNING: The contents of this source file are not part of any supported API. Code that depends on them does so at its own risk: they are subject to change or removal without notice.
| Modifier and Type | Field and Description |
|---|---|
protected int |
argIndex |
protected Scanner |
scanner
Usually
this.scanner == (Scanner)this. |
ch, charValue, docComment, doubleValue, env, EOF, floatValue, idValue, in, intValue, LINEINC, longValue, OFFSETINC, pos, prevPos, radix, scanComments, stringValue, tokenABSTRACT, ACCM_CLASS, ACCM_FIELD, ACCM_INNERCLASS, ACCM_MEMBER, ACCM_METHOD, ADD, AND, ARRAY, ARRAYACCESS, ASGADD, ASGBITAND, ASGBITOR, ASGBITXOR, ASGDIV, ASGLSHIFT, ASGMUL, ASGREM, ASGRSHIFT, ASGSUB, ASGURSHIFT, ASSIGN, ATT_ALL, ATT_ALLCLASSES, ATT_CODE, BITAND, BITNOT, BITOR, BITXOR, BOOLEAN, BOOLEANVAL, BREAK, BYTE, BYTEVAL, CASE, CAST, CATCH, CHAR, CHARVAL, CLASS, COLON, COMMA, COMMENT, COND, CONST, CONTINUE, CONVERT, CS_BINARY, CS_CHECKED, CS_COMPILED, CS_NOTFOUND, CS_PARSED, CS_SOURCE, CS_UNDECIDED, CS_UNDEFINED, CT_BLOCK, CT_BRANCH_FALSE, CT_BRANCH_TRUE, CT_CASE, CT_FIKT_METHOD, CT_FIKT_RET, CT_FIRST_KIND, CT_LAST_KIND, CT_METHOD, CT_SWITH_WO_DEF, DEC, DECLARATION, DEFAULT, DIV, DO, DOUBLE, DOUBLEVAL, ELSE, EQ, ERROR, EXPR, EXPRESSION, EXTENDS, F_COVDATA, F_COVERAGE, F_DEBUG_LINES, F_DEBUG_SOURCE, F_DEBUG_VARS, F_DEPENDENCIES, F_DEPRECATION, F_DUMP, F_ERRORSREPORTED, F_OPT, F_OPT_INTERCLASS, F_PRINT_DEPENDENCIES, F_STRICTDEFAULT, F_VERBOSE, F_VERSION12, F_WARNINGS, FALSE, FIELD, FINAL, FINALLY, FLOAT, FLOATVAL, FOR, GE, GOTO, GT, idAppend, idClass, idClassInit, idClone, idCode, idConstantValue, idCoverageTable, idDeprecated, idDocumentation, IDENT, idExceptions, idFinallyReturnValue, idGetClass, idInit, idInnerClasses, idJavaIoSerializable, idJavaLang, idJavaLangClass, idJavaLangCloneable, idJavaLangError, idJavaLangException, idJavaLangObject, idJavaLangRuntimeException, idJavaLangString, idJavaLangStringBuffer, idJavaLangThrowable, idLength, idLineNumberTable, idLocalVariableTable, idNew, idNull, idSourceFile, idStar, idSuper, idSynthetic, idThis, idToString, idTYPE, idValueOf, IF, IMPLEMENTS, IMPORT, INC, INLINEMETHOD, INLINENEWINSTANCE, INLINERETURN, INSTANCEOF, INT, INTERFACE, INTVAL, LBRACE, LE, LENGTH, LONG, LONGVAL, LPAREN, LSHIFT, LSQBRACKET, LT, M_ABSTRACT, M_ANONYMOUS, M_DEPRECATED, M_FINAL, M_INLINEABLE, M_INTERFACE, M_LOCAL, M_NATIVE, M_PRIVATE, M_PROTECTED, M_PUBLIC, M_STATIC, M_STRICTFP, M_SYNCHRONIZED, M_SYNTHETIC, M_TRANSIENT, M_VOLATILE, MAXFILESIZE, MAXLINENUMBER, METHOD, MM_CLASS, MM_FIELD, MM_MEMBER, MM_METHOD, MUL, NATIVE, NE, NEG, NEW, NEWARRAY, NEWFROMNAME, NEWINSTANCE, NOT, NULL, opNames, opPrecedence, OR, PACKAGE, paraDeprecated, POS, POSTDEC, POSTINC, PREDEC, prefixAccess, prefixArray, prefixClass, prefixLoc, prefixThis, prefixVal, PREINC, PRIVATE, PROTECTED, PUBLIC, QUESTIONMARK, RBRACE, REM, RETURN, RPAREN, RSHIFT, RSQBRACKET, SEMICOLON, SHORT, SHORTVAL, SIG_INNERCLASS, SIGC_INNERCLASS, STAT, STATIC, STRICTFP, STRINGVAL, SUB, SUPER, SWITCH, SYNCHRONIZED, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_DOUBLE, TC_ERROR, TC_FLOAT, TC_INT, TC_LONG, TC_METHOD, TC_NULL, TC_SHORT, TC_VOID, THIS, THROW, THROWS, TM_ARRAY, TM_BOOLEAN, TM_BYTE, TM_CHAR, TM_CLASS, TM_DOUBLE, TM_ERROR, TM_FLOAT, TM_INT, TM_INT32, TM_INTEGER, TM_LONG, TM_METHOD, TM_NULL, TM_NUM32, TM_NUM64, TM_NUMBER, TM_REAL, TM_REFERENCE, TM_SHORT, TM_VOID, tracing, TRANSIENT, TRUE, TRY, TYPE, URSHIFT, VARDECLARATION, VOID, VOLATILE, WHEREOFFSETBITS, WHILEACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_CLASS, CONSTANT_DOUBLE, CONSTANT_FIELD, CONSTANT_FLOAT, CONSTANT_INTEGER, CONSTANT_INTERFACEMETHOD, CONSTANT_INVOKEDYNAMIC, CONSTANT_LONG, CONSTANT_METHOD, CONSTANT_METHODHANDLE, CONSTANT_METHODTYPE, CONSTANT_NAMEANDTYPE, CONSTANT_STRING, CONSTANT_UNICODE, CONSTANT_UTF8, JAVA_DEFAULT_MINOR_VERSION, JAVA_DEFAULT_VERSION, JAVA_MAGIC, JAVA_MAX_SUPPORTED_MINOR_VERSION, JAVA_MAX_SUPPORTED_VERSION, JAVA_MIN_SUPPORTED_VERSION, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_breakpoint, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dead, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokedynamic, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_label, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_try, opc_wide, opcLengths, opcNames, SIG_ARRAY, SIG_BOOLEAN, SIG_BYTE, SIG_CHAR, SIG_CLASS, SIG_DOUBLE, SIG_ENDCLASS, SIG_ENDMETHOD, SIG_FLOAT, SIG_INT, SIG_LONG, SIG_METHOD, SIG_PACKAGE, SIG_SHORT, SIG_VOID, SIGC_ARRAY, SIGC_BOOLEAN, SIGC_BYTE, SIGC_CHAR, SIGC_CLASS, SIGC_DOUBLE, SIGC_ENDCLASS, SIGC_ENDMETHOD, SIGC_FLOAT, SIGC_INT, SIGC_LONG, SIGC_METHOD, SIGC_PACKAGE, SIGC_SHORT, SIGC_VOID, T_BOOLEAN, T_BYTE, T_CHAR, T_CLASS, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT| Modifier | Constructor and Description |
|---|---|
protected |
Parser(Environment env,
java.io.InputStream in)
Create a parser
|
protected |
Parser(Scanner scanner)
Create a parser, given a scanner.
|
|
Parser(Scanner scanner,
ParserActions actions)
Create a parser, given a scanner and the semantic callback.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
addArgument(Node n) |
protected void |
beginClass(long off,
java.lang.String doc,
int mod,
Identifier nm,
Identifier sup,
Identifier[] impl)
Deprecated.
Use the version with the IdentifierToken arguments.
|
ClassDefinition |
beginClass(long off,
java.lang.String doc,
int mod,
IdentifierToken nm,
IdentifierToken sup,
IdentifierToken[] impl)
Deprecated.
|
void |
defineField(long where,
ClassDefinition c,
java.lang.String doc,
int mod,
Type t,
IdentifierToken nm,
IdentifierToken[] args,
IdentifierToken[] exp,
Node val)
Deprecated.
|
protected void |
defineField(long where,
java.lang.String doc,
int mod,
Type t,
Identifier nm,
Identifier[] args,
Identifier[] exp,
Node val)
Deprecated.
Use the version with the IdentifierToken arguments.
|
void |
endClass(long off,
ClassDefinition c)
Deprecated.
|
protected void |
endClass(long off,
Identifier nm)
Deprecated.
Use the version with the IdentifierToken arguments.
|
protected void |
expect(int t)
Expect a token, return its value, scan the next token or
throw an exception.
|
protected Expression[] |
exprArgs(int index) |
protected ClassDefinition |
getCurrentClass()
Report the current class under construction.
|
protected void |
importClass(long off,
Identifier nm)
Deprecated.
Use the version with the IdentifierToken arguments.
|
void |
importClass(long off,
IdentifierToken nm)
Deprecated.
|
protected void |
importPackage(long off,
Identifier nm)
Deprecated.
Use the version with the IdentifierToken arguments.
|
void |
importPackage(long off,
IdentifierToken nm)
Deprecated.
|
void |
match(int open,
int close)
Scan to a matching '}', ']' or ')'.
|
protected void |
packageDeclaration(long off,
Identifier nm)
Deprecated.
|
void |
packageDeclaration(long off,
IdentifierToken nm)
Deprecated.
|
protected Type |
parseArrayBrackets(Type t)
Parse the tail of a type expression, which might be array brackets.
|
protected Expression |
parseBinaryExpression(Expression e)
Given a left-hand term, parse an operator and right-hand term.
|
protected Statement |
parseBlockStatement() |
protected void |
parseClass()
Parse a top-level class or interface declaration.
|
protected ClassDefinition |
parseClassBody(IdentifierToken nm,
int mod,
int ctx,
java.lang.String doc,
java.util.Vector<IdentifierToken> ext,
java.util.Vector<IdentifierToken> impl,
long p)
Parse the body of a class or interface declaration,
starting at the left brace.
|
protected Statement |
parseDeclaration(long p,
int mod,
Expression type)
Parse declaration, called after the type expression
has been parsed and the current token is IDENT.
|
protected Expression |
parseExpression()
Parse an expression.
|
protected void |
parseField()
Parse a field.
|
void |
parseFile()
Parse an Java file.
|
protected Identifier |
parseIdentifier(boolean star)
Deprecated.
|
protected void |
parseInheritance(java.util.Vector<IdentifierToken> ext,
java.util.Vector<IdentifierToken> impl) |
protected Statement |
parseLocalClass(int mod)
Parse a block-local class or interface declaration.
|
protected Expression |
parseMethodExpression(Expression e,
Identifier id)
Parse a method invocation.
|
protected int |
parseModifiers(int mask)
Parse a possibly-empty sequence of modifier keywords.
|
protected IdentifierToken |
parseName(boolean star)
Parse an identifier.
|
protected ClassDefinition |
parseNamedClass(int mod,
int ctx,
java.lang.String doc)
Parse a named class or interface declaration,
starting at "class" or "interface".
|
protected Expression |
parseNewInstanceExpression(long p,
Expression outerArg,
Expression type)
Parse a new instance expression.
|
protected Statement |
parseStatement()
Parse a statement.
|
protected Expression |
parseTerm()
Parse a primary expression.
|
protected Type |
parseType()
Parse a type expression, this results in a Type.
|
protected Expression |
parseTypeExpression()
Parse a type expression.
|
protected void |
recoverField(ClassDefinition newClass)
Recover after a syntax error in a field.
|
protected void |
recoverFile()
Recover after a syntax error in the file.
|
protected boolean |
recoverStatement()
Recover after a syntax error in a statement.
|
long |
scan()
Scan the next token.
|
protected Statement[] |
statArgs(int index) |
protected void |
topLevelExpression(Expression e)
Check if an expression is a legal toplevel expression.
|
getEndPos, getIdToken, useInputStream, xscanprotected int argIndex
protected Scanner scanner
this.scanner == (Scanner)this.
However, a delegate scanner can produce tokens for this parser,
in which case (Scanner)this is unused,
except for this.token and this.pos
instance variables which are filled from the real scanner
by this.scan() and the constructor.protected Parser(Environment env, java.io.InputStream in) throws java.io.IOException
java.io.IOExceptionprotected Parser(Scanner scanner) throws java.io.IOException
java.io.IOExceptionpublic Parser(Scanner scanner, ParserActions actions) throws java.io.IOException
java.io.IOException@Deprecated
public void packageDeclaration(long off,
IdentifierToken nm)
packageDeclaration in interface ParserActions@Deprecated
protected void packageDeclaration(long off,
Identifier nm)
@Deprecated
public void importClass(long off,
IdentifierToken nm)
importClass in interface ParserActions@Deprecated
protected void importClass(long off,
Identifier nm)
@Deprecated
public void importPackage(long off,
IdentifierToken nm)
importPackage in interface ParserActions@Deprecated
protected void importPackage(long off,
Identifier nm)
@Deprecated public ClassDefinition beginClass(long off, java.lang.String doc, int mod, IdentifierToken nm, IdentifierToken sup, IdentifierToken[] impl)
beginClass in interface ParserActions@Deprecated
protected void beginClass(long off,
java.lang.String doc,
int mod,
Identifier nm,
Identifier sup,
Identifier[] impl)
protected ClassDefinition getCurrentClass()
@Deprecated
public void endClass(long off,
ClassDefinition c)
endClass in interface ParserActionsc - a cookie returned by the corresponding beginClass call@Deprecated
protected void endClass(long off,
Identifier nm)
@Deprecated
public void defineField(long where,
ClassDefinition c,
java.lang.String doc,
int mod,
Type t,
IdentifierToken nm,
IdentifierToken[] args,
IdentifierToken[] exp,
Node val)
defineField in interface ParserActionsc - a cookie returned by the corresponding beginClass call@Deprecated
protected void defineField(long where,
java.lang.String doc,
int mod,
Type t,
Identifier nm,
Identifier[] args,
Identifier[] exp,
Node val)
protected final void addArgument(Node n)
protected final Expression[] exprArgs(int index)
protected final Statement[] statArgs(int index)
protected void expect(int t)
throws SyntaxError,
java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Expression parseTypeExpression() throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Expression parseMethodExpression(Expression e, Identifier id) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Expression parseNewInstanceExpression(long p, Expression outerArg, Expression type) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Expression parseTerm() throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Expression parseExpression() throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Expression parseBinaryExpression(Expression e) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected boolean recoverStatement()
throws SyntaxError,
java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Statement parseDeclaration(long p, int mod, Expression type) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected void topLevelExpression(Expression e)
protected Statement parseStatement() throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Statement parseBlockStatement() throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected IdentifierToken parseName(boolean star) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOException@Deprecated protected Identifier parseIdentifier(boolean star) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionparseName(boolean)protected Type parseType() throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Type parseArrayBrackets(Type t) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected int parseModifiers(int mask)
throws java.io.IOException
java.io.IOExceptionprotected void parseField()
throws SyntaxError,
java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected void recoverField(ClassDefinition newClass) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected void parseClass()
throws SyntaxError,
java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected Statement parseLocalClass(int mod) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected ClassDefinition parseNamedClass(int mod, int ctx, java.lang.String doc) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected void parseInheritance(java.util.Vector<IdentifierToken> ext, java.util.Vector<IdentifierToken> impl) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected ClassDefinition parseClassBody(IdentifierToken nm, int mod, int ctx, java.lang.String doc, java.util.Vector<IdentifierToken> ext, java.util.Vector<IdentifierToken> impl, long p) throws SyntaxError, java.io.IOException
SyntaxErrorjava.io.IOExceptionprotected void recoverFile()
throws java.io.IOException
java.io.IOExceptionpublic void parseFile()
public long scan()
throws java.io.IOException
ScannerCopyright © 2016. All Rights Reserved.