(Not) Handling parameterized sorts in SMT v2
authorChristopher L. Conway <christopherleeconway@gmail.com>
Thu, 29 Apr 2010 19:45:24 +0000 (19:45 +0000)
committerChristopher L. Conway <christopherleeconway@gmail.com>
Thu, 29 Apr 2010 19:45:24 +0000 (19:45 +0000)
src/parser/input.h
src/parser/smt/Smt.g
src/parser/smt2/Smt2.g

index 21c5c4869f118af83c3be36da1788347928f6708..ecc2063db46378c0dd5c353b8d8a80cd685bc3ff 100644 (file)
@@ -167,7 +167,10 @@ public:
 
   /** Retrieve the text associated with a token. */
   inline static std::string tokenText(pANTLR3_COMMON_TOKEN token);
-
+  /** Retrieve an Integer from the text of a token */
+  inline static Integer tokenToInteger( pANTLR3_COMMON_TOKEN token );
+  /** Retrieve a Rational from the text of a token */
+  inline static Rational tokenToRational(pANTLR3_COMMON_TOKEN token);
 
 protected:
   /** Create an input. This input takes ownership of the given input stream,
@@ -231,6 +234,16 @@ std::string Input::tokenText(pANTLR3_COMMON_TOKEN token) {
   return txt;
 }
 
+Integer Input::tokenToInteger(pANTLR3_COMMON_TOKEN token) {
+  Integer i( tokenText(token) );
+  return i;
+}
+
+Rational Input::tokenToRational(pANTLR3_COMMON_TOKEN token) {
+  Rational r( tokenText(token) );
+  return r;
+}
+
 }/* CVC4::parser namespace */
 }/* CVC4 namespace */
 
index ba5e8abf5a353d3484698ea87736c39dfa54dd96..2dd680f090826d6826d3d777fe789b61a6013d5c 100644 (file)
@@ -236,14 +236,12 @@ annotatedFormula[CVC4::Expr& expr]
   | TRUE_TOK          { expr = MK_CONST(true); }
   | FALSE_TOK         { expr = MK_CONST(false); }
   | NUMERAL_TOK
-    { Integer num( Input::tokenText($NUMERAL_TOK) );
-      expr = MK_CONST(num); }
+    { expr = MK_CONST( Input::tokenToInteger($NUMERAL_TOK) ); }
   | RATIONAL_TOK
     { // FIXME: This doesn't work because an SMT rational is not a valid GMP rational string
-      Rational rat( Input::tokenText($RATIONAL_TOK) );
-      expr = MK_CONST(rat); }
+      expr = MK_CONST( Input::tokenToRational($RATIONAL_TOK) ); }
     // NOTE: Theory constants go here
-    /* TODO: let, flet, quantifiers, arithmetic constants */
+    /* TODO: quantifiers, arithmetic constants */
   ;
 
 /**
index 44dd041c375c1b1677a7ee2249a08ca04e6298e9..422e4b19ef74794a8c9fcede5ececd387778b7bc 100644 (file)
@@ -99,6 +99,7 @@ setLogic(Parser *parser, const std::string& name) {
     Unhandled(name);
   }
 }
+
 }
 
 
@@ -140,8 +141,10 @@ command returns [CVC4::Command* cmd]
     { cmd = new SetBenchmarkStatusCommand(b_status); }  
   | /* sort declaration */
     DECLARE_SORT_TOK identifier[name,CHECK_UNDECLARED,SYM_SORT] n=NUMERAL_TOK
-    // FIXME: What does the numeral argument mean?
-    { Debug("parser") << "declare sort: '" << name << "' " << n << std::endl;
+    { Debug("parser") << "declare sort: '" << name << "' arity=" << n << std::endl;
+      if( Input::tokenToInteger(n) > 0 ) {
+        Unimplemented("Parameterized user sorts.");
+      }
       PARSER_STATE->mkSort(name); 
       $cmd = new DeclarationCommand(name,EXPR_MANAGER->kindType()); }
   | /* function declaration */
@@ -223,12 +226,10 @@ term[CVC4::Expr& expr]
   | TRUE_TOK          { expr = MK_CONST(true); }
   | FALSE_TOK         { expr = MK_CONST(false); }
   | NUMERAL_TOK
-    { Integer num( Input::tokenText($NUMERAL_TOK) );
-      expr = MK_CONST(num); }
+    { expr = MK_CONST( Input::tokenToInteger($NUMERAL_TOK) ); }
   | RATIONAL_TOK
     { // FIXME: This doesn't work because an SMT rational is not a valid GMP rational string
-      Rational rat( Input::tokenText($RATIONAL_TOK) );
-      expr = MK_CONST(rat); }
+      expr = MK_CONST( Input::tokenToRational($RATIONAL_TOK) ); }
     // NOTE: Theory constants go here
   ;