⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tokenstream.java

📁 java中比较著名的js引擎当属mozilla开源的rhino
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                    if (matchChar('=')) {                        return Token.LE;                    } else {                        return Token.LT;                    }                }            case '>':                if (matchChar('>')) {                    if (matchChar('>')) {                        if (matchChar('=')) {                            return Token.ASSIGN_URSH;                        } else {                            return Token.URSH;                        }                    } else {                        if (matchChar('=')) {                            return Token.ASSIGN_RSH;                        } else {                            return Token.RSH;                        }                    }                } else {                    if (matchChar('=')) {                        return Token.GE;                    } else {                        return Token.GT;                    }                }            case '*':                if (matchChar('=')) {                    return Token.ASSIGN_MUL;                } else {                    return Token.MUL;                }            case '/':                // is it a // comment?                if (matchChar('/')) {                    skipLine();                    continue retry;                }                if (matchChar('*')) {                    boolean lookForSlash = false;                    for (;;) {                        c = getChar();                        if (c == EOF_CHAR) {                            parser.addError("msg.unterminated.comment");                            return Token.ERROR;                        } else if (c == '*') {                            lookForSlash = true;                        } else if (c == '/') {                            if (lookForSlash) {                                continue retry;                            }                        } else {                            lookForSlash = false;                        }                    }                }                if (matchChar('=')) {                    return Token.ASSIGN_DIV;                } else {                    return Token.DIV;                }            case '%':                if (matchChar('=')) {                    return Token.ASSIGN_MOD;                } else {                    return Token.MOD;                }            case '~':                return Token.BITNOT;            case '+':                if (matchChar('=')) {                    return Token.ASSIGN_ADD;                } else if (matchChar('+')) {                    return Token.INC;                } else {                    return Token.ADD;                }            case '-':                if (matchChar('=')) {                    c = Token.ASSIGN_SUB;                } else if (matchChar('-')) {                    if (!dirtyLine) {                        // treat HTML end-comment after possible whitespace                        // after line start as comment-utill-eol                        if (matchChar('>')) {                            skipLine();                            continue retry;                        }                    }                    c = Token.DEC;                } else {                    c = Token.SUB;                }                dirtyLine = true;                return c;            default:                parser.addError("msg.illegal.character");                return Token.ERROR;            }        }    }    private static boolean isAlpha(int c)    {        // Use 'Z' < 'a'        if (c <= 'Z') {            return 'A' <= c;        } else {            return 'a' <= c && c <= 'z';        }    }    static boolean isDigit(int c)    {        return '0' <= c && c <= '9';    }    /* As defined in ECMA.  jsscan.c uses C isspace() (which allows     * \v, I think.)  note that code in getChar() implicitly accepts     * '\r' == \u000D as well.     */    static boolean isJSSpace(int c)    {        if (c <= 127) {            return c == 0x20 || c == 0x9 || c == 0xC || c == 0xB;        } else {            return c == 0xA0                || Character.getType((char)c) == Character.SPACE_SEPARATOR;        }    }    private static boolean isJSFormatChar(int c)    {        return c > 127 && Character.getType((char)c) == Character.FORMAT;    }    /**     * Parser calls the method when it gets / or /= in literal context.     */    void readRegExp(int startToken)        throws IOException    {        stringBufferTop = 0;        if (startToken == Token.ASSIGN_DIV) {            // Miss-scanned /=            addToString('=');        } else {            if (startToken != Token.DIV) Kit.codeBug();        }        int c;        while ((c = getChar()) != '/') {            if (c == '\n' || c == EOF_CHAR) {                ungetChar(c);                throw parser.reportError("msg.unterminated.re.lit");            }            if (c == '\\') {                addToString(c);                c = getChar();            }            addToString(c);        }        int reEnd = stringBufferTop;        while (true) {            if (matchChar('g'))                addToString('g');            else if (matchChar('i'))                addToString('i');            else if (matchChar('m'))                addToString('m');            else                break;        }        if (isAlpha(peekChar())) {            throw parser.reportError("msg.invalid.re.flag");        }        this.string = new String(stringBuffer, 0, reEnd);        this.regExpFlags = new String(stringBuffer, reEnd,                                      stringBufferTop - reEnd);    }    boolean isXMLAttribute()    {        return xmlIsAttribute;    }    int getFirstXMLToken() throws IOException    {        xmlOpenTagsCount = 0;        xmlIsAttribute = false;        xmlIsTagContent = false;        ungetChar('<');        return getNextXMLToken();    }    int getNextXMLToken() throws IOException    {        stringBufferTop = 0; // remember the XML        for (int c = getChar(); c != EOF_CHAR; c = getChar()) {            if (xmlIsTagContent) {                switch (c) {                case '>':                    addToString(c);                    xmlIsTagContent = false;                    xmlIsAttribute = false;                    break;                case '/':                    addToString(c);                    if (peekChar() == '>') {                        c = getChar();                        addToString(c);                        xmlIsTagContent = false;                        xmlOpenTagsCount--;                    }                    break;                case '{':                    ungetChar(c);                    this.string = getStringFromBuffer();                    return Token.XML;                case '\'':                case '"':                    addToString(c);                    if (!readQuotedString(c)) return Token.ERROR;                    break;                case '=':                    addToString(c);                    xmlIsAttribute = true;                    break;                case ' ':                case '\t':                case '\r':                case '\n':                    addToString(c);                    break;                default:                    addToString(c);                    xmlIsAttribute = false;                    break;                }                if (!xmlIsTagContent && xmlOpenTagsCount == 0) {                    this.string = getStringFromBuffer();                    return Token.XMLEND;                }            } else {                switch (c) {                case '<':                    addToString(c);                    c = peekChar();                    switch (c) {                    case '!':                        c = getChar(); // Skip !                        addToString(c);                        c = peekChar();                        switch (c) {                        case '-':                            c = getChar(); // Skip -                            addToString(c);                            c = getChar();                            if (c == '-') {                                addToString(c);                                if(!readXmlComment()) return Token.ERROR;                            } else {                                // throw away the string in progress                                stringBufferTop = 0;                                this.string = null;                                parser.addError("msg.XML.bad.form");                                return Token.ERROR;                            }                            break;                        case '[':                            c = getChar(); // Skip [                            addToString(c);                            if (getChar() == 'C' &&                                getChar() == 'D' &&                                getChar() == 'A' &&                                getChar() == 'T' &&                                getChar() == 'A' &&                                getChar() == '[')                            {                                addToString('C');                                addToString('D');                                addToString('A');                                addToString('T');                                addToString('A');                                addToString('[');                                if (!readCDATA()) return Token.ERROR;                            } else {                                // throw away the string in progress                                stringBufferTop = 0;                                this.string = null;                                parser.addError("msg.XML.bad.form");                                return Token.ERROR;                            }                            break;                        default:                            if(!readEntity()) return Token.ERROR;                            break;                        }                        break;                    case '?':                        c = getChar(); // Skip ?                        addToString(c);                        if (!readPI()) return Token.ERROR;                        break;                    case '/':                        // End tag                        c = getChar(); // Skip /                        addToString(c);                        if (xmlOpenTagsCount == 0) {                            // throw away the string in progress                            stringBufferTop = 0;                            this.string = null;                            parser.addError("msg.XML.bad.form");                            return Token.ERROR;                        }                        xmlIsTagContent = true;                        xmlOpenTagsCount--;                        break;                    default:                        // Start tag                        xmlIsTagContent = true;                        xmlOpenTagsCount++;                        break;                    }                    break;                case '{':                    ungetChar(c);                    this.string = getStringFromBuffer();                    return Token.XML;                default:                    addToString(c);                    break;                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -