# HG changeset patch # User aziz # Date 1183325701 0 # Node ID f043759fb59add716b101b7f53b9e5bb40620c85 # Parent 7e21c4df1c0202703dcf3e7c1d23ce1adb298480 - Added code to parseUnaryExpression(); not fully implemented. - Added class AddressExpression, PreIncrExpression, PreDecrExpression, DerefExpression, SignExpression, NotExpression and CompExpression. diff -r 7e21c4df1c02 -r f043759fb59a trunk/src/Expressions.d --- a/trunk/src/Expressions.d Sun Jul 01 19:39:03 2007 +0000 +++ b/trunk/src/Expressions.d Sun Jul 01 21:35:01 2007 +0000 @@ -10,11 +10,6 @@ } -class UnaryExpression : Expression -{ - -} - class BinaryExpression : Expression { Expression left, right; @@ -223,34 +218,93 @@ { super(left, right, TOK.CatAssign); } } +class UnaryExpression : Expression +{ + Expression e; + this(Expression e) + { this.e = e; } +} + +class AddressExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + +class PreIncrExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + +class PreDecrExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + +class DerefExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + +class SignExpression : UnaryExpression +{ + TOK sign; + this(Expression e, TOK sign) + { + super(e); + this.sign = sign; + } +} + +class NotExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + +class CompExpression : UnaryExpression +{ + this(Expression e) + { super(e); } +} + class PostfixExpression : UnaryExpression { - + this(Expression e) + { super(e); } } class DotExpression : UnaryExpression { - + this(Expression e) + { super(e); } } class NewExpression : UnaryExpression { - + this(Expression e) + { super(e); } } class DeleteExpression : UnaryExpression { - + this(Expression e) + { super(e); } } class CastExpression : UnaryExpression { - + this(Expression e) + { super(e); } } class AnonClassExpression : UnaryExpression { - + this(Expression e) + { super(e); } } class PrimaryExpression diff -r 7e21c4df1c02 -r f043759fb59a trunk/src/Parser.d --- a/trunk/src/Parser.d Sun Jul 01 19:39:03 2007 +0000 +++ b/trunk/src/Parser.d Sun Jul 01 21:35:01 2007 +0000 @@ -270,7 +270,50 @@ Expression parseUnaryExpression() { - return new Expression; + Expression e; + switch (lx.token.type) + { + case T.AndBinary: + nT(); e = new AddressExpression(parseUnaryExpression()); + break; + case T.PlusPlus: + nT(); e = new PreIncrExpression(parseUnaryExpression()); + break; + case T.MinusMinus: + nT(); e = new PreDecrExpression(parseUnaryExpression()); + break; + case T.Mul: + nT(); e = new DerefExpression(parseUnaryExpression()); + break; + case T.Minus: + case T.Plus: + nT(); e = new SignExpression(parseUnaryExpression(), lx.token.type); + break; + case T.Not: + nT(); e = new NotExpression(parseUnaryExpression()); + break; + case T.Tilde: + nT(); e = new CompExpression(parseUnaryExpression()); + break; + case T.New: + // parseNewExpression(); + break; + case T.Delete: + // parseDeleteExpression(); + break; + case T.Cast: + // parseDeleteExpression(); + break; + case T.LParen: + // parse ( Type ) . Identifier + break; + } + return e; + } + + Expression parsePostExpression() + { + return null; } void error(MID id, ...)