Expressions: Changed precedence of ?, :, EQ, NEQ, LT, GT, GTE, and LTE.

This commit is contained in:
Eivind Kvedalen 2016-03-14 22:34:22 +01:00 committed by wmayer
parent 6ee243c2fa
commit 9d617ce4c8
5 changed files with 459 additions and 449 deletions

View File

@ -383,7 +383,7 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 37
/* YYLAST -- Last index in YYTABLE. */
#define YYLAST 195
#define YYLAST 171
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 39
@ -410,9 +410,9 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 36, 2, 2, 2, 2,
31, 32, 24, 23, 33, 2, 35, 25, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 27, 34,
2, 2, 2, 26, 2, 2, 2, 2, 2, 2,
31, 32, 26, 25, 33, 2, 35, 27, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 24, 34,
2, 2, 2, 23, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 37, 2, 38, 30, 2, 2, 2, 2, 2,
@ -440,13 +440,13 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
0, 67, 67, 68, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 87, 88,
89, 92, 93, 94, 95, 98, 99, 100, 103, 104,
105, 106, 107, 108, 111, 112, 113, 114, 115, 116,
117, 120, 124, 129, 134, 142, 143, 147, 148, 149,
150, 151, 152, 153, 154, 155, 158, 159, 160, 161,
162, 163, 164, 165, 166, 167, 170, 171, 174, 175
0, 68, 68, 69, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 88, 89,
90, 93, 94, 95, 96, 99, 100, 101, 104, 105,
106, 107, 108, 109, 112, 113, 114, 115, 116, 117,
118, 121, 125, 130, 135, 143, 144, 148, 149, 150,
151, 152, 153, 154, 155, 156, 159, 160, 161, 162,
163, 164, 165, 166, 167, 168, 171, 172, 175, 176
};
#endif
@ -458,7 +458,7 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "FUNC", "ONE", "NUM", "IDENTIFIER",
"UNIT", "INTEGER", "CONSTANT", "CELLADDRESS", "EQ", "NEQ", "LT", "GT",
"GTE", "LTE", "STRING", "MINUSSIGN", "PROPERTY_REF", "DOCUMENT",
"OBJECT", "EXPONENT", "'+'", "'*'", "'/'", "'?'", "':'", "NEG", "POS",
"OBJECT", "EXPONENT", "'?'", "':'", "'+'", "'*'", "'/'", "NEG", "POS",
"'^'", "'('", "')'", "','", "';'", "'.'", "'#'", "'['", "']'", "$accept",
"input", "exp", "basic_num", "num", "args", "cond", "unit_exp",
"identifier", "integer", "path", "subpath", "document", "object", YY_NULLPTR
@ -472,7 +472,7 @@ static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 43, 42, 47, 63, 58, 278, 279,
275, 276, 277, 63, 58, 43, 42, 47, 278, 279,
94, 40, 41, 44, 59, 46, 35, 91, 93
};
# endif
@ -491,19 +491,19 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
56, 72, -12, -85, 32, -85, -85, 1, -21, -29,
72, 72, 56, 22, 135, 1, -85, 29, -9, -85,
-85, 20, 64, -85, 72, 135, 38, 1, 104, 80,
-12, 1, -9, 61, 61, 93, 68, -85, 72, 72,
72, 72, 72, 72, 72, 72, 72, 56, 72, -85,
72, 1, 1, 15, 126, 24, -85, 72, 72, 82,
48, -85, -85, -85, -85, 75, -85, 77, 81, -85,
-85, 135, 135, 135, 135, 135, 135, 155, 155, 161,
161, 82, -85, 115, 82, 82, 23, -85, 59, -85,
-85, 67, -85, -85, 135, 135, 104, 178, 85, 87,
89, 72, -85, 24, -85, 96, 97, 99, 104, 104,
104, 61, -85, 106, 109, 117, -85, -85, -85, 104,
104, 104, -85, -85, -85
56, 74, -11, -85, -22, -85, -85, 1, -14, -29,
74, 74, 56, 22, 124, 1, -85, 5, 4, -85,
-85, -9, 20, -85, 74, 124, 137, 1, 96, 139,
-11, 1, 4, 26, 26, 82, 136, -85, 74, 74,
74, 74, 74, 74, 74, 74, 74, 56, 74, -85,
74, 1, 1, 15, 115, 66, -85, 74, 74, 39,
53, -85, -85, -85, -85, 32, -85, 37, 65, -85,
-85, 124, 124, 124, 124, 124, 124, 41, 41, 26,
26, 39, -85, 104, 39, 39, 81, -85, 89, -85,
-85, 69, -85, -85, 124, 124, 96, 140, 75, 76,
88, 74, -85, 66, -85, 95, 103, 117, 96, 96,
96, 134, -85, 92, 118, 123, -85, -85, -85, 96,
96, 96, -85, -85, -85
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@ -529,8 +529,8 @@ static const yytype_uint8 yydefact[] =
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
-85, -85, 0, -35, -85, -85, -85, 2, -85, 57,
-51, -84, -85, 101
-85, -85, 0, -35, -85, -85, -85, 2, -85, 68,
-51, -84, -85, 113
};
/* YYDEFGOTO[NTERM-NUM]. */
@ -546,49 +546,45 @@ static const yytype_int8 yydefgoto[] =
static const yytype_int8 yytable[] =
{
14, 25, 18, 90, 93, 30, -68, -66, 5, 32,
33, 34, 104, 27, -69, 51, 52, 49, 87, 23,
3, 53, 37, 6, 116, 117, 118, 23, 3, 59,
88, 6, 31, 86, 92, 122, 123, 124, 71, 72,
33, 34, 104, 28, -67, 29, 27, 49, 87, 23,
3, -69, 37, 6, 116, 117, 118, 54, 50, 59,
51, 52, 31, 86, 53, 122, 123, 124, 71, 72,
73, 74, 75, 76, 77, 78, 79, 80, 82, 81,
83, 102, 112, 84, 85, 50, 54, 94, 95, 1,
2, 3, 4, 5, 6, 7, 8, 28, -67, 29,
56, 57, 58, 9, 10, 1, 23, 3, 4, 11,
6, 7, 8, 96, 64, 97, 65, 12, 66, 9,
10, 48, 51, 52, 28, 11, 29, 67, 53, 55,
70, 111, 103, 24, 38, 39, 40, 41, 42, 43,
60, 44, 53, 98, 61, 99, 45, 46, 47, 100,
108, 62, 109, 48, 110, 69, 38, 39, 40, 41,
42, 43, 88, 44, 113, 114, 8, 115, 45, 46,
47, 119, 101, 89, 120, 48, 38, 39, 40, 41,
42, 43, 121, 44, 107, 91, 0, 0, 45, 46,
47, 0, 0, 0, 0, 48, 38, 39, 40, 41,
42, 43, 38, 39, 40, 41, 42, 43, 0, 46,
47, 0, 64, 0, 105, 48, 66, 0, 0, 0,
0, 48, 0, 0, 0, 106
83, 102, 112, 84, 85, 55, 48, 94, 95, 1,
2, 3, 4, 5, 6, 7, 8, 46, 47, 53,
98, 48, 88, 9, 10, 99, 92, 1, 23, 3,
4, 11, 6, 7, 8, 23, 3, 12, 96, 6,
97, 9, 10, 38, 39, 40, 41, 42, 43, 11,
44, 111, 60, 100, 103, 24, 61, 45, 46, 47,
108, 109, 48, 62, 69, 38, 39, 40, 41, 42,
43, 88, 44, 110, 28, 8, 29, 119, 101, 45,
46, 47, 89, 113, 48, 38, 39, 40, 41, 42,
43, 114, 44, 64, 64, 65, 105, 66, 66, 45,
46, 47, 44, 120, 48, 115, 67, 106, 121, 45,
46, 47, 51, 52, 48, 107, 53, 91, 70, 56,
57, 58
};
static const yytype_int8 yycheck[] =
static const yytype_uint8 yycheck[] =
{
0, 1, 0, 54, 55, 4, 35, 36, 7, 7,
10, 11, 96, 25, 35, 24, 25, 15, 53, 4,
5, 30, 0, 8, 108, 109, 110, 4, 5, 27,
6, 8, 31, 18, 10, 119, 120, 121, 38, 39,
10, 11, 96, 35, 36, 37, 27, 15, 53, 4,
5, 35, 0, 8, 108, 109, 110, 36, 23, 27,
26, 27, 31, 18, 30, 119, 120, 121, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 47,
50, 86, 103, 51, 52, 26, 36, 57, 58, 3,
4, 5, 6, 7, 8, 9, 10, 35, 36, 37,
32, 33, 34, 17, 18, 3, 4, 5, 6, 23,
8, 9, 10, 35, 4, 37, 6, 31, 8, 17,
18, 30, 24, 25, 35, 23, 37, 17, 30, 35,
32, 101, 35, 31, 11, 12, 13, 14, 15, 16,
6, 18, 30, 38, 10, 38, 23, 24, 25, 38,
35, 17, 35, 30, 35, 32, 11, 12, 13, 14,
15, 16, 6, 18, 38, 38, 10, 38, 23, 24,
25, 35, 27, 17, 35, 30, 11, 12, 13, 14,
15, 16, 35, 18, 97, 54, -1, -1, 23, 24,
25, -1, -1, -1, -1, 30, 11, 12, 13, 14,
15, 16, 11, 12, 13, 14, 15, 16, -1, 24,
25, -1, 4, -1, 6, 30, 8, -1, -1, -1,
-1, 30, -1, -1, -1, 17
50, 86, 103, 51, 52, 35, 30, 57, 58, 3,
4, 5, 6, 7, 8, 9, 10, 26, 27, 30,
38, 30, 6, 17, 18, 38, 10, 3, 4, 5,
6, 25, 8, 9, 10, 4, 5, 31, 35, 8,
37, 17, 18, 11, 12, 13, 14, 15, 16, 25,
18, 101, 6, 38, 35, 31, 10, 25, 26, 27,
35, 35, 30, 17, 32, 11, 12, 13, 14, 15,
16, 6, 18, 35, 35, 10, 37, 35, 24, 25,
26, 27, 17, 38, 30, 11, 12, 13, 14, 15,
16, 38, 18, 4, 4, 6, 6, 8, 8, 25,
26, 27, 18, 35, 30, 38, 17, 17, 35, 25,
26, 27, 26, 27, 30, 97, 30, 54, 32, 32,
33, 34
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@ -596,16 +592,16 @@ static const yytype_int8 yycheck[] =
static const yytype_uint8 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 9, 10, 17,
18, 23, 31, 40, 41, 42, 43, 45, 46, 47,
49, 51, 52, 4, 31, 41, 44, 25, 35, 37,
18, 25, 31, 40, 41, 42, 43, 45, 46, 47,
49, 51, 52, 4, 31, 41, 44, 27, 35, 37,
4, 31, 46, 41, 41, 41, 46, 0, 11, 12,
13, 14, 15, 16, 18, 23, 24, 25, 30, 46,
26, 24, 25, 30, 36, 35, 32, 33, 34, 46,
13, 14, 15, 16, 18, 25, 26, 27, 30, 46,
23, 26, 27, 30, 36, 35, 32, 33, 34, 46,
6, 10, 17, 50, 4, 6, 8, 17, 48, 32,
32, 41, 41, 41, 41, 41, 41, 41, 41, 41,
41, 46, 41, 41, 46, 46, 18, 42, 6, 17,
49, 52, 10, 49, 41, 41, 35, 37, 38, 38,
38, 27, 42, 35, 50, 6, 17, 48, 35, 35,
38, 24, 42, 35, 50, 6, 17, 48, 35, 35,
35, 41, 49, 38, 38, 38, 50, 50, 50, 35,
35, 35, 50, 50, 50
};
@ -1055,27 +1051,27 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
switch (yytype)
{
case 41: /* exp */
#line 60 "ExpressionParser.y" /* yacc.c:1257 */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
#line 1061 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1057 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
case 44: /* args */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
#line 62 "ExpressionParser.y" /* yacc.c:1257 */
{ std::vector<Expression*>::const_iterator i = ((*yyvaluep).arguments).begin(); while (i != ((*yyvaluep).arguments).end()) { delete *i; ++i; } }
#line 1067 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1063 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
case 45: /* cond */
#line 60 "ExpressionParser.y" /* yacc.c:1257 */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
#line 1073 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1069 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
case 46: /* unit_exp */
#line 60 "ExpressionParser.y" /* yacc.c:1257 */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
#line 1079 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1075 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
@ -1337,431 +1333,431 @@ yyreduce:
switch (yyn)
{
case 2:
#line 67 "ExpressionParser.y" /* yacc.c:1646 */
#line 68 "ExpressionParser.y" /* yacc.c:1646 */
{ ScanResult = (yyvsp[0].expr); valueExpression = true; }
#line 1343 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1339 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 3:
#line 68 "ExpressionParser.y" /* yacc.c:1646 */
#line 69 "ExpressionParser.y" /* yacc.c:1646 */
{ ScanResult = (yyvsp[0].expr); unitExpression = true; }
#line 1349 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1345 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 4:
#line 71 "ExpressionParser.y" /* yacc.c:1646 */
#line 72 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[0].expr); }
#line 1355 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1351 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 5:
#line 72 "ExpressionParser.y" /* yacc.c:1646 */
#line 73 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new StringExpression(DocumentObject, (yyvsp[0].string)); }
#line 1361 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1357 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 6:
#line 73 "ExpressionParser.y" /* yacc.c:1646 */
#line 74 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new VariableExpression(DocumentObject, (yyvsp[0].path)); }
#line 1367 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1363 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 7:
#line 74 "ExpressionParser.y" /* yacc.c:1646 */
#line 75 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::NEG, new NumberExpression(DocumentObject, -1)); }
#line 1373 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1369 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 8:
#line 75 "ExpressionParser.y" /* yacc.c:1646 */
#line 76 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::POS, new NumberExpression(DocumentObject, 1)); }
#line 1379 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1375 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 9:
#line 76 "ExpressionParser.y" /* yacc.c:1646 */
#line 77 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::ADD, (yyvsp[0].expr)); }
#line 1385 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1381 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 10:
#line 77 "ExpressionParser.y" /* yacc.c:1646 */
#line 78 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::SUB, (yyvsp[0].expr)); }
#line 1391 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1387 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 11:
#line 78 "ExpressionParser.y" /* yacc.c:1646 */
#line 79 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::MUL, (yyvsp[0].expr)); }
#line 1397 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1393 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 12:
#line 79 "ExpressionParser.y" /* yacc.c:1646 */
#line 80 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1403 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1399 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 13:
#line 80 "ExpressionParser.y" /* yacc.c:1646 */
#line 81 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1409 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1405 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 14:
#line 81 "ExpressionParser.y" /* yacc.c:1646 */
#line 82 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::POW, (yyvsp[0].expr)); }
#line 1415 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1411 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 15:
#line 82 "ExpressionParser.y" /* yacc.c:1646 */
#line 83 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[-1].expr); }
#line 1421 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1417 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 16:
#line 83 "ExpressionParser.y" /* yacc.c:1646 */
#line 84 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new FunctionExpression(DocumentObject, (yyvsp[-2].func), (yyvsp[-1].arguments)); }
#line 1427 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1423 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 17:
#line 84 "ExpressionParser.y" /* yacc.c:1646 */
#line 85 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new ConditionalExpression(DocumentObject, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 1433 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1429 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 18:
#line 87 "ExpressionParser.y" /* yacc.c:1646 */
#line 88 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new NumberExpression(DocumentObject, (yyvsp[0].fvalue)); }
#line 1439 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1435 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 19:
#line 88 "ExpressionParser.y" /* yacc.c:1646 */
#line 89 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new NumberExpression(DocumentObject, (yyvsp[0].fvalue)); }
#line 1445 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1441 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 20:
#line 89 "ExpressionParser.y" /* yacc.c:1646 */
#line 90 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new NumberExpression(DocumentObject, (double)(yyvsp[0].ivalue)); }
#line 1451 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1447 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 21:
#line 92 "ExpressionParser.y" /* yacc.c:1646 */
#line 93 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[0].expr); }
#line 1457 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1453 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 22:
#line 93 "ExpressionParser.y" /* yacc.c:1646 */
#line 94 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new ConstantExpression(DocumentObject, (yyvsp[0].constant).name, (yyvsp[0].constant).fvalue); }
#line 1463 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1459 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 23:
#line 94 "ExpressionParser.y" /* yacc.c:1646 */
#line 95 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-1].expr), OperatorExpression::UNIT, (yyvsp[0].expr)); }
#line 1469 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1465 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 24:
#line 95 "ExpressionParser.y" /* yacc.c:1646 */
#line 96 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, new ConstantExpression(DocumentObject, (yyvsp[-1].constant).name, (yyvsp[-1].constant).fvalue), OperatorExpression::UNIT, (yyvsp[0].expr)); }
#line 1475 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1471 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 25:
#line 98 "ExpressionParser.y" /* yacc.c:1646 */
#line 99 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.arguments).push_back((yyvsp[0].expr)); }
#line 1481 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1477 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 26:
#line 99 "ExpressionParser.y" /* yacc.c:1646 */
#line 100 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[-2].arguments).push_back((yyvsp[0].expr)); (yyval.arguments) = (yyvsp[-2].arguments); }
#line 1487 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1483 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 27:
#line 100 "ExpressionParser.y" /* yacc.c:1646 */
#line 101 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[-2].arguments).push_back((yyvsp[0].expr)); (yyval.arguments) = (yyvsp[-2].arguments); }
#line 1493 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1489 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 28:
#line 103 "ExpressionParser.y" /* yacc.c:1646 */
#line 104 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::EQ, (yyvsp[0].expr)); }
#line 1499 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1495 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 29:
#line 104 "ExpressionParser.y" /* yacc.c:1646 */
#line 105 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::NEQ, (yyvsp[0].expr)); }
#line 1505 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1501 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 30:
#line 105 "ExpressionParser.y" /* yacc.c:1646 */
#line 106 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::LT, (yyvsp[0].expr)); }
#line 1511 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1507 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 31:
#line 106 "ExpressionParser.y" /* yacc.c:1646 */
#line 107 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::GT, (yyvsp[0].expr)); }
#line 1517 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1513 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 32:
#line 107 "ExpressionParser.y" /* yacc.c:1646 */
#line 108 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::GTE, (yyvsp[0].expr)); }
#line 1523 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1519 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 33:
#line 108 "ExpressionParser.y" /* yacc.c:1646 */
#line 109 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::LTE, (yyvsp[0].expr)); }
#line 1529 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1525 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 34:
#line 111 "ExpressionParser.y" /* yacc.c:1646 */
#line 112 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new UnitExpression(DocumentObject, (yyvsp[0].quantity).scaler, (yyvsp[0].quantity).unitStr ); }
#line 1535 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1531 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 35:
#line 112 "ExpressionParser.y" /* yacc.c:1646 */
#line 113 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, new NumberExpression(DocumentObject, (yyvsp[-2].fvalue)), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1541 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1537 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 36:
#line 113 "ExpressionParser.y" /* yacc.c:1646 */
#line 114 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1547 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1543 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 37:
#line 114 "ExpressionParser.y" /* yacc.c:1646 */
#line 115 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::MUL, (yyvsp[0].expr)); }
#line 1553 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1549 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 38:
#line 115 "ExpressionParser.y" /* yacc.c:1646 */
#line 116 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::POW, (yyvsp[0].expr)); }
#line 1559 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1555 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 39:
#line 116 "ExpressionParser.y" /* yacc.c:1646 */
#line 117 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-3].expr), OperatorExpression::POW, new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::NEG, new NumberExpression(DocumentObject, -1))); }
#line 1565 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1561 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 40:
#line 117 "ExpressionParser.y" /* yacc.c:1646 */
#line 118 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[-1].expr); }
#line 1571 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1567 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 41:
#line 120 "ExpressionParser.y" /* yacc.c:1646 */
#line 121 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property within document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1580 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1576 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 42:
#line 124 "ExpressionParser.y" /* yacc.c:1646 */
#line 125 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property within document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).setDocumentObjectName((yyvsp[-2].string_or_identifier), true);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1590 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1586 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 43:
#line 129 "ExpressionParser.y" /* yacc.c:1646 */
#line 130 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property from an external document, within a named document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).setDocumentName((yyvsp[-2].string_or_identifier), true);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1600 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1596 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 44:
#line 134 "ExpressionParser.y" /* yacc.c:1646 */
#line 135 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property from an external document, within a named document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).setDocumentName((yyvsp[-4].string_or_identifier), true);
(yyval.path).setDocumentObjectName((yyvsp[-2].string_or_identifier), true);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1611 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1607 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 45:
#line 142 "ExpressionParser.y" /* yacc.c:1646 */
#line 143 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.ivalue) = (yyvsp[0].ivalue); }
#line 1617 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1613 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 46:
#line 143 "ExpressionParser.y" /* yacc.c:1646 */
#line 144 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.ivalue) = (yyvsp[0].fvalue); }
#line 1623 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1619 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 47:
#line 147 "ExpressionParser.y" /* yacc.c:1646 */
#line 148 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1629 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1625 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 48:
#line 148 "ExpressionParser.y" /* yacc.c:1646 */
#line 149 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1635 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1631 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 49:
#line 149 "ExpressionParser.y" /* yacc.c:1646 */
#line 150 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-3].string), (yyvsp[-1].ivalue))); }
#line 1641 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1637 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 50:
#line 150 "ExpressionParser.y" /* yacc.c:1646 */
#line 151 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-5].string), (yyvsp[-3].ivalue))); (yyval.components) = (yyvsp[0].components); }
#line 1647 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1643 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 51:
#line 151 "ExpressionParser.y" /* yacc.c:1646 */
#line 152 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), ObjectIdentifier::String((yyvsp[-1].string), true))); }
#line 1653 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1649 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 52:
#line 152 "ExpressionParser.y" /* yacc.c:1646 */
#line 153 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), (yyvsp[-1].string))); }
#line 1659 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1655 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 53:
#line 153 "ExpressionParser.y" /* yacc.c:1646 */
#line 154 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), ObjectIdentifier::String((yyvsp[-3].string), true))); (yyval.components) = (yyvsp[0].components); }
#line 1665 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1661 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 54:
#line 154 "ExpressionParser.y" /* yacc.c:1646 */
#line 155 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), (yyvsp[-3].string))); (yyval.components) = (yyvsp[0].components); }
#line 1671 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1667 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 55:
#line 155 "ExpressionParser.y" /* yacc.c:1646 */
#line 156 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[-2].string))); (yyval.components) = (yyvsp[0].components); }
#line 1677 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1673 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 56:
#line 158 "ExpressionParser.y" /* yacc.c:1646 */
#line 159 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1683 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1679 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 57:
#line 159 "ExpressionParser.y" /* yacc.c:1646 */
#line 160 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1689 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1685 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 58:
#line 160 "ExpressionParser.y" /* yacc.c:1646 */
#line 161 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1695 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1691 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 59:
#line 161 "ExpressionParser.y" /* yacc.c:1646 */
#line 162 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-3].string), (yyvsp[-1].ivalue))); }
#line 1701 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1697 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 60:
#line 162 "ExpressionParser.y" /* yacc.c:1646 */
#line 163 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-5].string), (yyvsp[-3].ivalue))); (yyval.components) = (yyvsp[0].components); }
#line 1707 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1703 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 61:
#line 163 "ExpressionParser.y" /* yacc.c:1646 */
#line 164 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), ObjectIdentifier::String((yyvsp[-1].string), true))); }
#line 1713 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1709 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 62:
#line 164 "ExpressionParser.y" /* yacc.c:1646 */
#line 165 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), (yyvsp[-1].string))); }
#line 1719 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1715 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 63:
#line 165 "ExpressionParser.y" /* yacc.c:1646 */
#line 166 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), ObjectIdentifier::String((yyvsp[-3].string), true))); (yyval.components) = (yyvsp[0].components); }
#line 1725 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1721 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 64:
#line 166 "ExpressionParser.y" /* yacc.c:1646 */
#line 167 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), (yyvsp[-3].string))); (yyval.components) = (yyvsp[0].components); }
#line 1731 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1727 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 65:
#line 167 "ExpressionParser.y" /* yacc.c:1646 */
#line 168 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[-2].string))); (yyval.components) = (yyvsp[0].components); }
#line 1737 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1733 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 66:
#line 170 "ExpressionParser.y" /* yacc.c:1646 */
#line 171 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); }
#line 1743 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1739 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 67:
#line 171 "ExpressionParser.y" /* yacc.c:1646 */
#line 172 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string)); }
#line 1749 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1745 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 68:
#line 174 "ExpressionParser.y" /* yacc.c:1646 */
#line 175 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); }
#line 1755 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1751 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 69:
#line 175 "ExpressionParser.y" /* yacc.c:1646 */
#line 176 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); }
#line 1761 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1757 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
#line 1765 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1761 "ExpressionParser.tab.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@ -1989,5 +1985,5 @@ yyreturn:
#endif
return yyresult;
}
#line 178 "ExpressionParser.y" /* yacc.c:1906 */
#line 179 "ExpressionParser.y" /* yacc.c:1906 */

View File

@ -49,9 +49,10 @@ std::stack<FunctionExpression::Function> functions; /**< Function
%left NUM
%left INTEGER
%left CONSTANT
%left EQ NEQ LT GT GTE LTE
%left '?' ':'
%left MINUSSIGN '+'
%left '*' '/'
%left '?' ':' EQ NEQ LT GT GTE LTE
%left NEG /* negation--unary minus */
%left POS /* unary plus */
%right '^' /* exponentiation */

View File

@ -383,7 +383,7 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 40
/* YYLAST -- Last index in YYTABLE. */
#define YYLAST 214
#define YYLAST 200
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 39
@ -410,9 +410,9 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 36, 2, 2, 2, 2,
31, 32, 24, 23, 33, 2, 35, 25, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 27, 34,
2, 2, 2, 26, 2, 2, 2, 2, 2, 2,
31, 32, 26, 25, 33, 2, 35, 27, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 24, 34,
2, 2, 2, 23, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 37, 2, 38, 30, 2, 2, 2, 2, 2,
@ -440,14 +440,14 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
0, 68, 68, 69, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 88, 89,
90, 93, 94, 95, 96, 99, 100, 101, 102, 105,
106, 107, 108, 111, 112, 113, 114, 115, 116, 119,
120, 121, 122, 123, 124, 125, 128, 132, 137, 142,
150, 151, 155, 156, 157, 158, 159, 160, 161, 162,
163, 166, 167, 168, 169, 170, 171, 172, 173, 174,
175, 178, 179, 182, 183
0, 69, 69, 70, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 89, 90,
91, 94, 95, 96, 97, 100, 101, 102, 103, 106,
107, 108, 109, 112, 113, 114, 115, 116, 117, 120,
121, 122, 123, 124, 125, 126, 129, 133, 138, 143,
151, 152, 156, 157, 158, 159, 160, 161, 162, 163,
164, 167, 168, 169, 170, 171, 172, 173, 174, 175,
176, 179, 180, 183, 184
};
#endif
@ -459,7 +459,7 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "FUNC", "ONE", "NUM", "IDENTIFIER",
"UNIT", "INTEGER", "CONSTANT", "CELLADDRESS", "EQ", "NEQ", "LT", "GT",
"GTE", "LTE", "STRING", "MINUSSIGN", "PROPERTY_REF", "DOCUMENT",
"OBJECT", "EXPONENT", "'+'", "'*'", "'/'", "'?'", "':'", "NEG", "POS",
"OBJECT", "EXPONENT", "'?'", "':'", "'+'", "'*'", "'/'", "NEG", "POS",
"'^'", "'('", "')'", "','", "';'", "'.'", "'#'", "'['", "']'", "$accept",
"input", "exp", "basic_num", "num", "args", "range", "cond", "unit_exp",
"identifier", "integer", "path", "subpath", "document", "object", YY_NULLPTR
@ -473,7 +473,7 @@ static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 43, 42, 47, 63, 58, 278, 279,
275, 276, 277, 63, 58, 43, 42, 47, 278, 279,
94, 40, 41, 44, 59, 46, 35, 91, 93
};
# endif
@ -492,20 +492,20 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
61, 77, -18, -100, 92, -100, -100, 8, -12, -22,
108, 108, 61, 27, 164, 8, -100, 7, 30, -100,
-100, 38, 1, -100, 62, -19, 108, 164, 169, -100,
8, 155, 20, -18, 8, 30, 58, 58, 122, 118,
61, 90, -14, -100, 54, -100, -100, 8, -21, -28,
108, 108, 61, 23, 158, 8, -100, 10, 75, -100,
-100, 18, 1, -100, 37, -8, 108, 158, 166, -100,
8, 71, 20, -14, 8, 75, 30, 30, 116, 165,
-100, 108, 108, 108, 108, 108, 108, 108, 108, 108,
61, 108, -100, 108, 8, 8, 17, 175, 28, 143,
160, -100, 108, 108, 60, 24, -100, -100, -100, -100,
53, -100, 55, 69, -100, -100, 164, 164, 164, 164,
164, 164, 184, 184, 90, 90, 60, -100, 144, 60,
60, 68, -100, 40, -100, -100, 74, -100, -100, -100,
-100, -100, -100, 164, 164, 155, 115, 80, 87, 89,
108, -100, 28, -100, 103, 106, 113, 155, 155, 155,
58, -100, 95, 128, 129, -100, -100, -100, 155, 155,
155, -100, -100, -100
61, 108, -100, 108, 8, 8, 17, 130, 28, 49,
70, -100, 108, 108, 55, 69, -100, -100, -100, -100,
59, -100, 65, 97, -100, -100, 158, 158, 158, 158,
158, 158, 93, 93, 30, 30, 55, -100, 138, 55,
55, 153, -100, 87, -100, -100, 74, -100, -100, -100,
-100, -100, -100, 158, 158, 71, 173, 102, 103, 109,
108, -100, 28, -100, 107, 117, 121, 71, 71, 71,
57, -100, 125, 131, 132, -100, -100, -100, 71, 71,
71, -100, -100, -100
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@ -533,7 +533,7 @@ static const yytype_uint8 yydefact[] =
static const yytype_int8 yypgoto[] =
{
-100, -100, 0, -51, -100, -100, -100, -100, 2, -100,
-10, -54, -99, -100, 116
72, -54, -99, -100, 118
};
/* YYDEFGOTO[NTERM-NUM]. */
@ -548,54 +548,52 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
14, 27, 18, 95, 98, 92, 113, 30, 60, 35,
36, 37, 33, -73, -71, 5, -74, 52, 125, 126,
127, 23, 3, -74, 69, 6, 70, 40, 71, 131,
14, 27, 18, 95, 98, 92, 113, -73, -71, 35,
36, 37, 33, 30, -74, 5, 60, 52, 125, 126,
127, 23, 3, 40, 69, 6, 70, -74, 71, 131,
132, 133, 64, 53, 93, 91, 58, 72, 97, 34,
111, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 87, 86, 88, 54, 55, 89, 90, 121, 105,
56, 106, 103, 104, 1, 2, 3, 4, 5, 6,
7, 8, 23, 3, 57, 31, 6, 32, 9, 10,
1, 23, 3, 24, 11, 6, 7, 25, 51, 59,
56, 107, 12, 108, 9, 10, 116, 31, -72, 32,
11, 41, 42, 43, 44, 45, 46, 109, 26, 112,
120, 1, 23, 3, 4, 117, 6, 7, 8, 69,
51, 114, 118, 71, 119, 9, 10, 31, -72, 32,
128, 11, 115, 41, 42, 43, 44, 45, 46, 26,
47, 122, 54, 55, 123, 48, 49, 50, 56, 99,
75, 124, 51, 100, 74, 41, 42, 43, 44, 45,
46, 65, 47, 129, 130, 66, 101, 48, 49, 50,
102, 110, 67, 96, 51, 41, 42, 43, 44, 45,
46, 93, 47, 0, 0, 8, 0, 48, 49, 50,
0, 0, 94, 0, 51, 41, 42, 43, 44, 45,
46, 61, 62, 63, 0, 0, 0, 0, 49, 50,
0, 0, 0, 0, 51
85, 87, 86, 88, 57, 99, 89, 90, 121, 100,
51, 59, 103, 104, 1, 2, 3, 4, 5, 6,
7, 8, 31, -72, 32, 47, 101, 65, 9, 10,
102, 66, 48, 49, 50, 56, 11, 51, 67, 31,
-72, 32, 12, 1, 23, 3, 24, 107, 6, 7,
25, 54, 55, 108, 105, 56, 106, 9, 10, 112,
120, 1, 23, 3, 4, 11, 6, 7, 8, 49,
50, 26, 31, 51, 32, 9, 10, 41, 42, 43,
44, 45, 46, 11, 47, 109, 93, 117, 118, 26,
8, 48, 49, 50, 119, 122, 51, 94, 74, 41,
42, 43, 44, 45, 46, 123, 47, 23, 3, 124,
128, 6, 110, 48, 49, 50, 129, 130, 51, 41,
42, 43, 44, 45, 46, 96, 47, 69, 116, 114,
0, 71, 0, 48, 49, 50, 0, 0, 51, 0,
115, 54, 55, 0, 0, 56, 0, 75, 61, 62,
63
};
static const yytype_int16 yycheck[] =
{
0, 1, 0, 57, 58, 56, 105, 25, 27, 7,
10, 11, 4, 35, 36, 7, 35, 15, 117, 118,
119, 4, 5, 35, 4, 8, 6, 0, 8, 128,
129, 130, 30, 26, 6, 18, 35, 17, 10, 31,
0, 1, 0, 57, 58, 56, 105, 35, 36, 7,
10, 11, 4, 27, 35, 7, 24, 15, 117, 118,
119, 4, 5, 0, 4, 8, 6, 35, 8, 128,
129, 130, 30, 23, 6, 18, 35, 17, 10, 31,
91, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 50, 53, 24, 25, 54, 55, 112, 35,
30, 37, 62, 63, 3, 4, 5, 6, 7, 8,
9, 10, 4, 5, 36, 35, 8, 37, 17, 18,
3, 4, 5, 6, 23, 8, 9, 10, 30, 27,
30, 38, 31, 38, 17, 18, 106, 35, 36, 37,
23, 11, 12, 13, 14, 15, 16, 38, 31, 35,
110, 3, 4, 5, 6, 35, 8, 9, 10, 4,
30, 6, 35, 8, 35, 17, 18, 35, 36, 37,
35, 23, 17, 11, 12, 13, 14, 15, 16, 31,
18, 38, 24, 25, 38, 23, 24, 25, 30, 6,
32, 38, 30, 10, 32, 11, 12, 13, 14, 15,
16, 6, 18, 35, 35, 10, 6, 23, 24, 25,
10, 27, 17, 57, 30, 11, 12, 13, 14, 15,
16, 6, 18, -1, -1, 10, -1, 23, 24, 25,
-1, -1, 17, -1, 30, 11, 12, 13, 14, 15,
16, 32, 33, 34, -1, -1, -1, -1, 24, 25,
-1, -1, -1, -1, 30
50, 51, 50, 53, 36, 6, 54, 55, 112, 10,
30, 24, 62, 63, 3, 4, 5, 6, 7, 8,
9, 10, 35, 36, 37, 18, 6, 6, 17, 18,
10, 10, 25, 26, 27, 30, 25, 30, 17, 35,
36, 37, 31, 3, 4, 5, 6, 38, 8, 9,
10, 26, 27, 38, 35, 30, 37, 17, 18, 35,
110, 3, 4, 5, 6, 25, 8, 9, 10, 26,
27, 31, 35, 30, 37, 17, 18, 11, 12, 13,
14, 15, 16, 25, 18, 38, 6, 35, 35, 31,
10, 25, 26, 27, 35, 38, 30, 17, 32, 11,
12, 13, 14, 15, 16, 38, 18, 4, 5, 38,
35, 8, 24, 25, 26, 27, 35, 35, 30, 11,
12, 13, 14, 15, 16, 57, 18, 4, 106, 6,
-1, 8, -1, 25, 26, 27, -1, -1, 30, -1,
17, 26, 27, -1, -1, 30, -1, 32, 32, 33,
34
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@ -603,17 +601,17 @@ static const yytype_int16 yycheck[] =
static const yytype_uint8 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 9, 10, 17,
18, 23, 31, 40, 41, 42, 43, 46, 47, 48,
18, 25, 31, 40, 41, 42, 43, 46, 47, 48,
50, 52, 53, 4, 6, 10, 31, 41, 44, 45,
25, 35, 37, 4, 31, 47, 41, 41, 41, 47,
0, 11, 12, 13, 14, 15, 16, 18, 23, 24,
25, 30, 47, 26, 24, 25, 30, 36, 35, 27,
27, 32, 33, 34, 47, 6, 10, 17, 51, 4,
27, 35, 37, 4, 31, 47, 41, 41, 41, 47,
0, 11, 12, 13, 14, 15, 16, 18, 25, 26,
27, 30, 47, 23, 26, 27, 30, 36, 35, 24,
24, 32, 33, 34, 47, 6, 10, 17, 51, 4,
6, 8, 17, 49, 32, 32, 41, 41, 41, 41,
41, 41, 41, 41, 41, 41, 47, 41, 41, 47,
47, 18, 42, 6, 17, 50, 53, 10, 50, 6,
10, 6, 10, 41, 41, 35, 37, 38, 38, 38,
27, 42, 35, 51, 6, 17, 49, 35, 35, 35,
24, 42, 35, 51, 6, 17, 49, 35, 35, 35,
41, 50, 38, 38, 38, 51, 51, 51, 35, 35,
35, 51, 51, 51
};
@ -1065,27 +1063,27 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
switch (yytype)
{
case 41: /* exp */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
#line 62 "ExpressionParser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
#line 1071 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1069 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
case 44: /* args */
#line 62 "ExpressionParser.y" /* yacc.c:1257 */
#line 63 "ExpressionParser.y" /* yacc.c:1257 */
{ std::vector<Expression*>::const_iterator i = ((*yyvaluep).arguments).begin(); while (i != ((*yyvaluep).arguments).end()) { delete *i; ++i; } }
#line 1077 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1075 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
case 46: /* cond */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
#line 62 "ExpressionParser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
#line 1083 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1081 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
case 47: /* unit_exp */
#line 61 "ExpressionParser.y" /* yacc.c:1257 */
#line 62 "ExpressionParser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
#line 1089 "ExpressionParser.tab.c" /* yacc.c:1257 */
#line 1087 "ExpressionParser.tab.c" /* yacc.c:1257 */
break;
@ -1347,461 +1345,461 @@ yyreduce:
switch (yyn)
{
case 2:
#line 68 "ExpressionParser.y" /* yacc.c:1646 */
#line 69 "ExpressionParser.y" /* yacc.c:1646 */
{ ScanResult = (yyvsp[0].expr); valueExpression = true; }
#line 1353 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1351 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 3:
#line 69 "ExpressionParser.y" /* yacc.c:1646 */
#line 70 "ExpressionParser.y" /* yacc.c:1646 */
{ ScanResult = (yyvsp[0].expr); unitExpression = true; }
#line 1359 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1357 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 4:
#line 72 "ExpressionParser.y" /* yacc.c:1646 */
#line 73 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[0].expr); }
#line 1365 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1363 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 5:
#line 73 "ExpressionParser.y" /* yacc.c:1646 */
#line 74 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new StringExpression(DocumentObject, (yyvsp[0].string)); }
#line 1371 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1369 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 6:
#line 74 "ExpressionParser.y" /* yacc.c:1646 */
#line 75 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new VariableExpression(DocumentObject, (yyvsp[0].path)); }
#line 1377 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1375 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 7:
#line 75 "ExpressionParser.y" /* yacc.c:1646 */
#line 76 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::NEG, new NumberExpression(DocumentObject, -1)); }
#line 1383 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1381 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 8:
#line 76 "ExpressionParser.y" /* yacc.c:1646 */
#line 77 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::POS, new NumberExpression(DocumentObject, 1)); }
#line 1389 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1387 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 9:
#line 77 "ExpressionParser.y" /* yacc.c:1646 */
#line 78 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::ADD, (yyvsp[0].expr)); }
#line 1395 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1393 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 10:
#line 78 "ExpressionParser.y" /* yacc.c:1646 */
#line 79 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::SUB, (yyvsp[0].expr)); }
#line 1401 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1399 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 11:
#line 79 "ExpressionParser.y" /* yacc.c:1646 */
#line 80 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::MUL, (yyvsp[0].expr)); }
#line 1407 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1405 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 12:
#line 80 "ExpressionParser.y" /* yacc.c:1646 */
#line 81 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1413 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1411 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 13:
#line 81 "ExpressionParser.y" /* yacc.c:1646 */
#line 82 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1419 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1417 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 14:
#line 82 "ExpressionParser.y" /* yacc.c:1646 */
#line 83 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::POW, (yyvsp[0].expr)); }
#line 1425 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1423 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 15:
#line 83 "ExpressionParser.y" /* yacc.c:1646 */
#line 84 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[-1].expr); }
#line 1431 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1429 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 16:
#line 84 "ExpressionParser.y" /* yacc.c:1646 */
#line 85 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new AggregateFunctionExpression(DocumentObject, (yyvsp[-2].func), (yyvsp[-1].arguments)); }
#line 1437 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1435 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 17:
#line 85 "ExpressionParser.y" /* yacc.c:1646 */
#line 86 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new ConditionalExpression(DocumentObject, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 1443 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1441 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 18:
#line 88 "ExpressionParser.y" /* yacc.c:1646 */
#line 89 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new NumberExpression(DocumentObject, (yyvsp[0].fvalue)); }
#line 1449 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1447 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 19:
#line 89 "ExpressionParser.y" /* yacc.c:1646 */
#line 90 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new NumberExpression(DocumentObject, (yyvsp[0].fvalue)); }
#line 1455 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1453 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 20:
#line 90 "ExpressionParser.y" /* yacc.c:1646 */
#line 91 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new NumberExpression(DocumentObject, (double)(yyvsp[0].ivalue)); }
#line 1461 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1459 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 21:
#line 93 "ExpressionParser.y" /* yacc.c:1646 */
#line 94 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[0].expr); }
#line 1467 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1465 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 22:
#line 94 "ExpressionParser.y" /* yacc.c:1646 */
#line 95 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new ConstantExpression(DocumentObject, (yyvsp[0].constant).name, (yyvsp[0].constant).fvalue); }
#line 1473 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1471 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 23:
#line 95 "ExpressionParser.y" /* yacc.c:1646 */
#line 96 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-1].expr), OperatorExpression::UNIT, (yyvsp[0].expr)); }
#line 1479 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1477 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 24:
#line 96 "ExpressionParser.y" /* yacc.c:1646 */
#line 97 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, new ConstantExpression(DocumentObject, (yyvsp[-1].constant).name, (yyvsp[-1].constant).fvalue), OperatorExpression::UNIT, (yyvsp[0].expr)); }
#line 1485 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1483 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 25:
#line 99 "ExpressionParser.y" /* yacc.c:1646 */
#line 100 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.arguments).push_back((yyvsp[0].expr)); }
#line 1491 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1489 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 26:
#line 100 "ExpressionParser.y" /* yacc.c:1646 */
#line 101 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.arguments).push_back((yyvsp[0].expr)); }
#line 1497 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1495 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 27:
#line 101 "ExpressionParser.y" /* yacc.c:1646 */
#line 102 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[-2].arguments).push_back((yyvsp[0].expr)); (yyval.arguments) = (yyvsp[-2].arguments); }
#line 1503 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1501 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 28:
#line 102 "ExpressionParser.y" /* yacc.c:1646 */
#line 103 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[-2].arguments).push_back((yyvsp[0].expr)); (yyval.arguments) = (yyvsp[-2].arguments); }
#line 1509 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1507 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 29:
#line 105 "ExpressionParser.y" /* yacc.c:1646 */
#line 106 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); }
#line 1515 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1513 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 30:
#line 106 "ExpressionParser.y" /* yacc.c:1646 */
#line 107 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); }
#line 1521 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1519 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 31:
#line 107 "ExpressionParser.y" /* yacc.c:1646 */
#line 108 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); }
#line 1527 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1525 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 32:
#line 108 "ExpressionParser.y" /* yacc.c:1646 */
#line 109 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); }
#line 1533 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1531 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 33:
#line 111 "ExpressionParser.y" /* yacc.c:1646 */
#line 112 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::EQ, (yyvsp[0].expr)); }
#line 1539 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1537 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 34:
#line 112 "ExpressionParser.y" /* yacc.c:1646 */
#line 113 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::NEQ, (yyvsp[0].expr)); }
#line 1545 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1543 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 35:
#line 113 "ExpressionParser.y" /* yacc.c:1646 */
#line 114 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::LT, (yyvsp[0].expr)); }
#line 1551 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1549 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 36:
#line 114 "ExpressionParser.y" /* yacc.c:1646 */
#line 115 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::GT, (yyvsp[0].expr)); }
#line 1557 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1555 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 37:
#line 115 "ExpressionParser.y" /* yacc.c:1646 */
#line 116 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::GTE, (yyvsp[0].expr)); }
#line 1563 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1561 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 38:
#line 116 "ExpressionParser.y" /* yacc.c:1646 */
#line 117 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::LTE, (yyvsp[0].expr)); }
#line 1569 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1567 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 39:
#line 119 "ExpressionParser.y" /* yacc.c:1646 */
#line 120 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new UnitExpression(DocumentObject, (yyvsp[0].quantity).scaler, (yyvsp[0].quantity).unitStr ); }
#line 1575 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1573 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 40:
#line 120 "ExpressionParser.y" /* yacc.c:1646 */
#line 121 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, new NumberExpression(DocumentObject, (yyvsp[-2].fvalue)), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1581 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1579 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 41:
#line 121 "ExpressionParser.y" /* yacc.c:1646 */
#line 122 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); }
#line 1587 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1585 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 42:
#line 122 "ExpressionParser.y" /* yacc.c:1646 */
#line 123 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::MUL, (yyvsp[0].expr)); }
#line 1593 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1591 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 43:
#line 123 "ExpressionParser.y" /* yacc.c:1646 */
#line 124 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::POW, (yyvsp[0].expr)); }
#line 1599 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1597 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 44:
#line 124 "ExpressionParser.y" /* yacc.c:1646 */
#line 125 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-3].expr), OperatorExpression::POW, new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::NEG, new NumberExpression(DocumentObject, -1))); }
#line 1605 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1603 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 45:
#line 125 "ExpressionParser.y" /* yacc.c:1646 */
#line 126 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.expr) = (yyvsp[-1].expr); }
#line 1611 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1609 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 46:
#line 128 "ExpressionParser.y" /* yacc.c:1646 */
#line 129 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property within document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1620 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1618 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 47:
#line 132 "ExpressionParser.y" /* yacc.c:1646 */
#line 133 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property within document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).setDocumentObjectName((yyvsp[-2].string_or_identifier), true);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1630 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1628 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 48:
#line 137 "ExpressionParser.y" /* yacc.c:1646 */
#line 138 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property from an external document, within a named document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).setDocumentName((yyvsp[-2].string_or_identifier), true);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1640 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1638 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 49:
#line 142 "ExpressionParser.y" /* yacc.c:1646 */
#line 143 "ExpressionParser.y" /* yacc.c:1646 */
{ /* Path to property from an external document, within a named document object */
(yyval.path) = ObjectIdentifier(DocumentObject);
(yyval.path).setDocumentName((yyvsp[-4].string_or_identifier), true);
(yyval.path).setDocumentObjectName((yyvsp[-2].string_or_identifier), true);
(yyval.path).addComponents((yyvsp[0].components));
}
#line 1651 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1649 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 50:
#line 150 "ExpressionParser.y" /* yacc.c:1646 */
#line 151 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.ivalue) = (yyvsp[0].ivalue); }
#line 1657 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1655 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 51:
#line 151 "ExpressionParser.y" /* yacc.c:1646 */
#line 152 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.ivalue) = (yyvsp[0].fvalue); }
#line 1663 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1661 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 52:
#line 155 "ExpressionParser.y" /* yacc.c:1646 */
#line 156 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1669 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1667 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 53:
#line 156 "ExpressionParser.y" /* yacc.c:1646 */
#line 157 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1675 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1673 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 54:
#line 157 "ExpressionParser.y" /* yacc.c:1646 */
#line 158 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-3].string), (yyvsp[-1].ivalue))); }
#line 1681 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1679 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 55:
#line 158 "ExpressionParser.y" /* yacc.c:1646 */
#line 159 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-5].string), (yyvsp[-3].ivalue))); (yyval.components) = (yyvsp[0].components); }
#line 1687 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1685 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 56:
#line 159 "ExpressionParser.y" /* yacc.c:1646 */
#line 160 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), ObjectIdentifier::String((yyvsp[-1].string), true))); }
#line 1693 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1691 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 57:
#line 160 "ExpressionParser.y" /* yacc.c:1646 */
#line 161 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), (yyvsp[-1].string))); }
#line 1699 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1697 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 58:
#line 161 "ExpressionParser.y" /* yacc.c:1646 */
#line 162 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), ObjectIdentifier::String((yyvsp[-3].string), true))); (yyval.components) = (yyvsp[0].components); }
#line 1705 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1703 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 59:
#line 162 "ExpressionParser.y" /* yacc.c:1646 */
#line 163 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), (yyvsp[-3].string))); (yyval.components) = (yyvsp[0].components); }
#line 1711 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1709 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 60:
#line 163 "ExpressionParser.y" /* yacc.c:1646 */
#line 164 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[-2].string))); (yyval.components) = (yyvsp[0].components); }
#line 1717 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1715 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 61:
#line 166 "ExpressionParser.y" /* yacc.c:1646 */
#line 167 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1723 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1721 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 62:
#line 167 "ExpressionParser.y" /* yacc.c:1646 */
#line 168 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1729 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1727 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 63:
#line 168 "ExpressionParser.y" /* yacc.c:1646 */
#line 169 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); }
#line 1735 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1733 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 64:
#line 169 "ExpressionParser.y" /* yacc.c:1646 */
#line 170 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-3].string), (yyvsp[-1].ivalue))); }
#line 1741 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1739 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 65:
#line 170 "ExpressionParser.y" /* yacc.c:1646 */
#line 171 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-5].string), (yyvsp[-3].ivalue))); (yyval.components) = (yyvsp[0].components); }
#line 1747 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1745 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 66:
#line 171 "ExpressionParser.y" /* yacc.c:1646 */
#line 172 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), ObjectIdentifier::String((yyvsp[-1].string), true))); }
#line 1753 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1751 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 67:
#line 172 "ExpressionParser.y" /* yacc.c:1646 */
#line 173 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), (yyvsp[-1].string))); }
#line 1759 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1757 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 68:
#line 173 "ExpressionParser.y" /* yacc.c:1646 */
#line 174 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), ObjectIdentifier::String((yyvsp[-3].string), true))); (yyval.components) = (yyvsp[0].components); }
#line 1765 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1763 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 69:
#line 174 "ExpressionParser.y" /* yacc.c:1646 */
#line 175 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), (yyvsp[-3].string))); (yyval.components) = (yyvsp[0].components); }
#line 1771 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1769 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 70:
#line 175 "ExpressionParser.y" /* yacc.c:1646 */
#line 176 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyvsp[0].components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[-2].string))); (yyval.components) = (yyvsp[0].components); }
#line 1777 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1775 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 71:
#line 178 "ExpressionParser.y" /* yacc.c:1646 */
#line 179 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); }
#line 1783 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1781 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 72:
#line 179 "ExpressionParser.y" /* yacc.c:1646 */
#line 180 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string)); }
#line 1789 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1787 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 73:
#line 182 "ExpressionParser.y" /* yacc.c:1646 */
#line 183 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); }
#line 1795 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1793 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
case 74:
#line 183 "ExpressionParser.y" /* yacc.c:1646 */
#line 184 "ExpressionParser.y" /* yacc.c:1646 */
{ (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); }
#line 1801 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1799 "ExpressionParser.tab.c" /* yacc.c:1646 */
break;
#line 1805 "ExpressionParser.tab.c" /* yacc.c:1646 */
#line 1803 "ExpressionParser.tab.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@ -2029,5 +2027,5 @@ yyreturn:
#endif
return yyresult;
}
#line 186 "ExpressionParser.y" /* yacc.c:1906 */
#line 187 "ExpressionParser.y" /* yacc.c:1906 */

View File

@ -50,9 +50,10 @@ std::stack<FunctionExpression::Function> functions; /**< Function
%left NUM
%left INTEGER
%left CONSTANT
%left EQ NEQ LT GT GTE LTE
%left '?' ':'
%left MINUSSIGN '+'
%left '*' '/'
%left '?' ':' EQ NEQ LT GT GTE LTE
%left NEG /* negation--unary minus */
%left POS /* unary plus */
%right '^' /* exponentiation */

View File

@ -78,6 +78,20 @@ class SpreadsheetCases(unittest.TestCase):
self.assertEqual(sheet.A23, 1)
self.assertEqual(sheet.A24, 1)
def testPrecedence(self):
""" Precedence -- test precedence for relational operators and conditional operator. """
sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet')
sheet.set('A1', '=1 < 2 ? 3 : 4')
sheet.set('A2', '=1 + 2 < 3 + 4 ? 5 + 6 : 7 + 8')
sheet.set('A3', '=1 + 2 * 1 < 3 + 4 ? 5 * 2 + 6 * 3 + 2 ^ 4 : 7 * 2 + 8 * 3 + 2 ^ 3')
self.doc.recompute()
self.assertEqual(sheet.getContents("A1"), "=1 < 2 ? 3 : 4")
self.assertEqual(sheet.getContents("A2"), "=1 + 2 < 3 + 4 ? 5 + 6 : 7 + 8")
self.assertEqual(sheet.getContents("A3"), "=1 + 2 * 1 < 3 + 4 ? 5 * 2 + 6 * 3 + 2 ^ 4 : 7 * 2 + 8 * 3 + 2 ^ 3")
self.assertEqual(sheet.A1, 3)
self.assertEqual(sheet.A2, 11)
self.assertEqual(sheet.A3, 44)
def testRemoveRows(self):
""" Removing rows -- check renaming of internal cells """
sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet')