diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /util/lexgen/tokenizer.cpp | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'util/lexgen/tokenizer.cpp')
-rw-r--r-- | util/lexgen/tokenizer.cpp | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/util/lexgen/tokenizer.cpp b/util/lexgen/tokenizer.cpp new file mode 100644 index 0000000..401fa92 --- /dev/null +++ b/util/lexgen/tokenizer.cpp @@ -0,0 +1,237 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the utils of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +// auto generated. DO NOT EDIT. +class RegExpTokenizer +{ +public: + RegExpTokenizer(const QString &inp); + + inline QChar next() { + return (pos < input.length()) ? input.at(pos++) : QChar(); + } + int lex(); + + QString input; + int pos; + int lexemStart; + int lexemLength; +}; + +RegExpTokenizer::RegExpTokenizer(const QString &inp) +{ + input = inp; + pos = 0; + lexemStart = 0; + lexemLength = 0; +} + + +int RegExpTokenizer::lex() +{ + lexemStart = pos; + lexemLength = 0; + int lastAcceptingPos = -1; + int token = -1; + QChar ch; + + // initial state + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 33) + goto state_1; + if (ch.unicode() == 34) + goto state_2; + if (ch.unicode() >= 35 && ch.unicode() <= 39) + goto state_1; + if (ch.unicode() == 40) { + token = RE2NFA::TOK_LPAREN; + goto found; + } + if (ch.unicode() == 41) { + token = RE2NFA::TOK_RPAREN; + goto found; + } + if (ch.unicode() == 42) { + token = RE2NFA::TOK_STAR; + goto found; + } + if (ch.unicode() == 43) { + token = RE2NFA::TOK_PLUS; + goto found; + } + if (ch.unicode() == 44) { + token = RE2NFA::TOK_COMMA; + goto found; + } + if (ch.unicode() == 45) + goto state_1; + if (ch.unicode() == 46) { + token = RE2NFA::TOK_DOT; + goto found; + } + if (ch.unicode() >= 47 && ch.unicode() <= 62) + goto state_1; + if (ch.unicode() == 63) { + token = RE2NFA::TOK_QUESTION; + goto found; + } + if (ch.unicode() >= 64 && ch.unicode() <= 90) + goto state_1; + if (ch.unicode() == 91) + goto state_10; + if (ch.unicode() == 92) + goto state_11; + if (ch.unicode() >= 93 && ch.unicode() <= 122) + goto state_1; + if (ch.unicode() == 123) { + token = RE2NFA::TOK_LBRACE; + goto found; + } + if (ch.unicode() == 124) { + token = RE2NFA::TOK_OR; + goto found; + } + if (ch.unicode() == 125) { + token = RE2NFA::TOK_RBRACE; + goto found; + } + if (ch.unicode() >= 126) + goto state_1; + goto out; + state_1: + lastAcceptingPos = pos; + token = RE2NFA::TOK_STRING; + goto out; + state_2: + lastAcceptingPos = pos; + token = RE2NFA::TOK_STRING; + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 33) + goto state_15; + if (ch.unicode() == 34) + goto state_16; + if (ch.unicode() >= 35) + goto state_15; + goto out; + state_10: + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 91) + goto state_17; + if (ch.unicode() == 92) + goto state_18; + if (ch.unicode() == 93) + goto state_19; + if (ch.unicode() >= 94) + goto state_17; + goto out; + state_11: + lastAcceptingPos = pos; + token = RE2NFA::TOK_STRING; + ch = next(); + if (ch.unicode() >= 1) + goto state_20; + goto out; + state_15: + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 33) + goto state_15; + if (ch.unicode() == 34) + goto state_16; + if (ch.unicode() >= 35) + goto state_15; + goto out; + state_16: + lastAcceptingPos = pos; + token = RE2NFA::TOK_QUOTED_STRING; + goto out; + state_17: + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 91) + goto state_17; + if (ch.unicode() == 92) + goto state_18; + if (ch.unicode() == 93) + goto state_19; + if (ch.unicode() >= 94) + goto state_17; + goto out; + state_18: + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 91) + goto state_17; + if (ch.unicode() == 92) + goto state_18; + if (ch.unicode() == 93) + goto state_21; + if (ch.unicode() >= 94) + goto state_17; + goto out; + state_19: + lastAcceptingPos = pos; + token = RE2NFA::TOK_SEQUENCE; + goto out; + state_20: + lastAcceptingPos = pos; + token = RE2NFA::TOK_STRING; + goto out; + state_21: + lastAcceptingPos = pos; + token = RE2NFA::TOK_SEQUENCE; + ch = next(); + if (ch.unicode() >= 1 && ch.unicode() <= 91) + goto state_17; + if (ch.unicode() == 92) + goto state_18; + if (ch.unicode() == 93) + goto state_19; + if (ch.unicode() >= 94) + goto state_17; + goto out; + found: + lastAcceptingPos = pos; + + out: + if (lastAcceptingPos != -1) { + lexemLength = lastAcceptingPos - lexemStart; + pos = lastAcceptingPos; + } + return token; +} + |