Class Scanner

java.lang.Object
org.openjdk.asmtools.jasm.ParseBase
org.openjdk.asmtools.jasm.Scanner

public class Scanner extends ParseBase
A Scanner for Jasm 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.

The compiler treats either "\n", "\r" or "\r\n" as the end of a line.

  • Field Details

    • in

      protected Environment in
      Input stream
    • ch

      protected int ch
      The current character
    • token

      protected JasmTokens.Token token
      Current token
    • pos

      protected int pos
      The position of the current token
    • charValue

      protected char charValue
    • intValue

      protected int intValue
    • longValue

      protected long longValue
    • floatValue

      protected float floatValue
    • doubleValue

      protected double doubleValue
    • stringValue

      protected String stringValue
    • idValue

      protected String idValue
    • radix

      protected int radix
    • docComment

      protected String docComment
    • count

      private int count
    • buffer

      private char[] buffer
    • escapingAllowed

      private Predicate<Integer> escapingAllowed
    • prevPos

      protected int prevPos
      The position of the previous token
    • sign

      protected int sign
    • inBits

      protected boolean inBits
    • noFunc

      private Predicate<Integer> noFunc
    • yesAndProcessFunc

      private Predicate<Integer> yesAndProcessFunc
  • Constructor Details

  • Method Details

    • scanModuleStatement

      protected void scanModuleStatement() throws IOException
      Throws:
      IOException
    • scan

      protected void scan() throws IOException
      scan Scan the next token.
      Throws:
      IOException
    • checkTokenIdent

      protected final boolean checkTokenIdent()
      Check the token may be identifier
    • readableConstant

      static String readableConstant(int t)
    • expect

      protected final void expect(JasmTokens.Token t) throws Scanner.SyntaxError, IOException
      Expects a token, scans the next token or throws an exception.
      Throws:
      Scanner.SyntaxError
      IOException
    • check

      protected final void check(JasmTokens.Token t) throws Scanner.SyntaxError, IOException
      Checks a token, throws an exception if not the same
      Throws:
      Scanner.SyntaxError
      IOException
    • putCh

      private void putCh(int ch)
    • bufferString

      private String bufferString()
    • isUCDigit

      public static boolean isUCDigit(int ch)
      Returns true if the character is a unicode digit.
      Parameters:
      ch - the character to be checked
    • isUCLetter

      public static boolean isUCLetter(int ch)
      Returns true if the character is a Unicode letter.
      Parameters:
      ch - the character to be checked
    • skipComment

      private void skipComment() throws IOException
      Scan a comment. This method should be called once the initial /, * and the next character have been read.
      Throws:
      IOException
    • scanDocComment

      private String scanDocComment() throws IOException
      Scan a doc comment. This method should be called once the initial /, * and * have been read. It gathers the content of the comment (without leading spaces and '*'s) in the string buffer.
      Throws:
      IOException
    • scanCPRef

      private void scanCPRef() throws IOException
      Scan a decimal at this point
      Throws:
      IOException
    • scanNumber

      private void scanNumber() throws IOException
      Scan 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:
      IOException
    • scanReal

      private void scanReal() throws IOException
      Scan 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:
      IOException
    • scanEscapeChar

      private int scanEscapeChar() throws IOException
      Scan an escape character.
      Returns:
      the character or '\\'
      Throws:
      IOException
    • scanString

      private void scanString() throws IOException
      Scan a string. The current character should be the opening " of the string.
      Throws:
      IOException
    • scanIdentifier

      private void scanIdentifier(char[] prefix) throws IOException
      Scan an Identifier. The current character should be the first character of the identifier.
      Throws:
      IOException
    • xscan

      protected final void xscan() throws IOException
      Throws:
      IOException
    • debugScan

      protected void debugScan(String dbstr)
      Overrides:
      debugScan in class ParseBase