diff trunk/src/Parser.d @ 74:30b0fb85dda9

- Implemented parseCmpExpression(). - Added stub for parseShiftExpressiont().
author aziz
date Sun, 01 Jul 2007 19:01:00 +0000
parents 11572f4a138c
children 3f976d9e0833
line wrap: on
line diff
--- a/trunk/src/Parser.d	Sun Jul 01 18:26:05 2007 +0000
+++ b/trunk/src/Parser.d	Sun Jul 01 19:01:00 2007 +0000
@@ -178,7 +178,48 @@
 
   Expression parseCmpExpression()
   {
-    return new Expression;
+    TOK operator = lx.token.type;
+
+    auto e = parseShiftExpression();
+
+    switch (operator)
+    {
+    case T.Equal, T.NotEqual:
+      nT();
+      e = new EqualExpression(e, parseShiftExpression(), operator);
+      break;
+    case T.Not:
+      Token t;
+      lx.peek(t);
+      if (t.type != T.Is)
+        break;
+      nT();
+      operator = T.NotIdentity;
+      goto LNotIdentity;
+    case T.Identity:
+      operator = T.Identity;
+    LNotIdentity:
+      nT();
+      e = new IsExpression(e, parseShiftExpression(), operator);
+      break;
+    case T.LessEqual, T.Less, T.GreaterEqual, T.Greater,
+         T.Unordered, T.UorE, T.UorG, T.UorGorE,
+         T.UorL, T.UorLorE, T.LorEorG, T.LorG:
+      nT();
+      e = new RelExpression(e, parseShiftExpression(), operator);
+      break;
+    case T.In:
+      nT();
+      e = new InExpression(e, parseShiftExpression(), operator);
+      break;
+    default:
+    }
+    return e;
+  }
+
+  Expression parseShiftExpression()
+  {
+    return new Expression();
   }
 
   void error(MID id, ...)