summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@cs.nyu.edu>2014-02-18 23:10:44 -0500
committerTianyi Liang <tianyi-liang@uiowa.edu>2014-02-20 17:04:50 -0600
commit718d76cb16a0f9dd8db10996d9f61646d4fa2419 (patch)
treec9532e7b4f99bd196193db16bbdd9746e7e467cf
parentf37804c3da98f4eb1888991fd8b7157437aeeb44 (diff)
String parsing example in CVC parser
-rw-r--r--src/parser/cvc/Cvc.g26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/parser/cvc/Cvc.g b/src/parser/cvc/Cvc.g
index 75607b9d8..78be92966 100644
--- a/src/parser/cvc/Cvc.g
+++ b/src/parser/cvc/Cvc.g
@@ -195,6 +195,11 @@ tokens {
BVSLE_TOK = 'BVSLE';
BVSGE_TOK = 'BVSGE';
+ // Strings
+
+ STRING_TOK = 'STRING';
+ SCONCAT_TOK = 'SCONCAT';
+
// these are parsed by special NUMBER_OR_RANGEOP rule, below
DECIMAL_LITERAL;
INTEGER_LITERAL;
@@ -1187,6 +1192,9 @@ restrictedTypePossiblyFunctionLHS[CVC4::Type& t,
t = EXPR_MANAGER->mkBitVectorType(k);
}
+ /* string type */
+ | STRING_TOK { t = EXPR_MANAGER->stringType(); }
+
/* basic types */
| BOOLEAN_TOK { t = EXPR_MANAGER->booleanType(); }
| REAL_TOK { t = EXPR_MANAGER->realType(); }
@@ -1810,6 +1818,24 @@ bvTerm[CVC4::Expr& f]
{ f = MK_EXPR(CVC4::kind::BITVECTOR_IS_INTEGER, f); }
*/
+ | stringTerm[f]
+ ;
+
+stringTerm[CVC4::Expr& f]
+@init {
+ Expr f2;
+ std::string s;
+ std::vector<Expr> args;
+}
+ /* String prefix operators */
+ : SCONCAT_TOK LPAREN formula[f] { args.push_back(f); }
+ ( COMMA formula[f2] { args.push_back(f2); } )+ RPAREN
+ { f = MK_EXPR(CVC4::kind::STRING_CONCAT, args); }
+
+ /* string literal */
+ | str[s]
+ { f = MK_CONST(CVC4::String(s)); }
+
| simpleTerm[f]
;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback