2 /*============================================================================
3 CMake - Cross Platform Makefile Generator
4 Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
6 Distributed under the OSI-approved BSD License (the "License");
7 see accompanying file Copyright.txt for details.
9 This software is distributed WITHOUT ANY WARRANTY; without even the
10 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11 See the License for more information.
12 ============================================================================*/
15 This file must be translated to C and modified to build everywhere.
19 bison --yacc --name-prefix=cmExpr_yy --defines=cmExprParserTokens.h -ocmExprParser.cxx cmExprParser.y
21 Modify cmExprParser.cxx:
23 - add __HP_aCC to the #if test for yyerrorlab warning suppression
27 /* Configure the parser to use a lexer object. */
28 #define YYPARSE_PARAM yyscanner
29 #define YYLEX_PARAM yyscanner
30 #define YYERROR_VERBOSE 1
31 #define cmExpr_yyerror(x) \
32 cmExprError(yyscanner, x)
33 #define yyGetParser (cmExpr_yyget_extra(yyscanner))
35 /*-------------------------------------------------------------------------*/
36 #include "cmExprParserHelper.h" /* Interface to parser object. */
37 #include "cmExprLexer.h" /* Interface to lexer object. */
38 #include "cmExprParserTokens.h" /* Need YYSTYPE for YY_DECL. */
42 /* Forward declare the lexer entry point. */
45 /* Internal utility functions. */
46 static void cmExprError(yyscan_t yyscanner, const char* message);
49 //#define YYMAXDEPTH 100000
50 //#define YYINITDEPTH 10000
53 /* Disable some warnings in the generated code. */
55 # pragma warn -8004 /* Variable assigned a value that is not used. */
56 # pragma warn -8008 /* condition always returns true */
57 # pragma warn -8060 /* possibly incorrect assignment */
58 # pragma warn -8066 /* unreachable code */
61 # pragma warning (disable: 4102) /* Unused goto label. */
62 # pragma warning (disable: 4065) /* Switch statement contains default but no case. */
66 /* Generate a reentrant parser object. */
69 /*-------------------------------------------------------------------------*/
79 %token exp_CLOSEPARENT
86 /*-------------------------------------------------------------------------*/
94 yyGetParser->SetResult($<Number>1);
99 {$<Number>$ = $<Number>1;}
102 {$<Number>$ = $<Number>1 | $<Number>3;}
106 {$<Number>$ = $<Number>1;}
108 bitwiseor exp_XOR bitwisexor
109 {$<Number>$ = $<Number>1 ^ $<Number>3;}
113 {$<Number>$ = $<Number>1;}
115 bitwisexor exp_AND bitwiseand
116 {$<Number>$ = $<Number>1 & $<Number>3;}
120 {$<Number>$ = $<Number>1;}
122 bitwiseand exp_SHIFTLEFT shift
123 {$<Number>$ = $<Number>1 << $<Number>3;}
125 bitwiseand exp_SHIFTRIGHT shift
126 {$<Number>$ = $<Number>1 >> $<Number>3;}
131 {$<Number>$ = $<Number>1;}
134 {$<Number>$ = $<Number>1 + $<Number>3;}
137 {$<Number>$ = $<Number>1 - $<Number>3;}
141 {$<Number>$ = $<Number>1;}
143 term exp_TIMES factor
144 {$<Number>$ = $<Number>1 * $<Number>3;}
146 term exp_DIVIDE factor
147 {$<Number>$ = $<Number>1 / $<Number>3;}
150 {$<Number>$ = $<Number>1 % $<Number>3;}
154 {$<Number>$ = $<Number>1;}
156 exp_OPENPARENT exp exp_CLOSEPARENT
157 {$<Number>$ = $<Number>2;}
164 /*--------------------------------------------------------------------------*/
165 void cmExprError(yyscan_t yyscanner, const char* message)
167 yyGetParser->Error(message);