Mercurial > projects > dil
view 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 source
/++ Author: Aziz Köksal License: GPL2 +/ module Parser; import Lexer; import Token; import Messages; import Information; import Expressions; enum STC { Abstract, Auto, Const, Deprecated, Extern, Final, Invariant, Override, Scope, Static, Synchronized } private alias TOK T; class Parser { 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)); } }