# HG changeset patch # User aziz # Date 1183419422 0 # Node ID df4e5c7ad58ad587dfb048e8fda3a0d36d30c01b # Parent f043759fb59add716b101b7f53b9e5bb40620c85 - Implemented most of parsePostExpression() and parsePreExpression(). - Added stub for parsePrimaryExpression(). - Added classes PostIncrExpression and PostDecrExpression. diff -r f043759fb59a -r df4e5c7ad58a trunk/src/Expressions.d --- a/trunk/src/Expressions.d Sun Jul 01 21:35:01 2007 +0000 +++ b/trunk/src/Expressions.d Mon Jul 02 23:37:02 2007 +0000 @@ -243,6 +243,18 @@ { super(e); } } +class PostIncrExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + +class PostDecrExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + class DerefExpression : UnaryExpression { this(Expression e) diff -r f043759fb59a -r df4e5c7ad58a trunk/src/Parser.d --- a/trunk/src/Parser.d Sun Jul 01 21:35:01 2007 +0000 +++ b/trunk/src/Parser.d Mon Jul 02 23:37:02 2007 +0000 @@ -270,6 +270,47 @@ Expression parseUnaryExpression() { + return parsePostExpression(); + } + + Expression parsePostExpression() + { + auto e = parsePreExpression(); + while (1) + { + switch (lx.token.type) + { + case T.Dot: + nT(); + Token t; + peek(t); +// if (t.type == T.Identifier) +// +// else if (t.type == T.New) +// e = parseNewExpression(e); + break; + case T.PlusPlus: + nT(); + e = new PostIncrExpression(e); + break; + case T.MinusMinus: + nT(); + e = new PostDecrExpression(e); + break; + case T.LParen: + nT(); +// e = parseCallExpression(e); + break; + case T.LBracket: + // parse Slice- and IndexExpression + break; + } + } + return e; + } + + Expression parsePreExpression() + { Expression e; switch (lx.token.type) { @@ -307,11 +348,14 @@ case T.LParen: // parse ( Type ) . Identifier break; + default: + e = parsePrimaryExpression(); + break; } return e; } - Expression parsePostExpression() + Expression parsePrimaryExpression() { return null; }