36 #include "json_parser.hh"
42 #line 43 "json_parser.cc"
48 # define YY_(msgid) dgettext ("bison-runtime", msgid)
52 # define YY_(msgid) msgid
57 #define YYUSE(e) ((void) (e))
61 for (bool yydebugcond_ = yydebug_; yydebugcond_; yydebugcond_ = false) \
67 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
71 *yycdebug_ << Title << ' '; \
72 yy_symbol_print_ ((Type), (Value), (Location)); \
73 *yycdebug_ << std::endl; \
77 # define YY_REDUCE_PRINT(Rule) \
80 yy_reduce_print_ (Rule); \
83 # define YY_STACK_PRINT() \
91 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
92 # define YY_REDUCE_PRINT(Rule)
93 # define YY_STACK_PRINT()
97 #define YYACCEPT goto yyacceptlab
98 #define YYABORT goto yyabortlab
99 #define YYERROR goto yyerrorlab
111 json_parser::yytnamerr_ (
const char *yystr)
115 std::string yyr =
"";
116 char const *yyp = yystr;
123 goto do_not_strip_quotes;
127 goto do_not_strip_quotes;
136 do_not_strip_quotes: ;
147 yycdebug_ (&std::cerr),
148 driver (driver_yyarg)
152 json_parser::~json_parser ()
162 json_parser::yy_symbol_value_print_ (
int yytype,
163 const semantic_type* yyvaluep,
const location_type* yylocationp)
176 json_parser::yy_symbol_print_ (
int yytype,
177 const semantic_type* yyvaluep,
const location_type* yylocationp)
179 *yycdebug_ << (yytype < yyntokens_ ?
"token" :
"nterm")
180 <<
' ' << yytname_[yytype] <<
" ("
181 << *yylocationp <<
": ";
182 yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
188 json_parser::yydestruct_ (
const char* yymsg,
189 int yytype, semantic_type* yyvaluep, location_type* yylocationp)
195 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
206 json_parser::yypop_ (
unsigned int n)
208 yystate_stack_.pop (n);
209 yysemantic_stack_.pop (n);
210 yylocation_stack_.pop (n);
243 int yychar = yyempty_;
253 int yyerrstatus_ = 0;
269 YYCDEBUG <<
"Starting parse" << std::endl;
276 yystate_stack_ = state_stack_type (0);
277 yysemantic_stack_ = semantic_stack_type (0);
278 yylocation_stack_ = location_stack_type (0);
279 yysemantic_stack_.push (yylval);
280 yylocation_stack_.push (yylloc);
284 yystate_stack_.push (yystate);
285 YYCDEBUG <<
"Entering state " << yystate << std::endl;
292 yyn = yypact_[yystate];
293 if (yyn == yypact_ninf_)
297 if (yychar == yyempty_)
299 YYCDEBUG <<
"Reading a token: ";
300 yychar = yylex (&yylval, &yylloc, driver);
305 if (yychar <= yyeof_)
307 yychar = yytoken = yyeof_;
308 YYCDEBUG <<
"Now at end of input." << std::endl;
312 yytoken = yytranslate_ (yychar);
313 YY_SYMBOL_PRINT (
"Next token is", yytoken, &yylval, &yylloc);
319 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
326 if (yyn == 0 || yyn == yytable_ninf_)
337 YY_SYMBOL_PRINT (
"Shifting", yytoken, &yylval, &yylloc);
340 if (yychar != yyeof_)
343 yysemantic_stack_.push (yylval);
344 yylocation_stack_.push (yylloc);
358 yyn = yydefact_[yystate];
375 yyval = yysemantic_stack_[yylen - 1];
377 yyval = yysemantic_stack_[0];
381 YYLLOC_DEFAULT (yyloc, slice, yylen);
383 YY_REDUCE_PRINT (yyn);
387 #line 84 "json_parser.yy"
389 driver->m_result = (yysemantic_stack_[(1) - (1)]);
390 qjsonDebug() <<
"json_parser - parsing finished";
395 #line 89 "json_parser.yy"
396 { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
400 #line 91 "json_parser.yy"
402 qCritical()<<
"json_parser - syntax error found, "
403 <<
"forcing abort, Line" << (yyloc).begin.line <<
"Column" << (yyloc).begin.column;
409 #line 98 "json_parser.yy"
410 { (yyval) = (yysemantic_stack_[(3) - (2)]); ;}
414 #line 100 "json_parser.yy"
415 { (yyval) = QVariant (QVariantMap()); ;}
419 #line 101 "json_parser.yy"
421 QVariantMap members = (yysemantic_stack_[(2) - (2)]).toMap();
422 (yysemantic_stack_[(2) - (2)]) = QVariant();
423 (yyval) = QVariant(members.unite ((yysemantic_stack_[(2) - (1)]).toMap()));
428 #line 107 "json_parser.yy"
429 { (yyval) = QVariant (QVariantMap()); ;}
433 #line 108 "json_parser.yy"
435 QVariantMap members = (yysemantic_stack_[(3) - (3)]).toMap();
436 (yysemantic_stack_[(3) - (3)]) = QVariant();
437 (yyval) = QVariant(members.unite ((yysemantic_stack_[(3) - (2)]).toMap()));
442 #line 114 "json_parser.yy"
445 pair.insert ((yysemantic_stack_[(3) - (1)]).toString(), QVariant((yysemantic_stack_[(3) - (3)])));
446 (yyval) = QVariant (pair);
451 #line 120 "json_parser.yy"
452 { (yyval) = (yysemantic_stack_[(3) - (2)]); ;}
456 #line 122 "json_parser.yy"
457 { (yyval) = QVariant (QVariantList()); ;}
461 #line 123 "json_parser.yy"
463 QVariantList members = (yysemantic_stack_[(2) - (2)]).toList();
464 (yysemantic_stack_[(2) - (2)]) = QVariant();
465 members.prepend ((yysemantic_stack_[(2) - (1)]));
466 (yyval) = QVariant(members);
471 #line 130 "json_parser.yy"
472 { (yyval) = QVariant (QVariantList()); ;}
476 #line 131 "json_parser.yy"
478 QVariantList members = (yysemantic_stack_[(3) - (3)]).toList();
479 (yysemantic_stack_[(3) - (3)]) = QVariant();
480 members.prepend ((yysemantic_stack_[(3) - (2)]));
481 (yyval) = QVariant(members);
486 #line 138 "json_parser.yy"
487 { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
491 #line 139 "json_parser.yy"
492 { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
496 #line 140 "json_parser.yy"
497 { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
501 #line 141 "json_parser.yy"
502 { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
506 #line 142 "json_parser.yy"
507 { (yyval) = QVariant (
true); ;}
511 #line 143 "json_parser.yy"
512 { (yyval) = QVariant (
false); ;}
516 #line 144 "json_parser.yy"
518 QVariant null_variant;
519 (yyval) = null_variant;
524 #line 149 "json_parser.yy"
525 { (yyval) = QVariant(QVariant::Double); (yyval).setValue( -std::numeric_limits<double>::infinity() ); ;}
529 #line 150 "json_parser.yy"
530 { (yyval) = QVariant(QVariant::Double); (yyval).setValue( std::numeric_limits<double>::infinity() ); ;}
534 #line 151 "json_parser.yy"
535 { (yyval) = QVariant(QVariant::Double); (yyval).setValue( std::numeric_limits<double>::quiet_NaN() ); ;}
539 #line 154 "json_parser.yy"
541 if ((yysemantic_stack_[(1) - (1)]).toByteArray().startsWith(
'-')) {
542 (yyval) = QVariant (QVariant::LongLong);
543 (yyval).setValue((yysemantic_stack_[(1) - (1)]).toLongLong());
546 (yyval) = QVariant (QVariant::ULongLong);
547 (yyval).setValue((yysemantic_stack_[(1) - (1)]).toULongLong());
553 #line 164 "json_parser.yy"
555 const QByteArray value = (yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray();
556 (yyval) = QVariant(QVariant::Double);
557 (yyval).setValue(value.toDouble());
562 #line 169 "json_parser.yy"
563 { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray()); ;}
567 #line 170 "json_parser.yy"
569 const QByteArray value = (yysemantic_stack_[(3) - (1)]).toByteArray() + (yysemantic_stack_[(3) - (2)]).toByteArray() + (yysemantic_stack_[(3) - (3)]).toByteArray();
570 (yyval) = QVariant (value);
575 #line 175 "json_parser.yy"
576 { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray()); ;}
580 #line 176 "json_parser.yy"
581 { (yyval) = QVariant (QByteArray(
"-") + (yysemantic_stack_[(3) - (2)]).toByteArray() + (yysemantic_stack_[(3) - (3)]).toByteArray()); ;}
585 #line 178 "json_parser.yy"
586 { (yyval) = QVariant (QByteArray(
"")); ;}
590 #line 179 "json_parser.yy"
592 (yyval) = QVariant((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray());
597 #line 183 "json_parser.yy"
599 (yyval) = QVariant(QByteArray(
".") + (yysemantic_stack_[(2) - (2)]).toByteArray());
604 #line 187 "json_parser.yy"
605 { (yyval) = QVariant((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray()); ;}
609 #line 189 "json_parser.yy"
610 { (yyval) = (yysemantic_stack_[(3) - (2)]); ;}
614 #line 191 "json_parser.yy"
615 { (yyval) = QVariant (QString(QLatin1String(
""))); ;}
619 #line 192 "json_parser.yy"
621 (yyval) = (yysemantic_stack_[(1) - (1)]);
627 #line 628 "json_parser.cc"
630 YY_SYMBOL_PRINT (
"-> $$ =", yyr1_[yyn], &yyval, &yyloc);
636 yysemantic_stack_.push (yyval);
637 yylocation_stack_.push (yyloc);
641 yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
642 if (0 <= yystate && yystate <= yylast_
643 && yycheck_[yystate] == yystate_stack_[0])
644 yystate = yytable_[yystate];
646 yystate = yydefgoto_[yyn - yyntokens_];
657 error (yylloc, yysyntax_error_ (yystate, yytoken));
660 yyerror_range[0] = yylloc;
661 if (yyerrstatus_ == 3)
666 if (yychar <= yyeof_)
669 if (yychar == yyeof_)
674 yydestruct_ (
"Error: discarding", yytoken, &yylval, &yylloc);
695 yyerror_range[0] = yylocation_stack_[yylen - 1];
700 yystate = yystate_stack_[0];
711 yyn = yypact_[yystate];
712 if (yyn != yypact_ninf_)
715 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
724 if (yystate_stack_.height () == 1)
727 yyerror_range[0] = yylocation_stack_[0];
728 yydestruct_ (
"Error: popping",
730 &yysemantic_stack_[0], &yylocation_stack_[0]);
732 yystate = yystate_stack_[0];
739 yyerror_range[1] = yylloc;
742 YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
743 yysemantic_stack_.push (yylval);
744 yylocation_stack_.push (yyloc);
747 YY_SYMBOL_PRINT (
"Shifting", yystos_[yyn],
748 &yysemantic_stack_[0], &yylocation_stack_[0]);
764 if (yychar != yyeof_ && yychar != yyempty_)
765 yydestruct_ (
"Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
770 while (yystate_stack_.height () != 1)
772 yydestruct_ (
"Cleanup: popping",
773 yystos_[yystate_stack_[0]],
774 &yysemantic_stack_[0],
775 &yylocation_stack_[0]);
784 json_parser::yysyntax_error_ (
int yystate,
int tok)
789 int yyn = yypact_[yystate];
790 if (yypact_ninf_ < yyn && yyn <= yylast_)
794 int yyxbegin = yyn < 0 ? -yyn : 0;
797 int yychecklim = yylast_ - yyn + 1;
798 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
800 for (
int x = yyxbegin; x < yyxend; ++x)
801 if (yycheck_[x + yyn] == x && x != yyterror_)
812 res =
"syntax error, unexpected ";
813 res += yytnamerr_ (yytname_[tok]);
817 for (
int x = yyxbegin; x < yyxend; ++x)
818 if (yycheck_[x + yyn] == x && x != yyterror_)
820 res += (!count++) ?
", expecting " :
" or ";
821 res += yytnamerr_ (yytname_[x]);
827 res = YY_(
"syntax error");
834 const signed char json_parser::yypact_ninf_ = -21;
836 json_parser::yypact_[] =
838 3, -21, -21, -6, 31, -10, 0, -21, -21, -21,
839 6, -21, -21, 25, -21, -21, -21, -21, -21, -21,
840 -5, -21, 22, 19, 21, 23, 24, 0, -21, 0,
841 -21, -21, 13, -21, 0, 0, 29, -21, -21, -6,
842 -21, 31, -21, 31, -21, -21, -21, -21, -21, -21,
843 -21, 19, -21, 24, -21, -21
850 json_parser::yydefact_[] =
852 0, 5, 4, 7, 13, 0, 34, 21, 22, 23,
853 39, 25, 26, 0, 2, 19, 20, 3, 18, 27,
854 28, 17, 0, 9, 0, 0, 15, 34, 24, 34,
855 32, 40, 0, 1, 34, 34, 29, 30, 6, 0,
856 8, 0, 12, 0, 14, 33, 35, 38, 36, 37,
857 31, 9, 11, 15, 10, 16
862 json_parser::yypgoto_[] =
864 -21, -21, -21, -21, -21, -20, 4, -21, -21, -18,
865 -4, -21, -21, -21, -14, -21, -3, -1, -21
870 json_parser::yydefgoto_[] =
872 -1, 13, 14, 15, 22, 40, 23, 16, 25, 44,
873 17, 18, 19, 20, 30, 36, 37, 21, 32
879 const signed char json_parser::yytable_ninf_ = -1;
881 json_parser::yytable_[] =
883 26, 27, 24, 1, 2, 34, 3, 35, 4, 28,
884 10, 29, 5, 45, 6, 46, 7, 8, 9, 10,
885 48, 49, 11, 12, 31, 33, 38, 39, 41, 42,
886 47, 54, 43, 50, 3, 55, 4, 52, 24, 53,
887 5, 35, 6, 51, 7, 8, 9, 10, 0, 0,
893 json_parser::yycheck_[] =
895 4, 11, 3, 0, 1, 10, 3, 12, 5, 19,
896 16, 11, 9, 27, 11, 29, 13, 14, 15, 16,
897 34, 35, 19, 20, 18, 0, 4, 8, 7, 6,
898 17, 51, 8, 36, 3, 53, 5, 41, 39, 43,
899 9, 12, 11, 39, 13, 14, 15, 16, -1, -1,
906 json_parser::yystos_[] =
908 0, 0, 1, 3, 5, 9, 11, 13, 14, 15,
909 16, 19, 20, 22, 23, 24, 28, 31, 32, 33,
910 34, 38, 25, 27, 38, 29, 31, 11, 19, 11,
911 35, 18, 39, 0, 10, 12, 36, 37, 4, 8,
912 26, 7, 6, 8, 30, 35, 35, 17, 35, 35,
913 37, 27, 31, 31, 26, 30
919 const unsigned short int
920 json_parser::yytoken_number_[] =
922 0, 256, 257, 1, 2, 3, 4, 5, 6, 7,
923 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
930 json_parser::yyr1_[] =
932 0, 21, 22, 23, 23, 23, 24, 25, 25, 26,
933 26, 27, 28, 29, 29, 30, 30, 31, 31, 31,
934 31, 31, 31, 31, 32, 32, 32, 32, 33, 33,
935 33, 33, 34, 34, 35, 35, 36, 37, 38, 39,
941 json_parser::yyr2_[] =
943 0, 2, 1, 1, 1, 1, 3, 0, 2, 0,
944 3, 3, 3, 0, 2, 0, 3, 1, 1, 1,
945 1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
946 2, 3, 2, 3, 0, 2, 2, 2, 3, 0,
950 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
954 const json_parser::yytname_[] =
956 "\"end of file\"",
"error",
"$undefined",
"\"{\"",
"\"}\"",
"\"[\"",
957 "\"]\"",
"\":\"",
"\",\"",
"\"-\"",
"\".\"",
"\"digit\"",
958 "\"exponential\"",
"\"true\"",
"\"false\"",
"\"null\"",
959 "\"open quotation mark\"",
"\"close quotation mark\"",
"\"string\"",
960 "\"Infinity\"",
"\"NaN\"",
"$accept",
"start",
"data",
"object",
961 "members",
"r_members",
"pair",
"array",
"values",
"r_values",
"value",
962 "special_or_number",
"number",
"int",
"digits",
"fract",
"exp",
"string",
969 const json_parser::rhs_number_type
970 json_parser::yyrhs_[] =
972 22, 0, -1, 23, -1, 31, -1, 1, -1, 0,
973 -1, 3, 25, 4, -1, -1, 27, 26, -1, -1,
974 8, 27, 26, -1, 38, 7, 31, -1, 5, 29,
975 6, -1, -1, 31, 30, -1, -1, 8, 31, 30,
976 -1, 38, -1, 32, -1, 24, -1, 28, -1, 13,
977 -1, 14, -1, 15, -1, 9, 19, -1, 19, -1,
978 20, -1, 33, -1, 34, -1, 34, 36, -1, 34,
979 37, -1, 34, 36, 37, -1, 11, 35, -1, 9,
980 11, 35, -1, -1, 11, 35, -1, 10, 35, -1,
981 12, 35, -1, 16, 39, 17, -1, -1, 18, -1
987 json_parser::yyprhs_[] =
989 0, 0, 3, 5, 7, 9, 11, 15, 16, 19,
990 20, 24, 28, 32, 33, 36, 37, 41, 43, 45,
991 47, 49, 51, 53, 55, 58, 60, 62, 64, 66,
992 69, 72, 76, 79, 83, 84, 87, 90, 93, 97,
998 json_parser::yyrline_[] =
1000 0, 84, 84, 89, 90, 96, 98, 100, 101, 107,
1001 108, 114, 120, 122, 123, 130, 131, 138, 139, 140,
1002 141, 142, 143, 144, 149, 150, 151, 152, 154, 164,
1003 169, 170, 175, 176, 178, 179, 183, 187, 189, 191,
1009 json_parser::yystack_print_ ()
1011 *yycdebug_ <<
"Stack now";
1012 for (state_stack_type::const_iterator i = yystate_stack_.begin ();
1013 i != yystate_stack_.end (); ++i)
1014 *yycdebug_ <<
' ' << *i;
1015 *yycdebug_ << std::endl;
1020 json_parser::yy_reduce_print_ (
int yyrule)
1022 unsigned int yylno = yyrline_[yyrule];
1023 int yynrhs = yyr2_[yyrule];
1025 *yycdebug_ <<
"Reducing stack by rule " << yyrule - 1
1026 <<
" (line " << yylno <<
"), ";
1028 for (
int yyi = 0; yyi < yynrhs; yyi++)
1029 YY_SYMBOL_PRINT (
" $" << yyi + 1 <<
" =",
1030 yyrhs_[yyprhs_[yyrule] + yyi],
1031 &(yysemantic_stack_[(yynrhs) - (yyi + 1)]),
1032 &(yylocation_stack_[(yynrhs) - (yyi + 1)]));
1037 json_parser::token_number_type
1038 json_parser::yytranslate_ (
int t)
1041 const token_number_type
1044 0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1045 12, 13, 14, 15, 16, 17, 18, 19, 20, 2,
1046 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1047 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1048 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1049 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1050 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1051 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1052 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1053 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1054 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1055 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1056 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1057 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1058 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1059 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1060 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1061 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1062 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1063 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1064 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1065 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1066 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1067 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1068 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1069 2, 2, 2, 2, 2, 2, 1, 2
1071 if ((
unsigned int) t <= yyuser_token_number_max_)
1072 return translate_table[t];
1074 return yyundef_token_;
1077 const int json_parser::yyeof_ = 0;
1078 const int json_parser::yylast_ = 51;
1079 const int json_parser::yynnts_ = 19;
1080 const int json_parser::yyempty_ = -2;
1081 const int json_parser::yyfinal_ = 33;
1082 const int json_parser::yyterror_ = 1;
1083 const int json_parser::yyerrcode_ = 256;
1084 const int json_parser::yyntokens_ = 21;
1086 const unsigned int json_parser::yyuser_token_number_max_ = 257;
1087 const json_parser::token_number_type json_parser::yyundef_token_ = 2;
1091 #line 196 "json_parser.yy"
1094 int yy::yylex(YYSTYPE *yylval,
yy::location *yylloc, QJson::ParserPrivate* driver)
1096 JSonScanner* scanner = driver->m_scanner;
1098 int ret = scanner->yylex(yylval, yylloc);
1100 qjsonDebug() <<
"json_parser::yylex - calling scanner yylval==|"
1101 << yylval->toByteArray() <<
"|, ret==|" << QString::number(ret) <<
"|";
1106 void yy::json_parser::error (
const yy::location& yyloc,
1107 const std::string& error)
1113 qjsonDebug() <<
"json_parser::error [line" << yyloc.
end.
line <<
"] -" << error.c_str() ;
1114 driver->setError(QString::fromLatin1(error.c_str()), yyloc.
end.
line);