Index: const_gram.c =================================================================== --- const_gram.c (revision 36866) +++ const_gram.c (revision 36867) @@ -16,143 +16,146 @@ static const pcb_ordc_int_t pcb_ordc_lhs[] = { -1, 0, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 6, 6, 2, - 3, + 1, 1, 1, 1, 1, 1, 1, 4, 6, 6, + 2, 3, }; static const pcb_ordc_int_t pcb_ordc_len[] = { 2, - 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, - 1, 1, 2, 4, 4, 4, 3, 0, 2, 5, - 7, + 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1, 1, 1, 2, 4, 4, 4, 3, 0, 2, + 5, 7, }; static const pcb_ordc_int_t pcb_ordc_defred[] = { 0, 0, 0, 0, 0, 2, 3, 4, 0, 1, 0, - 0, 0, 29, 20, 21, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 0, 0, 30, 21, 22, 0, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 0, 6, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 18, 19, 30, 0, 25, 24, 26, 0, 31, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 19, 20, 31, 0, 26, 25, 27, + 0, 32, }; static const pcb_ordc_int_t pcb_ordc_dgoto[] = { 4, - 23, 5, 6, 7, 8, 9, + 24, 5, 6, 7, 8, 9, }; static const pcb_ordc_int_t pcb_ordc_sindex[] = { -122, - -37, -26, -122, 0, 0, 0, 0, -122, 0, -36, - -237, -96, 0, 0, 0, -7, 0, -2, 2, -36, - -36, -227, -35, -1, 0, -36, -36, -36, -22, -24, - 0, -36, -36, -36, -36, -36, -36, -36, -36, -36, - -36, -36, -36, -36, -122, -211, -15, -6, 3, 0, - 10, 10, 10, 10, 10, 10, 29, 17, -22, -22, - 0, 0, 0, 0, 15, 0, 0, 0, -8, 0, + -27, -25, -122, 0, 0, 0, 0, -122, 0, -36, + -256, -108, 0, 0, 0, -15, 0, -36, -10, -6, + -36, -36, -226, -23, -1, 0, -36, 0, -36, -36, + -31, -14, 0, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -122, -221, -5, 4, + 13, 0, 20, 20, 20, 20, 20, 20, 33, -35, + -31, -31, 0, 0, 0, 0, 7, 0, 0, 0, + -7, 0, }; -static const pcb_ordc_int_t pcb_ordc_rindex[] = { 58, - 0, 0, -64, 0, 0, 0, 0, 5, 0, 0, +static const pcb_ordc_int_t pcb_ordc_rindex[] = { 53, + 0, 0, -81, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 70, 76, 82, 88, 94, 48, 56, 32, 40, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 68, 74, 80, 86, 92, 98, 52, 60, + 36, 44, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, }; static const pcb_ordc_int_t pcb_ordc_gindex[] = { 0, - 118, 0, 0, 0, 18, 8, + 124, 0, 0, 0, 12, 18, }; -#define pcb_ordc_TABLESIZE 361 -static const pcb_ordc_int_t pcb_ordc_table[] = { 22, - 3, 44, 10, 21, 28, 45, 42, 40, 20, 41, - 12, 43, 44, 11, 44, 13, 50, 42, 40, 42, - 41, 44, 43, 24, 43, 66, 42, 40, 25, 41, - 44, 43, 26, 31, 67, 42, 40, 27, 41, 44, - 43, 28, 46, 68, 42, 40, 44, 41, 65, 43, - 70, 42, 40, 44, 41, 69, 43, 28, 42, 40, - 28, 41, 64, 43, 5, 44, 5, 0, 5, 0, - 42, 40, 15, 41, 15, 43, 15, 0, 0, 0, - 16, 0, 16, 0, 16, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 11, 28, - 0, 0, 0, 0, 12, 0, 0, 29, 30, 0, - 0, 0, 0, 47, 48, 49, 0, 1, 2, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, +#define pcb_ordc_TABLESIZE 365 +static const pcb_ordc_int_t pcb_ordc_table[] = { 23, + 3, 46, 29, 22, 25, 46, 44, 42, 21, 43, + 44, 45, 10, 46, 11, 45, 26, 47, 44, 42, + 12, 43, 46, 45, 27, 13, 52, 44, 42, 29, + 43, 46, 45, 30, 33, 68, 44, 42, 67, 43, + 46, 45, 48, 29, 69, 44, 42, 71, 43, 46, + 45, 72, 29, 70, 44, 42, 46, 43, 66, 45, + 0, 44, 42, 0, 43, 0, 45, 0, 5, 46, + 5, 0, 5, 0, 44, 42, 16, 43, 16, 45, + 16, 0, 0, 0, 17, 0, 17, 0, 17, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 11, 29, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, + 0, 28, 0, 0, 31, 32, 0, 0, 1, 2, + 49, 0, 50, 51, 0, 0, 0, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 15, 16, 17, 0, 0, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 18, 19, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 32, 33, 34, 35, 36, - 37, 38, 39, 0, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 0, 0, 0, 0, 38, 39, 0, - 0, 0, 0, 0, 38, 5, 5, 5, 5, 5, - 5, 5, 5, 15, 15, 15, 15, 15, 15, 15, - 15, 16, 16, 16, 16, 16, 16, 16, 16, 13, - 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, - 14, 14, 14, 0, 14, 7, 7, 7, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, - 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, - 12, + 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 18, 0, 0, 19, 20, 34, 35, + 36, 37, 38, 39, 40, 41, 0, 34, 35, 36, + 37, 38, 39, 40, 41, 0, 34, 35, 36, 37, + 38, 39, 40, 41, 0, 34, 35, 36, 37, 38, + 39, 40, 41, 0, 34, 35, 36, 37, 38, 39, + 40, 41, 0, 0, 0, 0, 0, 40, 41, 5, + 5, 5, 5, 5, 5, 5, 5, 16, 16, 16, + 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, + 17, 17, 17, 14, 14, 14, 14, 14, 14, 14, + 14, 15, 15, 15, 15, 15, 15, 0, 15, 8, + 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, + 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, + 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, + 13, 13, 13, 13, 13, }; static const pcb_ordc_int_t pcb_ordc_check[] = { 36, - 123, 37, 40, 40, 0, 41, 42, 43, 45, 45, - 3, 47, 37, 40, 37, 8, 41, 42, 43, 42, - 45, 37, 47, 261, 47, 41, 42, 43, 125, 45, - 37, 47, 40, 261, 41, 42, 43, 40, 45, 37, - 47, 40, 44, 41, 42, 43, 37, 45, 260, 47, - 59, 42, 43, 37, 45, 41, 47, 0, 42, 43, - 125, 45, 45, 47, 41, 37, 43, -1, 45, -1, - 42, 43, 41, 45, 43, 47, 45, -1, -1, -1, - 41, -1, 43, -1, 45, -1, -1, -1, 41, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, + 123, 37, 0, 40, 261, 37, 42, 43, 45, 45, + 42, 47, 40, 37, 40, 47, 125, 41, 42, 43, + 3, 45, 37, 47, 40, 8, 41, 42, 43, 40, + 45, 37, 47, 40, 261, 41, 42, 43, 260, 45, + 37, 47, 44, 125, 41, 42, 43, 41, 45, 37, + 47, 59, 0, 41, 42, 43, 37, 45, 47, 47, + -1, 42, 43, -1, 45, -1, 47, -1, 41, 37, + 43, -1, 45, -1, 42, 43, 41, 45, 43, 47, + 45, -1, -1, -1, 41, -1, 43, -1, 45, -1, + -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, - 41, -1, -1, -1, -1, -1, 41, -1, -1, -1, - -1, -1, 41, -1, -1, -1, -1, -1, 41, 125, - -1, -1, -1, -1, 41, -1, -1, 20, 21, -1, - -1, -1, -1, 26, 27, 28, -1, 270, 271, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, -1, 41, 125, -1, -1, + -1, -1, 41, -1, -1, -1, -1, -1, 41, -1, + -1, 18, -1, -1, 21, 22, -1, -1, 271, 272, + 27, -1, 29, 30, -1, -1, -1, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 257, 258, 259, 260, -1, -1, 262, 263, 264, 265, - 266, 267, 268, 269, -1, 272, 273, 262, 263, 264, + 257, 258, 259, 260, -1, -1, -1, -1, -1, -1, + -1, -1, 268, 270, -1, -1, 273, 274, 262, 263, + 264, 265, 266, 267, 268, 269, -1, 262, 263, 264, 265, 266, 267, 268, 269, -1, 262, 263, 264, 265, 266, 267, 268, 269, -1, 262, 263, 264, 265, 266, 267, 268, 269, -1, 262, 263, 264, 265, 266, 267, - 268, 269, -1, -1, -1, -1, -1, 268, 269, -1, - -1, -1, -1, -1, 268, 262, 263, 264, 265, 266, + 268, 269, -1, -1, -1, -1, -1, 268, 269, 262, + 263, 264, 265, 266, 267, 268, 269, 262, 263, 264, + 265, 266, 267, 268, 269, 262, 263, 264, 265, 266, 267, 268, 269, 262, 263, 264, 265, 266, 267, 268, - 269, 262, 263, 264, 265, 266, 267, 268, 269, 262, - 263, 264, 265, 266, 267, 268, 269, 262, 263, 264, - 265, 266, 267, -1, 269, 262, 263, 264, 265, 266, + 269, 262, 263, 264, 265, 266, 267, -1, 269, 262, + 263, 264, 265, 266, 267, 262, 263, 264, 265, 266, 267, 262, 263, 264, 265, 266, 267, 262, 263, 264, 265, 266, 267, 262, 263, 264, 265, 266, 267, 262, - 263, 264, 265, 266, 267, 262, 263, 264, 265, 266, - 267, + 263, 264, 265, 266, 267, }; #define pcb_ordc_FINAL 4 -#define pcb_ordc_MAXTOKEN 274 -#define pcb_ordc_UNDFTOKEN 283 +#define pcb_ordc_MAXTOKEN 275 +#define pcb_ordc_UNDFTOKEN 284 #define pcb_ordc_TRANSLATE(a) ((a) > pcb_ordc_MAXTOKEN ? pcb_ordc_UNDFTOKEN : (a)) #if pcb_ordc_DEBUG static const char *const pcb_ordc_name[] = { -"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"'!'",0,0,"'$'","'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0, -0,0,0,0,0,0,"';'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0, +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,"'$'","'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0, +0,0,0,"';'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,"T_CINT","T_CFLOAT","T_STRING","T_QSTR","T_ID","T_EQ", -"T_NEQ","T_GE","T_LE","T_GT","T_LT","T_AND","T_OR","T_IF","T_ERROR","T_INT", +0,0,0,0,0,0,0,"T_CINT","T_CFLOAT","T_STRING","T_QSTR","T_ID","T_EQ","T_NEQ", +"T_GE","T_LE","T_GT","T_LT","T_AND","T_OR","T_NOT","T_IF","T_ERROR","T_INT", "T_FLOAT","T_STR",0,0,0,0,0,0,0,0,"illegal-symbol", }; static const char *const pcb_ordc_rule[] = { @@ -162,6 +165,7 @@ "statement : stmt_error", "statement : stmt_block", "expr : '-' expr", +"expr : T_NOT expr", "expr : '(' expr ')'", "expr : expr T_EQ expr", "expr : expr T_NEQ expr", @@ -192,7 +196,7 @@ }; #endif -#line 140 "../src_plugins/order/const_gram.y" +#line 141 "../src_plugins/order/const_gram.y" #include #include @@ -252,7 +256,7 @@ n->val.d = d; return n; } -#line 268 "../src_plugins/order/const_gram.c" +#line 272 "../src_plugins/order/const_gram.c" #if pcb_ordc_DEBUG #include /* needed for printf */ @@ -479,109 +483,113 @@ break; case 6: #line 96 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = yyctx->stack.l_mark[-1].un.tree; } + { yyctx->val.un.tree = unop(PCB_ORDC_NOT, yyctx->stack.l_mark[0].un.tree); } break; case 7: #line 97 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_EQ, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = yyctx->stack.l_mark[-1].un.tree; } break; case 8: #line 98 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_NEQ, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_EQ, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 9: #line 99 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_GE, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_NEQ, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 10: #line 100 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_LE, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_GE, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 11: #line 101 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_GT, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_LE, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 12: #line 102 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_LT, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_GT, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 13: #line 103 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_AND, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_LT, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 14: #line 104 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_OR, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_AND, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 15: -#line 106 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_ADD, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } +#line 105 "../src_plugins/order/const_gram.y" + { yyctx->val.un.tree = binop(PCB_ORDC_OR, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 16: #line 107 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_SUB, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_ADD, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 17: #line 108 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_MULT, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_SUB, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 18: #line 109 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_DIV, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_MULT, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 19: #line 110 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = binop(PCB_ORDC_MOD, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } + { yyctx->val.un.tree = binop(PCB_ORDC_DIV, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 20: -#line 112 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = int2node(yyctx->stack.l_mark[0].un.i); } +#line 111 "../src_plugins/order/const_gram.y" + { yyctx->val.un.tree = binop(PCB_ORDC_MOD, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; case 21: #line 113 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = float2node(yyctx->stack.l_mark[0].un.d); } + { yyctx->val.un.tree = int2node(yyctx->stack.l_mark[0].un.i); } break; case 22: #line 114 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = qstr2node(yyctx->stack.l_mark[0].un.s); } + { yyctx->val.un.tree = float2node(yyctx->stack.l_mark[0].un.d); } break; case 23: #line 115 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = var2node(yyctx->stack.l_mark[0].un.s); } + { yyctx->val.un.tree = qstr2node(yyctx->stack.l_mark[0].un.s); } break; case 24: -#line 117 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = unop(PCB_ORDC_INT, yyctx->stack.l_mark[-1].un.tree); } +#line 116 "../src_plugins/order/const_gram.y" + { yyctx->val.un.tree = var2node(yyctx->stack.l_mark[0].un.s); } break; case 25: #line 118 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = unop(PCB_ORDC_STRING, yyctx->stack.l_mark[-1].un.tree); } + { yyctx->val.un.tree = unop(PCB_ORDC_INT, yyctx->stack.l_mark[-1].un.tree); } break; case 26: #line 119 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = unop(PCB_ORDC_FLOAT, yyctx->stack.l_mark[-1].un.tree); } + { yyctx->val.un.tree = unop(PCB_ORDC_STRING, yyctx->stack.l_mark[-1].un.tree); } break; case 27: -#line 124 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = new_node(PCB_ORDC_BLOCK); yyctx->val.un.tree->ch_first = yyctx->stack.l_mark[-1].un.tree; } +#line 120 "../src_plugins/order/const_gram.y" + { yyctx->val.un.tree = unop(PCB_ORDC_FLOAT, yyctx->stack.l_mark[-1].un.tree); } break; case 28: -#line 127 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } +#line 125 "../src_plugins/order/const_gram.y" + { yyctx->val.un.tree = new_node(PCB_ORDC_BLOCK); yyctx->val.un.tree->ch_first = yyctx->stack.l_mark[-1].un.tree; } break; case 29: #line 128 "../src_plugins/order/const_gram.y" + { yyctx->val.un.tree = NULL; } +break; +case 30: +#line 129 "../src_plugins/order/const_gram.y" { yyctx->val.un.tree = yyctx->stack.l_mark[-1].un.tree; yyctx->val.un.tree->next = yyctx->stack.l_mark[0].un.tree; } break; -case 30: -#line 132 "../src_plugins/order/const_gram.y" +case 31: +#line 133 "../src_plugins/order/const_gram.y" { yyctx->val.un.tree = binop(PCB_ORDC_IF, yyctx->stack.l_mark[-2].un.tree, yyctx->stack.l_mark[0].un.tree); } break; -case 31: -#line 136 "../src_plugins/order/const_gram.y" +case 32: +#line 137 "../src_plugins/order/const_gram.y" { yyctx->val.un.tree = binop(PCB_ORDC_ERROR, id2node(yyctx->stack.l_mark[-4].un.s), qstr2node(yyctx->stack.l_mark[-2].un.s)); } break; -#line 597 "../src_plugins/order/const_gram.c" +#line 605 "../src_plugins/order/const_gram.c" } yyctx->stack.s_mark -= yyctx->yym; yyctx->state = *yyctx->stack.s_mark; Index: const_gram.h =================================================================== --- const_gram.h (revision 36866) +++ const_gram.h (revision 36867) @@ -75,11 +75,12 @@ #define T_LT 267 #define T_AND 268 #define T_OR 269 -#define T_IF 270 -#define T_ERROR 271 -#define T_INT 272 -#define T_FLOAT 273 -#define T_STR 274 +#define T_NOT 270 +#define T_IF 271 +#define T_ERROR 272 +#define T_INT 273 +#define T_FLOAT 274 +#define T_STR 275 #define pcb_ordc_ERRCODE 256 #ifndef pcb_ordc_INITSTACKSIZE Index: const_gram.y =================================================================== --- const_gram.y (revision 36866) +++ const_gram.y (revision 36867) @@ -52,7 +52,7 @@ %token T_CINT T_CFLOAT T_STRING T_QSTR T_ID /* Operators */ -%token T_EQ T_NEQ T_GE T_LE T_GT T_LT T_AND T_OR +%token T_EQ T_NEQ T_GE T_LE T_GT T_LT T_AND T_OR T_NOT /* Keywords for builtin functions */ %token T_IF T_ERROR T_INT T_FLOAT T_STR @@ -63,7 +63,7 @@ %left T_AND %left '+' '-' %left '*' '/' '%' -%left '!' +%left T_NOT %right '(' ')' %type T_QSTR @@ -93,6 +93,7 @@ /*** expressions ***/ expr: '-' expr { $$ = unop(PCB_ORDC_NEG, $2); } + | T_NOT expr { $$ = unop(PCB_ORDC_NOT, $2); } | '(' expr ')' { $$ = $2; } | expr T_EQ expr { $$ = binop(PCB_ORDC_EQ, $1, $3); } | expr T_NEQ expr { $$ = binop(PCB_ORDC_NEQ, $1, $3); } Index: const_lex.c =================================================================== --- const_lex.c (revision 36866) +++ const_lex.c (revision 36867) @@ -18,7 +18,7 @@ #include #include "ureglex/exec.h" -int pcb_ordc_strings[] = {2,33,95,2,38,78,2,60,83,2,61,100,2,62,89,2,101,62,2,102,31,2,105,42,2,115,49,2,124,73,4,1,108,1,111,1,97,1,116,3,18,4,2,102,116,2,110,111,4,1,116,1,114,1,105,1,110,1,103,3,16,4,1,114,1,114,1,111,1,114,3,15,4,1,124,3,13,4,1,38,3,12,4,2,61,105,3,11,4,2,61,108,3,10,4,1,61,3,7,4,1,61,3,6,4,3,9,4,3,8,4,1,116,3,17,4,3,14,4}; +int pcb_ordc_strings[] = {2,33,83,2,38,78,2,60,89,2,61,101,2,62,95,2,101,62,2,102,31,2,105,42,2,115,49,2,124,73,4,1,108,1,111,1,97,1,116,3,19,4,2,102,120,2,110,115,4,1,116,1,114,1,105,1,110,1,103,3,17,4,1,114,1,114,1,111,1,114,3,16,4,1,124,3,14,4,1,38,3,13,4,2,61,106,3,12,4,2,61,109,3,11,4,2,61,112,3,10,4,1,61,3,6,4,3,7,4,3,9,4,3,8,4,1,116,3,18,4,3,15,4}; ureglex_precomp_t pcb_ordc_rules[] = { {pcb_ordc_nfa_0, pcb_ordc_bittab_0, pcb_ordc_chrtyp_0, 1.000000}, {pcb_ordc_nfa_1, pcb_ordc_bittab_0, pcb_ordc_chrtyp_0, 1.000000}, @@ -39,9 +39,10 @@ {ureglex_nfa_str, NULL, NULL, 1.000000}, {ureglex_nfa_str, NULL, NULL, 1.000000}, {ureglex_nfa_str, NULL, NULL, 1.000000}, + {ureglex_nfa_str, NULL, NULL, 1.000000}, {NULL, NULL, NULL, 0.0} }; -#define pcb_ordc_num_rules 19 +#define pcb_ordc_num_rules 20 typedef struct pcb_ordc_ureglex_s { ureglex_precomp_t *rules; char buff[256]; @@ -165,30 +166,34 @@ } return UREGLEX_NOP; case 12:{ + return T_NOT; + } + return UREGLEX_NOP; + case 13:{ return T_AND; } return UREGLEX_NOP; - case 13:{ + case 14:{ return T_OR; } return UREGLEX_NOP; - case 14:{ + case 15:{ return T_IF; } return UREGLEX_NOP; - case 15:{ + case 16:{ return T_ERROR; } return UREGLEX_NOP; - case 16:{ + case 17:{ return T_STRING; } return UREGLEX_NOP; - case 17:{ + case 18:{ return T_INT; } return UREGLEX_NOP; - case 18:{ + case 19:{ return T_FLOAT; } return UREGLEX_NOP; Index: const_lex.h =================================================================== --- const_lex.h (revision 36866) +++ const_lex.h (revision 36867) @@ -54,7 +54,7 @@ #endif /* exec.h END } */ -#define pcb_ordc_num_rules 19 +#define pcb_ordc_num_rules 20 typedef struct pcb_ordc_ureglex_s { ureglex_precomp_t *rules; char buff[256]; Index: const_lex.ul =================================================================== --- const_lex.ul (revision 36866) +++ const_lex.ul (revision 36867) @@ -75,6 +75,7 @@ rulestring <= return T_LE; rulestring > return T_GT; rulestring < return T_LT; +rulestring ! return T_NOT; rulestring && return T_AND; rulestring || return T_OR; Index: constraint.c =================================================================== --- constraint.c (revision 36866) +++ constraint.c (revision 36867) @@ -102,8 +102,11 @@ case PCB_ORDC_LE: printf("le\n"); break; case PCB_ORDC_GT: printf("gt\n"); break; case PCB_ORDC_LT: printf("lt\n"); break; + case PCB_ORDC_AND: printf("and\n"); break; case PCB_ORDC_OR: printf("or\n"); break; + case PCB_ORDC_NOT: printf("not\n"); break; + case PCB_ORDC_ADD: printf("add\n"); break; case PCB_ORDC_SUB: printf("sub\n"); break; case PCB_ORDC_MULT: printf("mult\n"); break; Index: constraint.h =================================================================== --- constraint.h (revision 36866) +++ constraint.h (revision 36867) @@ -28,8 +28,11 @@ PCB_ORDC_LE, PCB_ORDC_GT, PCB_ORDC_LT, + PCB_ORDC_AND, PCB_ORDC_OR, + PCB_ORDC_NOT, + PCB_ORDC_ADD, PCB_ORDC_SUB, PCB_ORDC_MULT,