# HG changeset patch # User aziz # Date 1183631704 0 # Node ID ac8d961d10d1ec6e10238f5c1003b18dbd7c9f08 # Parent 9e6d66f647c9987ee908ab827b80d3a1cb521c18 - Added code for parsing This-,Super-,Null-,Bool-,Dollar-,CharLiteral- and StringLiteralExpression. diff -r 9e6d66f647c9 -r ac8d961d10d1 trunk/src/Expressions.d --- a/trunk/src/Expressions.d Wed Jul 04 23:00:01 2007 +0000 +++ b/trunk/src/Expressions.d Thu Jul 05 10:35:04 2007 +0000 @@ -329,11 +329,6 @@ { super(e); } } -class PrimaryExpression -{ - -} - class IndexExpression : UnaryExpression { Expression[] args; @@ -355,6 +350,67 @@ } } +/* +class PrimaryExpression +{ + +} +*/ + +class GlobalIdExpression : Expression +{ + string identifier; + this(string identifier) + { + this.identifier = identifier; + } +} + +class ThisExpression : Expression +{ + this() + {} +} + +class SuperExpression : Expression +{ + this() + {} +} + +class NullExpression : Expression +{ + this() + {} +} + +class DollarExpression : Expression +{ + this() + {} +} + +class BoolExpression : Expression +{ + bool value; + this(bool value) + { this.value = value; } +} + +class CharLiteralExpression : Expression +{ + TOK tok; + this(TOK tok) + { this.tok = tok; } +} + +class StringLiteralExpression : Expression +{ + string str; + this(string str) + { this.str = str; } +} + class AssertExpression { diff -r 9e6d66f647c9 -r ac8d961d10d1 trunk/src/Parser.d --- a/trunk/src/Parser.d Wed Jul 04 23:00:01 2007 +0000 +++ b/trunk/src/Parser.d Thu Jul 05 10:35:04 2007 +0000 @@ -388,7 +388,74 @@ switch (lx.token.type) { case T.Identifier: - + break; + case T.Dot: + nT(); +// if (lx.token.type != T.Identifier) +// error(); + e = new GlobalIdExpression(lx.token.srcText); + break; + case T.This: + nT(); + e = new ThisExpression(); + break; + case T.Super: + nT(); + e = new SuperExpression(); + break; + case T.Null: + nT(); + e = new NullExpression(); + break; + case T.True, T.False: + nT(); + e = new BoolExpression(lx.token.type == T.True ? true : false); + break; + case T.Dollar: + nT(); + e = new DollarExpression(); + break; + case T.Int32/*, ...*/: // Number literals + break; + case T.CharLiteral, T.WCharLiteral, T.DCharLiteral: + nT(); + e = new CharLiteralExpression(lx.token.type); + break; + case T.String: + char[] buffer = lx.token.str; + nT(); + while (lx.token.type == T.String) + { + string tmp = lx.token.str; + if (tmp.length > 1) + { + buffer[$-1] = tmp[0]; // replace '\0' + buffer ~= tmp[1..$]; // append the rest + } + nT(); + } + e = new StringLiteralExpression(buffer); + break; + case T.LBracket: + break; + case T.LBrace: + break; + case T.Function, T.Delegate: + break; + case T.Assert: + break; + case T.Mixin: + break; + case T.Import: + break; + case T.Typeid: + break; + case T.Is: + break; + case T.LParen: + break; + default: + // BasicType . Identifier } return e; } diff -r 9e6d66f647c9 -r ac8d961d10d1 trunk/src/Token.d --- a/trunk/src/Token.d Wed Jul 04 23:00:01 2007 +0000 +++ b/trunk/src/Token.d Thu Jul 05 10:35:04 2007 +0000 @@ -97,7 +97,7 @@ struct Token { TOK type; - Position pos; +// Position pos; char* start; char* end;