add disequality token ("/=") and rules to CVC parser
authorMorgan Deters <mdeters@gmail.com>
Wed, 13 Apr 2011 05:27:42 +0000 (05:27 +0000)
committerMorgan Deters <mdeters@gmail.com>
Wed, 13 Apr 2011 05:27:42 +0000 (05:27 +0000)
src/parser/cvc/Cvc.g

index 3a8db1c03d9fe788e2b2e3d88c09101e16e67010..0a05271e23833ff09231e6f4c883cb6ba2f3dcb5 100644 (file)
@@ -405,16 +405,22 @@ comparisonFormula[CVC4::Expr& f]
 @init {
   Expr e;
   Kind op;
+  bool negate;
   Debug("parser-extra") << "predicate formula: " << AntlrInput::tokenText(LT(1)) << std::endl;
 }
   : plusTerm[f]
-    ( ( EQUAL_TOK { op = CVC4::kind::EQUAL; }
-      | GT_TOK { op = CVC4::kind::GT; }
-      | GEQ_TOK { op = CVC4::kind::GEQ; } 
-      | LT_TOK { op = CVC4::kind::LT; }
-      | LEQ_TOK { op = CVC4::kind::LEQ; }) 
+    ( ( EQUAL_TOK { op = CVC4::kind::EQUAL; negate = false; }
+      | DISEQUAL_TOK { op = CVC4::kind::EQUAL; negate = true; }
+      | GT_TOK { op = CVC4::kind::GT; negate = false; }
+      | GEQ_TOK { op = CVC4::kind::GEQ; negate = false; } 
+      | LT_TOK { op = CVC4::kind::LT; negate = false; }
+      | LEQ_TOK { op = CVC4::kind::LEQ; negate = false; }) 
       plusTerm[e]
-      { f = MK_EXPR(op, f, e); }
+      { f = MK_EXPR(op, f, e);
+        if(negate) {
+          f = MK_EXPR(CVC4::kind::NOT, f);
+        }
+      }
     )?
   ;
 
@@ -605,6 +611,7 @@ SEMICOLON : ';';
 ARROW_TOK : '->';
 DIV_TOK : '/';
 EQUAL_TOK : '=';
+DISEQUAL_TOK : '/=';
 EXP_TOK : '^';
 GT_TOK : '>';
 GEQ_TOK : '>=';