Importing Chris's recent changes to CVC3's ValidityChecker into the compatibility...
authorMorgan Deters <mdeters@gmail.com>
Mon, 3 Oct 2011 18:24:57 +0000 (18:24 +0000)
committerMorgan Deters <mdeters@gmail.com>
Mon, 3 Oct 2011 18:24:57 +0000 (18:24 +0000)
src/compat/cvc3_compat.cpp
src/compat/cvc3_compat.h

index 25901f872d533db5ee15cf5e49839d76b31c38a2..c8e9106a7217ff3a053a90dc997e83209e668c01 100644 (file)
@@ -1148,11 +1148,31 @@ Type ValidityChecker::importType(const Type& t) {
 }
 
 void ValidityChecker::cmdsFromString(const std::string& s, InputLanguage lang) {
-  Unimplemented("This CVC3 compatibility function not yet implemented (sorry!)");
+  std::stringstream ss(s, std::stringstream::in);
+  return loadFile(ss, lang, false);
 }
 
-Expr ValidityChecker::exprFromString(const std::string& e) {
-  Unimplemented("This CVC3 compatibility function not yet implemented (sorry!)");
+Expr ValidityChecker::exprFromString(const std::string& s, InputLanguage lang) {
+  std::stringstream ss;
+
+  if( lang != PRESENTATION_LANG && lang != SMTLIB_V2_LANG ) {
+    ss << lang;
+    throw Exception("Unsupported language in exprFromString: " + ss.str());
+  }
+
+  CVC4::parser::Parser* p = CVC4::parser::ParserBuilder(d_em, "<internal>").withStringInput(s).withInputLanguage(lang).build();
+  Expr dummy = p->nextExpression();
+  if( dummy.isNull() ) {
+    throw CVC4::parser::ParserException("Parser result is null: '" + s + "'");
+  }
+  //DebugAssert(dummy.getKind() == RAW_LIST, "Expected list expression");
+  //DebugAssert(dummy.arity() == 2, "Expected two children");
+
+  Expr e = parseExpr(dummy[1]);
+
+  delete p;
+
+  return e;
 }
 
 Expr ValidityChecker::trueExpr() {
index 63df75a68bfaa10d940d0b93bab8e0f446a5264a..2798c5b3c1556f2a63df31de60f4a0472260981b 100644 (file)
@@ -747,7 +747,11 @@ public:
                               InputLanguage lang = PRESENTATION_LANG);
 
   //! Parse an expression from a presentation language string
-  virtual Expr exprFromString(const std::string& e);
+  /*! Only PRESENTATION_LANG and SMTLIB_V2_LANG are supported. Any other
+   *  value for lang will raise an exception.
+   */
+  virtual Expr exprFromString(const std::string& e,
+                              InputLanguage lang = PRESENTATION_LANG);
 
   /*@}*/ // End of General Expr Methods