Class 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 Detail

      • ch

        protected int ch
        The current character
      • 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 java.lang.String stringValue
      • idValue

        protected java.lang.String idValue
      • radix

        protected int radix
      • docComment

        protected java.lang.String docComment
      • count

        private int count
      • buffer

        private char[] buffer
      • escapingAllowed

        private java.util.function.Predicate<java.lang.Integer> escapingAllowed
      • prevPos

        protected int prevPos
        The position of the previous token
      • sign

        protected int sign
      • inBits

        protected boolean inBits
      • noFunc

        private java.util.function.Predicate<java.lang.Integer> noFunc
      • yesAndProcessFunc

        private java.util.function.Predicate<java.lang.Integer> yesAndProcessFunc
    • Constructor Detail

      • Scanner

        protected Scanner​(Environment env)
                   throws java.io.IOException
        main constructor. Create a scanner to scan an input stream.
        Throws:
        java.io.IOException
    • Method Detail

      • scanModuleStatement

        protected void scanModuleStatement()
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • scan

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

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

        static java.lang.String readableConstant​(int t)
      • putCh

        private void putCh​(int ch)
      • bufferString

        private java.lang.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 java.io.IOException
        Scan 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.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:
        java.io.IOException
      • scanCPRef

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

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

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

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

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

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

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

        protected void debugScan​(java.lang.String dbstr)
        Overrides:
        debugScan in class ParseBase