diff options
Diffstat (limited to 'src/3rdparty/qjson/src/jsonparser.cpp')
-rw-r--r-- | src/3rdparty/qjson/src/jsonparser.cpp | 527 |
1 files changed, 0 insertions, 527 deletions
diff --git a/src/3rdparty/qjson/src/jsonparser.cpp b/src/3rdparty/qjson/src/jsonparser.cpp deleted file mode 100644 index 899103f9..00000000 --- a/src/3rdparty/qjson/src/jsonparser.cpp +++ /dev/null @@ -1,527 +0,0 @@ -// This file was generated by qlalr - DO NOT EDIT! -#ifndef JSONPARSER_CPP -#define JSONPARSER_CPP - -class JsonGrammar -{ -public: - enum VariousConstants { - EOF_SYMBOL = 0, - ERROR = 12, - T_COLON = 7, - T_COMMA = 8, - T_FALSE = 9, - T_LCURLYBRACKET = 3, - T_LSQUAREBRACKET = 5, - T_NULL = 11, - T_NUMBER = 2, - T_RCURLYBRACKET = 4, - T_RSQUAREBRACKET = 6, - T_STRING = 1, - T_TRUE = 10, - - ACCEPT_STATE = 12, - RULE_COUNT = 17, - STATE_COUNT = 27, - TERMINAL_COUNT = 13, - NON_TERMINAL_COUNT = 7, - - GOTO_INDEX_OFFSET = 27, - GOTO_INFO_OFFSET = 37, - GOTO_CHECK_OFFSET = 37 - }; - - static const char *const spell []; - static const short lhs []; - static const short rhs []; - -#ifndef QLALR_NO_JSONGRAMMAR_DEBUG_INFO - static const int rule_index []; - static const int rule_info []; -#endif // QLALR_NO_JSONGRAMMAR_DEBUG_INFO - - static const short goto_default []; - static const short action_default []; - static const short action_index []; - static const short action_info []; - static const short action_check []; - - static inline int nt_action (int state, int nt) - { - const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt; - if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt) - return goto_default [nt]; - - return action_info [GOTO_INFO_OFFSET + yyn]; - } - - static inline int t_action (int state, int token) - { - const int yyn = action_index [state] + token; - - if (yyn < 0 || action_check [yyn] != token) - return - action_default [state]; - - return action_info [yyn]; - } -}; - - -const char *const JsonGrammar::spell [] = { - "end of file", "string", "number", "{", "}", "[", "]", ":", ",", "false", - "true", "null", "error", -#ifndef QLALR_NO_JSONGRAMMAR_DEBUG_INFO -"Root", "Value", "Object", "Members", "Array", "Values", "$accept" -#endif // QLALR_NO_JSONGRAMMAR_DEBUG_INFO -}; - -const short JsonGrammar::lhs [] = { - 13, 15, 16, 16, 16, 14, 14, 14, 14, 14, - 14, 14, 17, 18, 18, 18, 19}; - -const short JsonGrammar::rhs [] = { - 1, 3, 3, 5, 0, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 3, 0, 2}; - - -#ifndef QLALR_NO_JSONGRAMMAR_DEBUG_INFO -const int JsonGrammar::rule_info [] = { - 13, 14 - , 15, 3, 16, 4 - , 16, 1, 7, 14 - , 16, 16, 8, 1, 7, 14 - , 16 - , 14, 9 - , 14, 10 - , 14, 11 - , 14, 15 - , 14, 17 - , 14, 2 - , 14, 1 - , 17, 5, 18, 6 - , 18, 14 - , 18, 18, 8, 14 - , 18 - , 19, 13, 0}; - -const int JsonGrammar::rule_index [] = { - 0, 2, 6, 10, 16, 17, 19, 21, 23, 25, - 27, 29, 31, 35, 37, 41, 42}; -#endif // QLALR_NO_JSONGRAMMAR_DEBUG_INFO - -const short JsonGrammar::action_default [] = { - 0, 10, 9, 0, 6, 5, 16, 8, 11, 12, - 7, 1, 17, 0, 0, 0, 2, 0, 0, 4, - 0, 3, 14, 0, 0, 13, 15}; - -const short JsonGrammar::goto_default [] = { - 3, 11, 2, 13, 1, 23, 0}; - -const short JsonGrammar::action_index [] = { - 24, -13, -13, 12, -13, -1, 24, -13, -13, -13, - -13, -13, -13, 1, -5, 2, -13, -6, 24, -13, - 24, -13, -13, -2, 24, -13, -13, - - -7, -7, -7, -7, -7, -7, 1, -7, -7, -7, - -7, -7, -7, -7, -7, -7, -7, -7, 0, -7, - -1, -7, -7, -7, 5, -7, -7}; - -const short JsonGrammar::action_info [] = { - 14, 18, 20, 17, 25, 16, 24, 0, 0, 15, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 8, 5, 0, 6, - 0, 0, 0, 4, 10, 7, 0, - - 21, 19, 22, 0, 0, 0, 26, 0, 0, 0, - 0, 0}; - -const short JsonGrammar::action_check [] = { - 1, 7, 7, 1, 6, 4, 8, -1, -1, 8, - -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, 2, 3, -1, 5, - -1, -1, -1, 9, 10, 11, -1, - - 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, - -1, -1}; - - -#line 29 "json.g" - -/**************************************************************************** -** -** Copyright (c) 2010 Girish Ramakrishnan <girish@forwardbias.in> -** Copyright (c) 2011 Denis Dzyubenko <shadone@gmail.com> -** -** Use, modification and distribution is allowed without limitation, -** warranty, liability or support of any kind. -** -****************************************************************************/ - -#ifndef JSONPARSER_P_H -#define JSONPARSER_P_H - -#include <QString> -#include <QVariant> -#include <QVector> - -class JsonLexer -{ -public: - JsonLexer(const QString &string); - ~JsonLexer(); - - int lex(); - QVariant symbol() const { return m_symbol; } - int lineNumber() const { return m_lineNumber; } - int pos() const { return m_pos; } - -private: - int parseNumber(); - int parseString(); - int parseKeyword(); - - QString m_strdata; - int m_lineNumber; - int m_pos; - QVariant m_symbol; -}; - -class JsonParser : protected JsonGrammar -{ -public: - JsonParser(); - ~JsonParser(); - - bool parse(JsonLexer *lex); - QVariant result() const { return m_result; } - QString errorMessage() const { return QString::fromLatin1("%1 at line %2 pos %3").arg(m_errorMessage).arg(m_errorLineNumber).arg(m_errorPos); } - -private: - void reallocateStack(); - - inline QVariant &sym(int index) - { return m_symStack[m_tos + index - 1]; } - inline QVariantMap &map(int index) - { return m_mapStack[m_tos + index - 1]; } - inline QVariantList &list(int index) - { return m_listStack[m_tos + index - 1]; } - - int m_tos; - QVector<int> m_stateStack; - QVector<QVariant> m_symStack; - QVector<QVariantMap> m_mapStack; - QVector<QVariantList> m_listStack; - QString m_errorMessage; - int m_errorLineNumber; - int m_errorPos; - QVariant m_result; -}; - -#endif // JSONPARSER_P_H - -#line 103 "json.g" - -/**************************************************************************** -** -** Copyright (c) 2010 Girish Ramakrishnan <girish@forwardbias.in> -** Copyright (c) 2011 Denis Dzyubenko <shadone@gmail.com> -** -** Use, modification and distribution is allowed without limitation, -** warranty, liability or support of any kind. -** -****************************************************************************/ - -#include <QtDebug> - -#define L1C(c) ushort(uchar(c)) - -JsonLexer::JsonLexer(const QString &str) - : m_strdata(str), m_lineNumber(1), m_pos(0) -{ -} - - - -JsonLexer::~JsonLexer() -{ -} - -int JsonLexer::parseString() -{ - bool esc = false; - ++m_pos; // skip initial " - int start = m_pos; - - const ushort *uc = m_strdata.utf16(); - const int remaining = m_strdata.length() - m_pos; - int i; - for (i = 0; i < remaining; ++i) { - const ushort c = uc[m_pos + i]; - if (c == L1C('\"')) { - m_symbol = QString((QChar *)uc + m_pos, i); - m_pos += i; - ++m_pos; // eat quote - return JsonGrammar::T_STRING; - } else if (c == L1C('\\')) { - ++m_pos; // eat backslash - esc = true; - break; - } - } - - QString str; - if (i) { - str.resize(i); - memcpy((char *)str.utf16(), uc + start, i * 2); - m_pos += i; - } - - for (; m_pos < m_strdata.length(); ++m_pos) { - const ushort c = uc[m_pos]; - if (esc) { - if (c == L1C('b')) str += QLatin1Char('\b'); - else if (c == L1C('f')) str += QLatin1Char('\f'); - else if (c == L1C('n')) str += QLatin1Char('\n'); - else if (c == L1C('r')) str += QLatin1Char('\r'); - else if (c == L1C('t')) str += QLatin1Char('\t'); - else if (c == L1C('\\')) str += QLatin1Char('\\'); - else if (c == L1C('\"')) str += QLatin1Char('\"'); - else if (c == L1C('u') && m_pos+4<m_strdata.length()-1) { - // FIXME: This code is wrong - QString u1 = m_strdata.mid(m_pos+1, 2); // TODO: QStringRef please - QString u2 = m_strdata.mid(m_pos+3, 2); - bool ok; - str += QChar(u2.toInt(&ok, 16), u1.toInt(&ok, 16)); - m_pos += 4; - } else { - str += QChar(c); - } - esc = false; - } else if (c == L1C('\\')) { - esc = true; - } else if (c == L1C('\"')) { - m_symbol = str; - ++m_pos; - return JsonGrammar::T_STRING; - } else { - str += QChar(c); - } - } - return JsonGrammar::ERROR; -} - -int JsonLexer::parseNumber() -{ - int start = m_pos; - bool isDouble = false; - const ushort *uc = m_strdata.utf16(); - const int l = m_strdata.length(); - const int negative = (uc[m_pos] == L1C('-') ? ++m_pos, -1 : (uc[m_pos] == L1C('+') ? ++m_pos, 1 : 1)); - qlonglong value = 0; - for (; m_pos < l; ++m_pos) { - const ushort &c = uc[m_pos]; - if (c == L1C('+') || c == L1C('-')) - continue; - if (c == L1C('.') || c == L1C('e') || c == L1C('E')) { - isDouble = true; - continue; - } - if (c >= L1C('0') && c <= L1C('9')) { - if (!isDouble) { - value *= 10; - value += c - L1C('0'); - } - continue; - } - break; - } - if (!isDouble) { - m_symbol = value * negative; - } else { - QString number = QString::fromRawData((QChar *)uc+start, m_pos-start); - m_symbol = number.toDouble(); - } - return JsonGrammar::T_NUMBER; -} - -int JsonLexer::parseKeyword() -{ - int start = m_pos; - for (; m_pos < m_strdata.length(); ++m_pos) { - const ushort c = m_strdata.at(m_pos).unicode(); - if (c >= L1C('a') && c <= L1C('z')) - continue; - break; - } - const ushort *k = (const ushort *)m_strdata.constData() + start; - const int l = m_pos-start; - if (l == 4) { - static const ushort true_data[] = { 't', 'r', 'u', 'e' }; - static const ushort null_data[] = { 'n', 'u', 'l', 'l' }; - if (!memcmp(k, true_data, 4)) - return JsonGrammar::T_TRUE; - if (!memcmp(k, null_data, 4)) - return JsonGrammar::T_NULL; - } else if (l == 5) { - static const ushort false_data[] = { 'f', 'a', 'l', 's', 'e' }; - if (!memcmp(k, false_data, 5)) - return JsonGrammar::T_FALSE; - } - return JsonGrammar::ERROR; -} - -int JsonLexer::lex() -{ - m_symbol.clear(); - - const ushort *uc = m_strdata.utf16(); - const int len = m_strdata.length(); - while (m_pos < len) { - const ushort c = uc[m_pos]; - switch (c) { - case L1C('['): ++m_pos; return JsonGrammar::T_LSQUAREBRACKET; - case L1C(']'): ++m_pos; return JsonGrammar::T_RSQUAREBRACKET; - case L1C('{'): ++m_pos; return JsonGrammar::T_LCURLYBRACKET; - case L1C('}'): ++m_pos; return JsonGrammar::T_RCURLYBRACKET; - case L1C(':'): ++m_pos; return JsonGrammar::T_COLON; - case L1C(','): ++m_pos; return JsonGrammar::T_COMMA; - case L1C(' '): case L1C('\r'): case L1C('\t'): ++m_pos; break; - case L1C('\n'): ++m_pos; ++m_lineNumber; break; - case L1C('"'): return parseString(); - default: - if (c == L1C('+') || c == L1C('-') || (c >= L1C('0') && c <= L1C('9'))) { - return parseNumber(); - } - if (c >= L1C('a') && c <= L1C('z')) { - return parseKeyword(); - } - return JsonGrammar::ERROR; - } - } - return JsonGrammar::EOF_SYMBOL; -} -#undef L1C - -JsonParser::JsonParser() -{ -} - -JsonParser::~JsonParser() -{ -} - -void JsonParser::reallocateStack() -{ - int size = m_stateStack.size(); - if (size == 0) - size = 128; - else - size <<= 1; - - m_symStack.resize(size); - m_mapStack.resize(size); - m_listStack.resize(size); - m_stateStack.resize(size); -} - -bool JsonParser::parse(JsonLexer *lexer) -{ - const int INITIAL_STATE = 0; - int yytoken = -1; - reallocateStack(); - m_tos = 0; - m_stateStack[++m_tos] = INITIAL_STATE; - - while (true) { - const int state = m_stateStack[m_tos]; - if (yytoken == -1 && -TERMINAL_COUNT != action_index[state]) { - yytoken = lexer->lex(); - } - int act = t_action(state, yytoken); - if (act == ACCEPT_STATE) - return true; - else if (act > 0) { - if (++m_tos == m_stateStack.size()) - reallocateStack(); - m_stateStack[m_tos] = act; - m_symStack[m_tos] = lexer->symbol(); - yytoken = -1; - } else if (act < 0) { - int r = -act-1; - m_tos -= rhs[r]; - act = m_stateStack.at(m_tos++); - switch (r) { - -#line 337 "json.g" - case 0: { m_result = sym(1); break; } -#line 340 "json.g" - case 1: { sym(1) = map(2); break; } -#line 343 "json.g" - case 2: { QVariantMap m; m.insert(sym(1).toString(), sym(3)); map(1) = m; break; } -#line 346 "json.g" - case 3: { map(1).insert(sym(3).toString(), sym(5)); break; } -#line 349 "json.g" - case 4: { map(1) = QVariantMap(); break; } -#line 352 "json.g" - case 5: { sym(1) = QVariant(false); break; } -#line 355 "json.g" - case 6: { sym(1) = QVariant(true); break; } -#line 364 "json.g" - case 12: { sym(1) = list(2); break; } -#line 367 "json.g" - case 13: { QVariantList l; l.append(sym(1)); list(1) = l; break; } -#line 370 "json.g" - case 14: { list(1).append(sym(3)); break; } -#line 373 "json.g" - case 15: { list(1) = QVariantList(); break; } -#line 375 "json.g" - - } // switch - m_stateStack[m_tos] = nt_action(act, lhs[r] - TERMINAL_COUNT); - } else { - int ers = state; - int shifts = 0; - int reduces = 0; - int expected_tokens[3]; - for (int tk = 0; tk < TERMINAL_COUNT; ++tk) { - int k = t_action(ers, tk); - - if (! k) - continue; - else if (k < 0) - ++reduces; - else if (spell[tk]) { - if (shifts < 3) - expected_tokens[shifts] = tk; - ++shifts; - } - } - - m_errorLineNumber = lexer->lineNumber(); - m_errorPos = lexer->pos(); - m_errorMessage.clear(); - if (shifts && shifts < 3) { - bool first = true; - - for (int s = 0; s < shifts; ++s) { - if (first) - m_errorMessage += QLatin1String("Expected "); - else - m_errorMessage += QLatin1String(", "); - - first = false; - m_errorMessage += QLatin1String("'"); - m_errorMessage += QLatin1String(spell[expected_tokens[s]]); - m_errorMessage += QLatin1String("'"); - } - } - return false; - } - } - - return false; -} - - -#endif // JSONPARSER_CPP - |