diff options
Diffstat (limited to 'src/parser')
-rw-r--r-- | src/parser/cvc/Cvc.g | 9 | ||||
-rw-r--r-- | src/parser/smt2/smt2.cpp | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/parser/cvc/Cvc.g b/src/parser/cvc/Cvc.g index e4849aae6..2dceba768 100644 --- a/src/parser/cvc/Cvc.g +++ b/src/parser/cvc/Cvc.g @@ -227,6 +227,9 @@ tokens { STRING_STOI_TOK = 'STRING_TO_INTEGER'; STRING_ITOS_TOK = 'INTEGER_TO_STRING'; STRING_TO_REGEXP_TOK = 'STRING_TO_REGEXP'; + STRING_TOLOWER_TOK = 'TOLOWER'; + STRING_TOUPPER_TOK = 'TOUPPER'; + STRING_REV_TOK = 'REVERSE'; REGEXP_CONCAT_TOK = 'RE_CONCAT'; REGEXP_UNION_TOK = 'RE_UNION'; REGEXP_INTER_TOK = 'RE_INTER'; @@ -2038,6 +2041,12 @@ stringTerm[CVC4::Expr& f] { f = MK_EXPR(CVC4::kind::STRING_ITOS, f); } | STRING_TO_REGEXP_TOK LPAREN formula[f] RPAREN { f = MK_EXPR(CVC4::kind::STRING_TO_REGEXP, f); } + | STRING_TOLOWER_TOK LPAREN formula[f] RPAREN + { f = MK_EXPR(CVC4::kind::STRING_TOLOWER, f); } + | STRING_TOUPPER_TOK LPAREN formula[f] RPAREN + { f = MK_EXPR(CVC4::kind::STRING_TOUPPER, f); } + | STRING_REV_TOK LPAREN formula[f] RPAREN + { f = MK_EXPR(CVC4::kind::STRING_REV, f); } | REGEXP_CONCAT_TOK LPAREN formula[f] { args.push_back(f); } ( COMMA formula[f2] { args.push_back(f2); } )+ RPAREN { f = MK_EXPR(CVC4::kind::REGEXP_CONCAT, args); } diff --git a/src/parser/smt2/smt2.cpp b/src/parser/smt2/smt2.cpp index 3dd039775..291885278 100644 --- a/src/parser/smt2/smt2.cpp +++ b/src/parser/smt2/smt2.cpp @@ -168,6 +168,7 @@ void Smt2::addStringOperators() { { addOperator(kind::STRING_TOLOWER, "str.tolower"); addOperator(kind::STRING_TOUPPER, "str.toupper"); + addOperator(kind::STRING_REV, "str.rev"); } addOperator(kind::STRING_PREFIX, "str.prefixof" ); addOperator(kind::STRING_SUFFIX, "str.suffixof" ); |