From f6c00e74c29ca35f7311aa6e79b9f363263f2fbd Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Mon, 17 Oct 2005 16:53:11 -0400 Subject: ENH: Fix precedence --- Source/cmExprParser.cxx | 110 ++++++++++++++++++++++++------------------------ Source/cmExprParser.y | 26 ++++++------ 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/Source/cmExprParser.cxx b/Source/cmExprParser.cxx index 00b9c5e..d1b2fa8 100644 --- a/Source/cmExprParser.cxx +++ b/Source/cmExprParser.cxx @@ -97,7 +97,7 @@ /* Copy the first part of user declarations. */ -#line 1 "/home/andy/vtk/CMake/Source/cmExprParser.y" + /*========================================================================= @@ -191,7 +191,7 @@ typedef int YYSTYPE; /* Line 214 of yacc.c. */ -#line 195 "/home/andy/vtk/CMake-bin/Source/cmExprParser.cxx" + #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -354,7 +354,7 @@ static const unsigned char yytranslate[] = static const unsigned char yyprhs[] = { 0, 0, 3, 5, 7, 11, 13, 17, 19, 23, - 25, 29, 33, 35, 39, 43, 47, 49, 53, 57, + 25, 29, 33, 35, 39, 43, 45, 49, 53, 57, 59 }; @@ -363,10 +363,10 @@ static const yysigned_char yyrhs[] = { 18, 0, -1, 19, -1, 20, -1, 19, 12, 20, -1, 21, -1, 20, 14, 21, -1, 22, -1, 21, - 13, 22, -1, 23, -1, 22, 3, 23, -1, 22, - 4, 23, -1, 24, -1, 23, 5, 24, -1, 23, - 6, 24, -1, 23, 7, 24, -1, 25, -1, 24, - 8, 25, -1, 24, 9, 25, -1, 16, -1, 10, + 13, 22, -1, 23, -1, 22, 8, 23, -1, 22, + 9, 23, -1, 24, -1, 23, 3, 24, -1, 23, + 4, 24, -1, 25, -1, 24, 5, 25, -1, 24, + 6, 25, -1, 24, 7, 25, -1, 16, -1, 10, 19, 11, -1 }; @@ -374,7 +374,7 @@ static const yysigned_char yyrhs[] = static const unsigned char yyrline[] = { 0, 94, 94, 100, 103, 107, 110, 114, 117, 121, - 124, 127, 131, 134, 137, 140, 144, 147, 150, 155, + 124, 127, 132, 135, 138, 142, 145, 148, 151, 155, 158 }; #endif @@ -388,7 +388,7 @@ static const char *const yytname[] = "exp_DIVIDE", "exp_MOD", "exp_SHIFTLEFT", "exp_SHIFTRIGHT", "exp_OPENPARENT", "exp_CLOSEPARENT", "exp_OR", "exp_AND", "exp_XOR", "exp_NOT", "exp_NUMBER", "$accept", "Start", "exp", "bitwiseor", - "bitwisexor", "bitwiseand", "term", "factor", "shift", 0 + "bitwisexor", "bitwiseand", "shift", "term", "factor", 0 }; #endif @@ -406,7 +406,7 @@ static const unsigned short int yytoknum[] = static const unsigned char yyr1[] = { 0, 17, 18, 19, 19, 20, 20, 21, 21, 22, - 22, 22, 23, 23, 23, 23, 24, 24, 24, 25, + 22, 22, 23, 23, 23, 24, 24, 24, 24, 25, 25 }; @@ -414,7 +414,7 @@ static const unsigned char yyr1[] = static const unsigned char yyr2[] = { 0, 2, 1, 1, 3, 1, 3, 1, 3, 1, - 3, 3, 1, 3, 3, 3, 1, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 3, 3, 1, 3 }; @@ -424,9 +424,9 @@ static const unsigned char yyr2[] = static const unsigned char yydefact[] = { 0, 0, 19, 0, 2, 3, 5, 7, 9, 12, - 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 6, 8, 10, 11, 13, - 14, 15, 17, 18 + 14, 16, 17, 18 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -437,19 +437,19 @@ static const yysigned_char yydefgoto[] = /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -12 +#define YYPACT_NINF -14 static const yysigned_char yypact[] = { - -10, -10, -12, 18, 7, 6, 8, 1, -4, 2, - -12, 3, -12, -10, -10, -10, -10, -10, -10, -10, - -10, -10, -10, -12, 6, 8, 1, -4, -4, 2, - 2, 2, -12, -12 + -10, -10, -14, 18, 7, 6, 8, 2, 1, -4, + -14, 3, -14, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -14, 6, 8, 2, 1, 1, -4, + -4, -14, -14, -14 }; /* YYPGOTO[NTERM-NUM]. */ static const yysigned_char yypgoto[] = { - -12, -12, 21, 10, 11, 9, 0, -11, -9 + -14, -14, 21, 10, 11, 9, 0, -6, -13 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -459,15 +459,15 @@ static const yysigned_char yypgoto[] = #define YYTABLE_NINF -1 static const unsigned char yytable[] = { - 1, 18, 19, 20, 16, 17, 2, 29, 30, 31, - 21, 22, 32, 33, 23, 13, 27, 28, 12, 13, + 1, 20, 21, 22, 18, 19, 2, 31, 32, 33, + 16, 17, 29, 30, 23, 13, 27, 28, 12, 13, 14, 15, 11, 24, 26, 25 }; static const unsigned char yycheck[] = { - 10, 5, 6, 7, 3, 4, 16, 18, 19, 20, - 8, 9, 21, 22, 11, 12, 16, 17, 0, 12, + 10, 5, 6, 7, 3, 4, 16, 20, 21, 22, + 8, 9, 18, 19, 11, 12, 16, 17, 0, 12, 14, 13, 1, 13, 15, 14 }; @@ -476,9 +476,9 @@ static const unsigned char yycheck[] = static const unsigned char yystos[] = { 0, 10, 16, 18, 19, 20, 21, 22, 23, 24, - 25, 19, 0, 12, 14, 13, 3, 4, 5, 6, - 7, 8, 9, 11, 20, 21, 22, 23, 23, 24, - 24, 24, 25, 25 + 25, 19, 0, 12, 14, 13, 8, 9, 3, 4, + 5, 6, 7, 11, 20, 21, 22, 23, 23, 24, + 24, 25, 25, 25 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -1090,99 +1090,99 @@ yyreduce: switch (yyn) { case 2: -#line 95 "/home/andy/vtk/CMake/Source/cmExprParser.y" + { yyGetParser->SetResult(yyvsp[0].Number); } break; case 3: -#line 101 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[0].Number;} break; case 4: -#line 104 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[-2].Number | yyvsp[0].Number;} break; case 5: -#line 108 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[0].Number;} break; case 6: -#line 111 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[-2].Number ^ yyvsp[0].Number;} break; case 7: -#line 115 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[0].Number;} break; case 8: -#line 118 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[-2].Number & yyvsp[0].Number;} break; case 9: -#line 122 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[0].Number;} break; case 10: -#line 125 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number + yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number << yyvsp[0].Number;} break; case 11: -#line 128 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number - yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number >> yyvsp[0].Number;} break; case 12: -#line 132 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[0].Number;} break; case 13: -#line 135 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number * yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number + yyvsp[0].Number;} break; case 14: -#line 138 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number / yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number - yyvsp[0].Number;} break; case 15: -#line 141 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number % yyvsp[0].Number;} + + {yyval.Number = yyvsp[0].Number;} break; case 16: -#line 145 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number * yyvsp[0].Number;} break; case 17: -#line 148 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number << yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number / yyvsp[0].Number;} break; case 18: -#line 151 "/home/andy/vtk/CMake/Source/cmExprParser.y" - {yyval.Number = yyvsp[-2].Number >> yyvsp[0].Number;} + + {yyval.Number = yyvsp[-2].Number % yyvsp[0].Number;} break; case 19: -#line 156 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[0].Number;} break; case 20: -#line 159 "/home/andy/vtk/CMake/Source/cmExprParser.y" + {yyval.Number = yyvsp[-1].Number;} break; @@ -1190,7 +1190,7 @@ yyreduce: } /* Line 1010 of yacc.c. */ -#line 1194 "/home/andy/vtk/CMake-bin/Source/cmExprParser.cxx" + yyvsp -= yylen; yyssp -= yylen; @@ -1415,7 +1415,7 @@ yyreturn: } -#line 163 "/home/andy/vtk/CMake/Source/cmExprParser.y" + /* End of grammar */ diff --git a/Source/cmExprParser.y b/Source/cmExprParser.y index 485972c..27935f6 100644 --- a/Source/cmExprParser.y +++ b/Source/cmExprParser.y @@ -118,13 +118,24 @@ bitwisexor exp_AND bitwiseand {$$ = $1 & $3;} bitwiseand: +shift +{$$ = $1;} +| +bitwiseand exp_SHIFTLEFT shift +{$$ = $1 << $3;} +| +bitwiseand exp_SHIFTRIGHT shift +{$$ = $1 >> $3;} + + +shift: term {$$ = $1;} | -bitwiseand exp_PLUS term +shift exp_PLUS term {$$ = $1 + $3;} | -bitwiseand exp_MINUS term +shift exp_MINUS term {$$ = $1 - $3;} term: @@ -141,17 +152,6 @@ term exp_MOD factor {$$ = $1 % $3;} factor: -shift -{$$ = $1;} -| -factor exp_SHIFTLEFT shift -{$$ = $1 << $3;} -| -factor exp_SHIFTRIGHT shift -{$$ = $1 >> $3;} - - -shift: exp_NUMBER {$$ = $1;} | -- cgit v0.12