(file) Return to WQL.y CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / WQL

  1 mike  1.1.2.1 /*
  2               **==============================================================================
  3               **
  4               ** Includes
  5               **
  6               **==============================================================================
  7               */
  8               
  9               %{
 10               
 11 mike  1.1.2.5 #include <Pegasus/Common/Config.h>
 12               #include <Pegasus/WQL/WQLOperation.h>
 13               #include <Pegasus/WQL/WQLOperand.h>
 14 mike  1.1.2.6 #include <Pegasus/WQL/WQLParserState.h>
 15 mike  1.1.2.5 #include <Pegasus/WQL/WQLSelectStatement.h>
 16 mike  1.1.2.1 #include <string.h>
 17               #include <stdlib.h>
 18               
 19               #ifdef PEGASUS_OS_TYPE_WINDOWS
 20               # include <malloc.h>
 21               #endif
 22               
 23               #if defined(PEGASUS_COMPILER_ACC) && defined(PEGASUS_OS_HPUX)
 24               # include <alloca.h>
 25               #endif
 26               
 27 mike  1.1.2.5 #if 1
 28 mike  1.1.2.6 # define WQL_TRACE(X) printf X
 29 mike  1.1.2.2 #else
 30               # define WQL_TRACE(X)
 31               #endif
 32               
 33 mike  1.1.2.1 extern int WQL_lex();
 34               extern int WQL_error(char*);
 35               
 36 mike  1.1.2.6 PEGASUS_USING_PEGASUS;
 37               
 38               PEGASUS_NAMESPACE_BEGIN
 39               
 40               extern WQLParserState* globalParserState;
 41               
 42               PEGASUS_NAMESPACE_END
 43               
 44 mike  1.1.2.1 %}
 45               
 46               /*
 47               **==============================================================================
 48               **
 49               ** Union used to pass tokens from Lexer to this Parser.
 50               **
 51               **==============================================================================
 52               */
 53               
 54               %union 
 55               {
 56                  int intValue;
 57                  double doubleValue;
 58                  char* strValue;
 59                  void* nodeValue;
 60               }
 61               
 62               /*
 63               **==============================================================================
 64               **
 65 mike  1.1.2.1 ** Tokens, types, and associative rules.
 66               **
 67               **==============================================================================
 68               */
 69               
 70               %token <intValue> TOK_INTEGER
 71               %token <doubleValue> TOK_DOUBLE
 72 mike  1.1.2.2 %token <strValue> TOK_STRING
 73               %token <intValue> TOK_TRUE
 74               %token <intValue> TOK_FALSE
 75 mike  1.1.2.3 %token <intValue> TOK_NULL
 76 mike  1.1.2.2 
 77               %token <intValue> TOK_EQ
 78               %token <intValue> TOK_NE
 79               %token <intValue> TOK_LT
 80               %token <intValue> TOK_LE
 81               %token <intValue> TOK_GT
 82               %token <intValue> TOK_GE
 83               
 84               %token <intValue> TOK_NOT
 85               %token <intValue> TOK_OR
 86               %token <intValue> TOK_AND
 87 mike  1.1.2.3 %token <intValue> TOK_IS
 88 mike  1.1.2.2 
 89 mike  1.1.2.1 %token <strValue> TOK_IDENTIFIER
 90 mike  1.1.2.2 %token <intValue> TOK_SELECT
 91               %token <intValue> TOK_WHERE
 92               %token <intValue> TOK_FROM
 93               
 94 mike  1.1.2.6 %token <intValue> TOK_UNEXPECTED_CHAR
 95 mike  1.1.2.1 
 96 mike  1.1.2.6 %type <strValue> propertyName
 97 mike  1.1.2.1 %type <nodeValue> propertyList
 98 mike  1.1.2.3 %type <nodeValue> predicate
 99               %type <nodeValue> comparisonPredicate
100               %type <nodeValue> comparisonTerm
101               %type <nodeValue> nullPredicate
102               %type <nodeValue> searchCondition
103               %type <nodeValue> fromClause
104 mike  1.1.2.1 %type <nodeValue> whereClause
105               %type <nodeValue> selectStatement
106 mike  1.1.2.3 %type <nodeValue> selectList
107               %type <nodeValue> selectExpression
108 mike  1.1.2.1 %type <strValue> className
109               
110 mike  1.1.2.2 %left TOK_OR
111               %left TOK_AND
112               %nonassoc TOK_NOT
113               
114               %%
115 mike  1.1.2.1 
116               /*
117               **==============================================================================
118               **
119               ** The grammar itself.
120               **
121               **==============================================================================
122               */
123               
124               start
125                   : selectStatement
126                   {
127 mike  1.1.2.4 	printf("YACC: start\n");
128 mike  1.1.2.1     }
129               
130               selectStatement
131 mike  1.1.2.3     : TOK_SELECT selectList selectExpression
132 mike  1.1.2.1     {
133               
134                   }
135               
136 mike  1.1.2.3 selectList
137                   : '*'
138 mike  1.1.2.1     {
139 mike  1.1.2.6 	globalParserState->statement->appendPropertyName("*");
140 mike  1.1.2.1     }
141 mike  1.1.2.3     | propertyList
142 mike  1.1.2.1     {
143               
144                   }
145               
146 mike  1.1.2.3 propertyList 
147                   : propertyName
148 mike  1.1.2.1     {
149 mike  1.1.2.6 	globalParserState->statement->appendPropertyName($1);
150 mike  1.1.2.1     }
151 mike  1.1.2.3     | propertyList ',' propertyName
152 mike  1.1.2.1     {
153 mike  1.1.2.6 	globalParserState->statement->appendPropertyName($3);
154 mike  1.1.2.1     }
155               
156 mike  1.1.2.3 selectExpression
157                   : fromClause whereClause
158 mike  1.1.2.1     {
159               
160                   }
161 mike  1.1.2.3     | fromClause
162 mike  1.1.2.1     {
163               
164                   }
165               
166 mike  1.1.2.3 fromClause
167                   : TOK_FROM className
168 mike  1.1.2.1     {
169 mike  1.1.2.6 	WQL_TRACE(("YACC: fromClause: TOK_FROM className(%s)\n", $2));
170               	globalParserState->statement->setClassName($2);
171               	delete [] $2;
172 mike  1.1.2.1     }
173               
174 mike  1.1.2.3 whereClause 
175                   : TOK_WHERE searchCondition
176 mike  1.1.2.1     {
177               
178                   }
179               
180 mike  1.1.2.3 searchCondition 
181                   : searchCondition TOK_OR searchCondition
182 mike  1.1.2.1     {
183 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_OR\n"));
184 mike  1.1.2.1     }
185 mike  1.1.2.3     | searchCondition TOK_AND searchCondition
186 mike  1.1.2.1     {
187 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_AND\n"));
188 mike  1.1.2.1     }
189 mike  1.1.2.3     | TOK_NOT searchCondition
190 mike  1.1.2.1     {
191               
192                   }
193 mike  1.1.2.3     | '(' searchCondition ')'
194 mike  1.1.2.1     {
195               
196                   }
197 mike  1.1.2.3     | predicate
198 mike  1.1.2.1     {
199               
200                   }
201 mike  1.1.2.3     | predicate TOK_IS truthValue
202 mike  1.1.2.1     {
203               
204                   }
205 mike  1.1.2.3     | predicate TOK_IS TOK_NOT truthValue
206 mike  1.1.2.1     {
207               
208                   }
209               
210 mike  1.1.2.3 predicate
211                   : comparisonPredicate
212 mike  1.1.2.1     {
213               
214                   }
215 mike  1.1.2.3     | nullPredicate
216 mike  1.1.2.1     {
217               
218                   }
219               
220 mike  1.1.2.3 comparisonPredicate
221                   : comparisonTerm TOK_LT comparisonTerm 
222 mike  1.1.2.1     {
223 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_LT\n"));
224 mike  1.1.2.1     }
225 mike  1.1.2.3     | comparisonTerm TOK_GT comparisonTerm
226 mike  1.1.2.1     {
227 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_GT\n"));
228 mike  1.1.2.1     }
229 mike  1.1.2.3     | comparisonTerm TOK_LE comparisonTerm
230 mike  1.1.2.1     {
231 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_LE\n"));
232 mike  1.1.2.1     }
233 mike  1.1.2.3     | comparisonTerm TOK_GE comparisonTerm
234 mike  1.1.2.1     {
235 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_GE\n"));
236 mike  1.1.2.1     }
237 mike  1.1.2.3     | comparisonTerm TOK_EQ comparisonTerm
238 mike  1.1.2.1     {
239 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_EQ\n"));
240 mike  1.1.2.1     }
241 mike  1.1.2.3     | comparisonTerm TOK_NE comparisonTerm
242 mike  1.1.2.1     {
243 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_NE\n"));
244 mike  1.1.2.1     }
245               
246 mike  1.1.2.3 nullPredicate
247                   : comparisonTerm TOK_IS TOK_NULL
248 mike  1.1.2.1     {
249 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_IS TOK_NULL\n"));
250 mike  1.1.2.1     }
251 mike  1.1.2.3     | comparisonTerm TOK_IS TOK_NOT TOK_NULL
252 mike  1.1.2.1     {
253 mike  1.1.2.5 	WQL_TRACE(("YACC: TOK_NOT TOK_NULL\n"));
254 mike  1.1.2.1     }
255               
256 mike  1.1.2.3 truthValue 
257                   : TOK_TRUE 
258 mike  1.1.2.1     {
259               
260                   }
261 mike  1.1.2.3     | TOK_FALSE
262 mike  1.1.2.1     {
263               
264                   }
265               
266 mike  1.1.2.3 propertyName 
267                   : TOK_IDENTIFIER
268 mike  1.1.2.1     {
269 mike  1.1.2.6 	WQL_TRACE(("YACC: propertyName : TOK_IDENTIFIER(%s)\n", $1));
270               	$$ = $1;
271 mike  1.1.2.1     }
272               
273 mike  1.1.2.3 className : TOK_IDENTIFIER
274 mike  1.1.2.1     {
275 mike  1.1.2.6 	WQL_TRACE(("YACC: TOK_IDENTIFIER %s\n", $1));
276               	$$ = $1;
277 mike  1.1.2.1     }
278               
279 mike  1.1.2.3 comparisonTerm
280                   : propertyName
281 mike  1.1.2.1     {
282               
283                   }
284 mike  1.1.2.3     | TOK_INTEGER
285 mike  1.1.2.1     {
286               
287                   }
288 mike  1.1.2.3     | TOK_DOUBLE
289 mike  1.1.2.1     {
290               
291                   }
292 mike  1.1.2.3     | TOK_STRING
293 mike  1.1.2.1     {
294               
295                   }
296 mike  1.1.2.3     | truthValue
297 mike  1.1.2.1     {
298 mike  1.1.2.5 
299 mike  1.1.2.1     }
300               
301               %%

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2