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));
+  }
 }