Class Scanner
- java.lang.Object
-
- org.glassfish.rmic.tools.java.Scanner
-
- All Implemented Interfaces:
Constants,RuntimeConstants
- Direct Known Subclasses:
Parser
public class Scanner extends java.lang.Object implements Constants
A Scanner for Java tokens. Errors are reported to the environment object.The scanner keeps track of the current token, the value of the current token (if any), and the start position of the current token.
The scan() method advances the scanner to the next token in the input.
The match() method is used to quickly match opening brackets (ie: '(', '{', or '[') with their closing counter part. This is useful during error recovery.
An position consists of: ((linenr << WHEREOFFSETBITS) | offset) this means that both the line number and the exact offset into the file are encoded in each position value.
The compiler treats either "\n", "\r" or "\r\n" as the end of a line.
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.
-
-
Field Summary
Fields Modifier and Type Field Description private char[]bufferprotected intchThe current charactercharcharValueprivate intcountjava.lang.StringdocCommentdoubledoubleValueEnvironmentenvWhere errors are reportedstatic intEOFEnd of inputfloatfloatValueIdentifieridValueprotected ScannerInputReaderinInput readerintintValuestatic longLINEINCThe increment for each line.longlongValuestatic longOFFSETINCThe increment for each character.longposThe position of the current tokenlongprevPosThe position of the previous tokenintradixbooleanscanCommentsIf true, present all comments as tokens.java.lang.StringstringValueinttokenCurrent token-
Fields inherited from interface org.glassfish.rmic.tools.java.Constants
ABSTRACT, 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, WHILE
-
Fields inherited from interface org.glassfish.rmic.tools.java.RuntimeConstants
ACC_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
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedScanner(Environment env)Create a scanner to scan an input stream.Scanner(Environment env, java.io.InputStream in)Create a scanner to scan an input stream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.lang.StringbufferString()private static voiddefineKeyword(int val)Define a keyword.longgetEndPos()The ending position of the current tokenIdentifierTokengetIdToken()If the current token is IDENT, return the identifier occurrence.private voidgrowBuffer()private static booleanlooksLikeZero(java.lang.String token)voidmatch(int open, int close)Scan to a matching '}', ']' or ')'.private voidputc(int ch)longscan()Scan the next token.private voidscanCharacter()Scan a character.private java.lang.StringscanDocComment()Scan a doc comment.private intscanEscapeChar()Scan an escape character.private voidscanIdentifier()Scan an Identifier.private voidscanNumber()Scan a number.private voidscanReal()Scan a float.private voidscanString()Scan a string.private voidskipComment()Scan a comment.protected voiduseInputStream(java.io.InputStream in)Setup input from the given input stream, and scan the first token from it.protected longxscan()
-
-
-
Field Detail
-
OFFSETINC
public static final long OFFSETINC
The increment for each character.- See Also:
- Constant Field Values
-
LINEINC
public static final long LINEINC
The increment for each line.- See Also:
- Constant Field Values
-
EOF
public static final int EOF
End of input- See Also:
- Constant Field Values
-
env
public Environment env
Where errors are reported
-
in
protected ScannerInputReader in
Input reader
-
scanComments
public boolean scanComments
If true, present all comments as tokens. Contents are not saved, but positions are recorded accurately, so the comment can be recovered from the text. Line terminations are also returned as comment tokens, and may be distinguished by their start and end positions, which are equal (meaning, these tokens contain no chars).
-
token
public int token
Current token
-
pos
public long pos
The position of the current token
-
prevPos
public long prevPos
The position of the previous token
-
ch
protected int ch
The current character
-
charValue
public char charValue
-
intValue
public int intValue
-
longValue
public long longValue
-
floatValue
public float floatValue
-
doubleValue
public double doubleValue
-
stringValue
public java.lang.String stringValue
-
idValue
public Identifier idValue
-
radix
public int radix
-
docComment
public java.lang.String docComment
-
count
private int count
-
buffer
private char[] buffer
-
-
Constructor Detail
-
Scanner
public Scanner(Environment env, java.io.InputStream in) throws java.io.IOException
Create a scanner to scan an input stream.- Throws:
java.io.IOException
-
Scanner
protected Scanner(Environment env)
Create a scanner to scan an input stream.
-
-
Method Detail
-
growBuffer
private void growBuffer()
-
putc
private void putc(int ch)
-
bufferString
private java.lang.String bufferString()
-
useInputStream
protected void useInputStream(java.io.InputStream in) throws java.io.IOExceptionSetup input from the given input stream, and scan the first token from it.- Throws:
java.io.IOException
-
defineKeyword
private static void defineKeyword(int val)
Define a keyword.
-
skipComment
private void skipComment() throws java.io.IOExceptionScan a comment. This method should be called once the initial /, * and the next character have been read.- Throws:
java.io.IOException
-
scanDocComment
private java.lang.String scanDocComment() throws java.io.IOExceptionScan a doc comment. This method should be called once the initial /, * and * have been read. It gathers the content of the comment (witout leading spaces and '*'s) in the string buffer.- Throws:
java.io.IOException
-
scanNumber
private void scanNumber() throws java.io.IOExceptionScan a number. The first digit of the number should be the current character. We may be scanning hex, decimal, or octal at this point- Throws:
java.io.IOException
-
scanReal
private void scanReal() throws java.io.IOExceptionScan a float. We are either looking at the decimal, or we have already seen it and put it into the buffer. We haven't seen an exponent. Scan a float. Should be called with the current character is either the 'e', 'E' or '.'- Throws:
java.io.IOException
-
looksLikeZero
private static boolean looksLikeZero(java.lang.String token)
-
scanEscapeChar
private int scanEscapeChar() throws java.io.IOExceptionScan an escape character.- Returns:
- the character or -1 if it escaped an end-of-line.
- Throws:
java.io.IOException
-
scanString
private void scanString() throws java.io.IOExceptionScan a string. The current character should be the opening " of the string.- Throws:
java.io.IOException
-
scanCharacter
private void scanCharacter() throws java.io.IOExceptionScan a character. The current character should be the opening ' of the character constant.- Throws:
java.io.IOException
-
scanIdentifier
private void scanIdentifier() throws java.io.IOExceptionScan an Identifier. The current character should be the first character of the identifier.- Throws:
java.io.IOException
-
getEndPos
public long getEndPos()
The ending position of the current token
-
getIdToken
public IdentifierToken getIdToken()
If the current token is IDENT, return the identifier occurrence. It will be freshly allocated.
-
scan
public long scan() throws java.io.IOExceptionScan the next token.- Returns:
- the position of the previous token.
- Throws:
java.io.IOException
-
xscan
protected long xscan() throws java.io.IOException- Throws:
java.io.IOException
-
match
public void match(int open, int close) throws java.io.IOExceptionScan to a matching '}', ']' or ')'. The current token must be a '{', '[' or '(';- Throws:
java.io.IOException
-
-