Mercurial > projects > dil
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 { |