X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=thirdparty%2Fqjson%2Fjson_parser.yy;h=2540889bae2647c133bc5daac766262ac83eba3c;hb=0094c61568bff9f9dd7bafb711f111698e683831;hp=ad8e105b73c4488ebd99209ae638ddeb1f56b7ca;hpb=c391265484ecb3baa2a00c80658c99ad65963ec6;p=apitrace diff --git a/thirdparty/qjson/json_parser.yy b/thirdparty/qjson/json_parser.yy index ad8e105..2540889 100644 --- a/thirdparty/qjson/json_parser.yy +++ b/thirdparty/qjson/json_parser.yy @@ -3,16 +3,16 @@ * Copyright (C) 2008 Flavio Castelli * * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Library General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. @@ -32,6 +32,8 @@ #include #include + #include + class JSonScanner; namespace QJson { @@ -69,6 +71,8 @@ %token QUOTMARKCLOSE 15 "close quotation mark" %token STRING 16 "string" +%token INFINITY_VAL 17 "Infinity" +%token NAN_VAL 18 "NaN" // define the initial token %start start @@ -82,12 +86,11 @@ start: data { qjsonDebug() << "json_parser - parsing finished"; }; -data: object {$$ = $1; } - | array {$$ = $1; } +data: value { $$ = $1; } | error { qCritical()<< "json_parser - syntax error found, " - << "forcing abort"; + << "forcing abort, Line" << @$.begin.line << "Column" << @$.begin.column; YYABORT; } | END; @@ -133,7 +136,7 @@ r_values: /* empty */ { $$ = QVariant (QVariantList()); } }; value: string { $$ = $1; } - | number { $$ = $1; } + | special_or_number { $$ = $1; } | object { $$ = $1; } | array { $$ = $1; } | TRUE_VAL { $$ = QVariant (true); } @@ -143,6 +146,11 @@ value: string { $$ = $1; } $$ = null_variant; }; +special_or_number: MINUS INFINITY_VAL { $$ = QVariant(QVariant::Double); $$.setValue( -std::numeric_limits::infinity() ); } + | INFINITY_VAL { $$ = QVariant(QVariant::Double); $$.setValue( std::numeric_limits::infinity() ); } + | NAN_VAL { $$ = QVariant(QVariant::Double); $$.setValue( std::numeric_limits::quiet_NaN() ); } + | number; + number: int { if ($1.toByteArray().startsWith('-')) { $$ = QVariant (QVariant::LongLong);