comparison trunk/src/Parser.d @ 91:ac8610aaf622

- Moved parseUnaryExpression() one place up in the method list.
author aziz
date Thu, 05 Jul 2007 21:23:00 +0000
parents a02950cb7036
children 6de2e6e7d872
comparison
equal deleted inserted replaced
90:a02950cb7036 91:ac8610aaf622
270 break; 270 break;
271 } 271 }
272 return new Expression(); 272 return new Expression();
273 } 273 }
274 274
275 Expression parseUnaryExpression()
276 {
277 Expression e;
278 switch (token.type)
279 {
280 case T.AndBinary:
281 nT(); e = new AddressExpression(parseUnaryExpression());
282 break;
283 case T.PlusPlus:
284 nT(); e = new PreIncrExpression(parseUnaryExpression());
285 break;
286 case T.MinusMinus:
287 nT(); e = new PreDecrExpression(parseUnaryExpression());
288 break;
289 case T.Mul:
290 nT(); e = new DerefExpression(parseUnaryExpression());
291 break;
292 case T.Minus:
293 case T.Plus:
294 nT(); e = new SignExpression(parseUnaryExpression(), token.type);
295 break;
296 case T.Not:
297 nT(); e = new NotExpression(parseUnaryExpression());
298 break;
299 case T.Tilde:
300 nT(); e = new CompExpression(parseUnaryExpression());
301 break;
302 case T.New:
303 // parseNewExpression();
304 break;
305 case T.Delete:
306 nT();
307 e = new DeleteExpression(parseUnaryExpression());
308 break;
309 case T.Cast:
310 nT();
311 // Type type = parseType();
312 e = new CastExpression(parseUnaryExpression() /*, type*/);
313 break;
314 case T.LParen:
315 // parse ( Type ) . Identifier
316 break;
317 default:
318 e = parsePostExpression(parsePrimaryExpression());
319 break;
320 }
321 assert(e !is null);
322 return e;
323 }
324
275 Expression parsePostExpression(Expression e) 325 Expression parsePostExpression(Expression e)
276 { 326 {
277 while (1) 327 while (1)
278 { 328 {
279 switch (token.type) 329 switch (token.type)
324 374
325 e = new IndexExpression(e, es); 375 e = new IndexExpression(e, es);
326 break; 376 break;
327 } 377 }
328 } 378 }
329 return e;
330 }
331
332 Expression parseUnaryExpression()
333 {
334 Expression e;
335 switch (token.type)
336 {
337 case T.AndBinary:
338 nT(); e = new AddressExpression(parseUnaryExpression());
339 break;
340 case T.PlusPlus:
341 nT(); e = new PreIncrExpression(parseUnaryExpression());
342 break;
343 case T.MinusMinus:
344 nT(); e = new PreDecrExpression(parseUnaryExpression());
345 break;
346 case T.Mul:
347 nT(); e = new DerefExpression(parseUnaryExpression());
348 break;
349 case T.Minus:
350 case T.Plus:
351 nT(); e = new SignExpression(parseUnaryExpression(), token.type);
352 break;
353 case T.Not:
354 nT(); e = new NotExpression(parseUnaryExpression());
355 break;
356 case T.Tilde:
357 nT(); e = new CompExpression(parseUnaryExpression());
358 break;
359 case T.New:
360 // parseNewExpression();
361 break;
362 case T.Delete:
363 nT();
364 e = new DeleteExpression(parseUnaryExpression());
365 break;
366 case T.Cast:
367 nT();
368 // Type type = parseType();
369 e = new CastExpression(parseUnaryExpression() /*, type*/);
370 break;
371 case T.LParen:
372 // parse ( Type ) . Identifier
373 break;
374 default:
375 e = parsePostExpression(parsePrimaryExpression());
376 break;
377 }
378 assert(e !is null);
379 return e; 379 return e;
380 } 380 }
381 381
382 Expression parsePrimaryExpression() 382 Expression parsePrimaryExpression()
383 { 383 {