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 10:45:23 -0600
commitcf73d7b9f09bda2356c62d16fab03853e48bacbc (patch)
treeb0c7edff41d4be92d7b2de331abb09093abd2fbb
parent531ec6e52b75cd2f600a3fc781383e7539f2335a (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