Mercurial > projects > dil
diff trunk/src/Parser.d @ 71:b3777cca323c
- Added Identity and NotIdentity tokens.
- Added constructor to Parser. Added error method and parseCondExpression().
- Added parseAssignExpression() method.
- Moved arguments() function from error() method of Lexer to module Information.
- Added members and constructor to BinaryExpression.
- Added XYZAssignExpression classes.
- Added calls to super() to classes that inherit from BinaryExpression.
author | aziz |
---|---|
date | Sun, 01 Jul 2007 16:16:05 +0000 |
parents | 0d3ef6daec04 |
children | f75e359f939f |
line wrap: on
line diff
--- a/trunk/src/Parser.d Sun Jul 01 14:49:05 2007 +0000 +++ b/trunk/src/Parser.d Sun Jul 01 16:16:05 2007 +0000 @@ -4,6 +4,9 @@ +/ module Parser; import Lexer; +import Token; +import Messages; +import Information; import Expressions; enum STC @@ -21,9 +24,77 @@ Synchronized } +private alias TOK T; + class Parser { - private Lexer lx; - alias lx.nextToken nextToken; + Lexer lx; + TOK delegate() nT; + + Information[] errors; + + this(char[] srcText, string fileName) + { + lx = new Lexer(srcText, fileName); + nT = &lx.nextToken; + } + Expression parseAssignExpression() + { + auto e = parseCondExpression(); + switch (lx.token.type) + { + case T.Assign: + nT(); e = new AssignExpression(e, parseAssignExpression()); + break; + case T.LShiftAssign: + nT(); e = new LShiftAssignExpression(e, parseAssignExpression()); + break; + case T.RShiftAssign: + nT(); e = new RShiftAssignExpression(e, parseAssignExpression()); + break; + case T.URShiftAssign: + nT(); e = new URShiftAssignExpression(e, parseAssignExpression()); + break; + case T.OrAssign: + nT(); e = new OrAssignExpression(e, parseAssignExpression()); + break; + case T.AndAssign: + nT(); e = new AndAssignExpression(e, parseAssignExpression()); + break; + case T.PlusAssign: + nT(); e = new PlusAssignExpression(e, parseAssignExpression()); + break; + case T.MinusAssign: + nT(); e = new MinusAssignExpression(e, parseAssignExpression()); + break; + case T.DivAssign: + nT(); e = new DivAssignExpression(e, parseAssignExpression()); + break; + case T.MulAssign: + nT(); e = new MulAssignExpression(e, parseAssignExpression()); + break; + case T.ModAssign: + nT(); e = new ModAssignExpression(e, parseAssignExpression()); + break; + case T.XorAssign: + nT(); e = new XorAssignExpression(e, parseAssignExpression()); + break; + case T.CatAssign: + nT(); e = new CatAssignExpression(e, parseAssignExpression()); + break; + default: + break; + } + return e; + } + Expression parseCondExpression() + { + return new Expression(); + } + + void error(MID id, ...) + { + errors ~= new Information(Information.Type.Parser, id, lx.loc, arguments(_arguments, _argptr)); + } }