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

📄 qscriptlexer.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtScript module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "qscriptengine_p.h"#ifndef QT_NO_SCRIPT#include "qscriptvalueimpl_p.h"#include "qscriptcontext_p.h"#include "qscriptmember_p.h"#include "qscriptobject_p.h"#include "qscriptlexer_p.h"#include "qscriptgrammar_p.h"#include <ctype.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#define shiftWindowsLineBreak() if(current == '\r' && next1 == '\n') shift(1);QScript::Lexer::Lexer(QScriptEngine *eng)    : driver(0),      yylineno(0),      size8(128), size16(128), restrKeyword(false),      extraIdentifiers(false),      stackToken(-1), pos(0),      code(0), length(0),      bol(true),      current(0), next1(0), next2(0), next3(0),      check_reserved(true){    if (eng)        driver = QScriptEnginePrivate::get(eng);    // allocate space for read buffers    buffer8 = new char[size8];    buffer16 = new QChar[size16];    pattern = flags = 0;}QScript::Lexer::~Lexer(){    delete [] buffer8;    delete [] buffer16;}void QScript::Lexer::setCode(const QString &c, int lineno){    errmsg = QString();    yylineno = lineno;    yycolumn = 0;    restrKeyword = false;    delimited = false;    stackToken = -1;    pos = 0;    code = c.unicode();    length = c.length();    bol = true;    // read first characters    current = (length > 0) ? code[0].unicode() : 0;    next1 = (length > 1) ? code[1].unicode() : 0;    next2 = (length > 2) ? code[2].unicode() : 0;    next3 = (length > 3) ? code[3].unicode() : 0;}void QScript::Lexer::shift(uint p){    while (p--) {        ++pos;        ++yycolumn;        current = next1;        next1 = next2;        next2 = next3;        next3 = (pos + 3 < length) ? code[pos+3].unicode() : 0;    }}void QScript::Lexer::setDone(State s){    state = s;    done = true;}int QScript::Lexer::findReservedWord(const QChar *c, int size) const{    switch (size) {    case 2: {        if (c[0] == QLatin1Char('d') && c[1] == QLatin1Char('o'))            return QScriptGrammar::T_DO;        else if (c[0] == QLatin1Char('i') && c[1] == QLatin1Char('f'))            return QScriptGrammar::T_IF;        else if (c[0] == QLatin1Char('i') && c[1] == QLatin1Char('n'))            return QScriptGrammar::T_IN;    }   break;    case 3: {        if (c[0] == QLatin1Char('f') && c[1] == QLatin1Char('o') && c[2] == QLatin1Char('r'))            return QScriptGrammar::T_FOR;        else if (c[0] == QLatin1Char('n') && c[1] == QLatin1Char('e') && c[2] == QLatin1Char('w'))            return QScriptGrammar::T_NEW;        else if (c[0] == QLatin1Char('t') && c[1] == QLatin1Char('r') && c[2] == QLatin1Char('y'))            return QScriptGrammar::T_TRY;        else if (c[0] == QLatin1Char('v') && c[1] == QLatin1Char('a') && c[2] == QLatin1Char('r'))            return QScriptGrammar::T_VAR;        else if (check_reserved) {            if (c[0] == QLatin1Char('i') && c[1] == QLatin1Char('n') && c[2] == QLatin1Char('t'))                return QScriptGrammar::T_RESERVED_WORD;        }    }   break;    case 4: {        if (c[0] == QLatin1Char('c') && c[1] == QLatin1Char('a')                && c[2] == QLatin1Char('s') && c[3] == QLatin1Char('e'))            return QScriptGrammar::T_CASE;        else if (c[0] == QLatin1Char('e') && c[1] == QLatin1Char('l')                && c[2] == QLatin1Char('s') && c[3] == QLatin1Char('e'))            return QScriptGrammar::T_ELSE;        else if (c[0] == QLatin1Char('t') && c[1] == QLatin1Char('h')                && c[2] == QLatin1Char('i') && c[3] == QLatin1Char('s'))            return QScriptGrammar::T_THIS;        else if (c[0] == QLatin1Char('v') && c[1] == QLatin1Char('o')                && c[2] == QLatin1Char('i') && c[3] == QLatin1Char('d'))            return QScriptGrammar::T_VOID;        else if (c[0] == QLatin1Char('w') && c[1] == QLatin1Char('i')                && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('h'))            return QScriptGrammar::T_WITH;        else if (!extraIdentifiers && c[0] == QLatin1Char('t') && c[1] == QLatin1Char('r')                && c[2] == QLatin1Char('u') && c[3] == QLatin1Char('e'))            return QScriptGrammar::T_TRUE;        else if (!extraIdentifiers && c[0] == QLatin1Char('n') && c[1] == QLatin1Char('u')                && c[2] == QLatin1Char('l') && c[3] == QLatin1Char('l'))            return QScriptGrammar::T_NULL;        else if (check_reserved) {            if (c[0] == QLatin1Char('e') && c[1] == QLatin1Char('n')                    && c[2] == QLatin1Char('u') && c[3] == QLatin1Char('m'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('b') && c[1] == QLatin1Char('y')                    && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('e'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('l') && c[1] == QLatin1Char('o')                    && c[2] == QLatin1Char('n') && c[3] == QLatin1Char('g'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('c') && c[1] == QLatin1Char('h')                    && c[2] == QLatin1Char('a') && c[3] == QLatin1Char('r'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('g') && c[1] == QLatin1Char('o')                    && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('o'))                return QScriptGrammar::T_RESERVED_WORD;        }    }   break;    case 5: {        if (c[0] == QLatin1Char('b') && c[1] == QLatin1Char('r')                && c[2] == QLatin1Char('e') && c[3] == QLatin1Char('a')                && c[4] == QLatin1Char('k'))            return QScriptGrammar::T_BREAK;        else if (c[0] == QLatin1Char('c') && c[1] == QLatin1Char('a')                && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('c')                && c[4] == QLatin1Char('h'))            return QScriptGrammar::T_CATCH;        else if (c[0] == QLatin1Char('t') && c[1] == QLatin1Char('h')                && c[2] == QLatin1Char('r') && c[3] == QLatin1Char('o')                && c[4] == QLatin1Char('w'))            return QScriptGrammar::T_THROW;        else if (c[0] == QLatin1Char('w') && c[1] == QLatin1Char('h')                && c[2] == QLatin1Char('i') && c[3] == QLatin1Char('l')                && c[4] == QLatin1Char('e'))            return QScriptGrammar::T_WHILE;        else if (c[0] == QLatin1Char('c') && c[1] == QLatin1Char('o')                && c[2] == QLatin1Char('n') && c[3] == QLatin1Char('s')                && c[4] == QLatin1Char('t'))            return QScriptGrammar::T_CONST;        else if (!extraIdentifiers && c[0] == QLatin1Char('f') && c[1] == QLatin1Char('a')                && c[2] == QLatin1Char('l') && c[3] == QLatin1Char('s')                && c[4] == QLatin1Char('e'))            return QScriptGrammar::T_FALSE;        else if (check_reserved) {            if (c[0] == QLatin1Char('s') && c[1] == QLatin1Char('h')                    && c[2] == QLatin1Char('o') && c[3] == QLatin1Char('r')                    && c[4] == QLatin1Char('t'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('s') && c[1] == QLatin1Char('u')                    && c[2] == QLatin1Char('p') && c[3] == QLatin1Char('e')                    && c[4] == QLatin1Char('r'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('f') && c[1] == QLatin1Char('i')                    && c[2] == QLatin1Char('n') && c[3] == QLatin1Char('a')                    && c[4] == QLatin1Char('l'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('c') && c[1] == QLatin1Char('l')                    && c[2] == QLatin1Char('a') && c[3] == QLatin1Char('s')                    && c[4] == QLatin1Char('s'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('f') && c[1] == QLatin1Char('l')                    && c[2] == QLatin1Char('o') && c[3] == QLatin1Char('a')                    && c[4] == QLatin1Char('t'))                return QScriptGrammar::T_RESERVED_WORD;        }    }   break;    case 6: {        if (c[0] == QLatin1Char('d') && c[1] == QLatin1Char('e')                && c[2] == QLatin1Char('l') && c[3] == QLatin1Char('e')                && c[4] == QLatin1Char('t') && c[5] == QLatin1Char('e'))            return QScriptGrammar::T_DELETE;        else if (c[0] == QLatin1Char('r') && c[1] == QLatin1Char('e')                && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('u')                && c[4] == QLatin1Char('r') && c[5] == QLatin1Char('n'))            return QScriptGrammar::T_RETURN;        else if (c[0] == QLatin1Char('s') && c[1] == QLatin1Char('w')                && c[2] == QLatin1Char('i') && c[3] == QLatin1Char('t')                && c[4] == QLatin1Char('c') && c[5] == QLatin1Char('h'))            return QScriptGrammar::T_SWITCH;        else if (c[0] == QLatin1Char('t') && c[1] == QLatin1Char('y')                && c[2] == QLatin1Char('p') && c[3] == QLatin1Char('e')                && c[4] == QLatin1Char('o') && c[5] == QLatin1Char('f'))            return QScriptGrammar::T_TYPEOF;        else if (check_reserved) {            if (c[0] == QLatin1Char('e') && c[1] == QLatin1Char('x')                    && c[2] == QLatin1Char('p') && c[3] == QLatin1Char('o')                    && c[4] == QLatin1Char('r') && c[5] == QLatin1Char('t'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('s') && c[1] == QLatin1Char('t')                    && c[2] == QLatin1Char('a') && c[3] == QLatin1Char('t')                    && c[4] == QLatin1Char('i') && c[5] == QLatin1Char('c'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('d') && c[1] == QLatin1Char('o')                    && c[2] == QLatin1Char('u') && c[3] == QLatin1Char('b')                    && c[4] == QLatin1Char('l') && c[5] == QLatin1Char('e'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('i') && c[1] == QLatin1Char('m')                    && c[2] == QLatin1Char('p') && c[3] == QLatin1Char('o')                    && c[4] == QLatin1Char('r') && c[5] == QLatin1Char('t'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('p') && c[1] == QLatin1Char('u')                    && c[2] == QLatin1Char('b') && c[3] == QLatin1Char('l')                    && c[4] == QLatin1Char('i') && c[5] == QLatin1Char('c'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('n') && c[1] == QLatin1Char('a')                    && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('i')                    && c[4] == QLatin1Char('v') && c[5] == QLatin1Char('e'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('t') && c[1] == QLatin1Char('h')                    && c[2] == QLatin1Char('r') && c[3] == QLatin1Char('o')                    && c[4] == QLatin1Char('w') && c[5] == QLatin1Char('s'))                return QScriptGrammar::T_RESERVED_WORD;        }    }   break;    case 7: {        if (c[0] == QLatin1Char('d') && c[1] == QLatin1Char('e')                && c[2] == QLatin1Char('f') && c[3] == QLatin1Char('a')                && c[4] == QLatin1Char('u') && c[5] == QLatin1Char('l')                && c[6] == QLatin1Char('t'))            return QScriptGrammar::T_DEFAULT;        else if (c[0] == QLatin1Char('f') && c[1] == QLatin1Char('i')                && c[2] == QLatin1Char('n') && c[3] == QLatin1Char('a')                && c[4] == QLatin1Char('l') && c[5] == QLatin1Char('l')                && c[6] == QLatin1Char('y'))            return QScriptGrammar::T_FINALLY;        else if (check_reserved) {            if (c[0] == QLatin1Char('b') && c[1] == QLatin1Char('o')                    && c[2] == QLatin1Char('o') && c[3] == QLatin1Char('l')                    && c[4] == QLatin1Char('e') && c[5] == QLatin1Char('a')                    && c[6] == QLatin1Char('n'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('e') && c[1] == QLatin1Char('x')                    && c[2] == QLatin1Char('t') && c[3] == QLatin1Char('e')                    && c[4] == QLatin1Char('n') && c[5] == QLatin1Char('d')                    && c[6] == QLatin1Char('s'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('p') && c[1] == QLatin1Char('a')                    && c[2] == QLatin1Char('c') && c[3] == QLatin1Char('k')                    && c[4] == QLatin1Char('a') && c[5] == QLatin1Char('g')                    && c[6] == QLatin1Char('e'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('p') && c[1] == QLatin1Char('r')                    && c[2] == QLatin1Char('i') && c[3] == QLatin1Char('v')                    && c[4] == QLatin1Char('a') && c[5] == QLatin1Char('t')                    && c[6] == QLatin1Char('e'))                return QScriptGrammar::T_RESERVED_WORD;        }    }   break;    case 8: {        if (c[0] == QLatin1Char('c') && c[1] == QLatin1Char('o')                && c[2] == QLatin1Char('n') && c[3] == QLatin1Char('t')                && c[4] == QLatin1Char('i') && c[5] == QLatin1Char('n')                && c[6] == QLatin1Char('u') && c[7] == QLatin1Char('e'))            return QScriptGrammar::T_CONTINUE;        else if (c[0] == QLatin1Char('f') && c[1] == QLatin1Char('u')                && c[2] == QLatin1Char('n') && c[3] == QLatin1Char('c')                && c[4] == QLatin1Char('t') && c[5] == QLatin1Char('i')                && c[6] == QLatin1Char('o') && c[7] == QLatin1Char('n'))            return QScriptGrammar::T_FUNCTION;        else if (check_reserved) {            if (c[0] == QLatin1Char('a') && c[1] == QLatin1Char('b')                    && c[2] == QLatin1Char('s') && c[3] == QLatin1Char('t')                    && c[4] == QLatin1Char('r') && c[5] == QLatin1Char('a')                    && c[6] == QLatin1Char('c') && c[7] == QLatin1Char('t'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('d') && c[1] == QLatin1Char('e')                    && c[2] == QLatin1Char('b') && c[3] == QLatin1Char('u')                    && c[4] == QLatin1Char('g') && c[5] == QLatin1Char('g')                    && c[6] == QLatin1Char('e') && c[7] == QLatin1Char('r'))                return QScriptGrammar::T_RESERVED_WORD;            else if (c[0] == QLatin1Char('v') && c[1] == QLatin1Char('o')                    && c[2] == QLatin1Char('l') && c[3] == QLatin1Char('a')                    && c[4] == QLatin1Char('t') && c[5] == QLatin1Char('i')                    && c[6] == QLatin1Char('l') && c[7] == QLatin1Char('e'))                return QScriptGrammar::T_RESERVED_WORD;        }    }   break;

⌨️ 快捷键说明

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