diff options
Diffstat (limited to 'src/parser')
-rw-r--r-- | src/parser/cvc/Cvc.g | 29 | ||||
-rw-r--r-- | src/parser/smt/Smt.g | 1 | ||||
-rw-r--r-- | src/parser/smt2/Smt2.g | 4 |
3 files changed, 19 insertions, 15 deletions
diff --git a/src/parser/cvc/Cvc.g b/src/parser/cvc/Cvc.g index 657a2fe2c..411a0aea1 100644 --- a/src/parser/cvc/Cvc.g +++ b/src/parser/cvc/Cvc.g @@ -351,7 +351,7 @@ unsigned findPivot(const std::vector<unsigned>& operators, return pivot; }/* findPivot() */ -Expr createPrecedenceTree(ExprManager* em, +Expr createPrecedenceTree(Parser* parser, ExprManager* em, const std::vector<CVC4::Expr>& expressions, const std::vector<unsigned>& operators, unsigned startIndex, unsigned stopIndex) { @@ -368,17 +368,20 @@ Expr createPrecedenceTree(ExprManager* em, //Debug("prec") << "pivot[" << startIndex << "," << stopIndex - 1 << "] at " << pivot << std::endl; bool negate; Kind k = getOperatorKind(operators[pivot], negate); - Expr lhs = createPrecedenceTree(em, expressions, operators, startIndex, pivot); - Expr rhs = createPrecedenceTree(em, expressions, operators, pivot + 1, stopIndex); + Expr lhs = createPrecedenceTree(parser, em, expressions, operators, startIndex, pivot); + Expr rhs = createPrecedenceTree(parser, em, expressions, operators, pivot + 1, stopIndex); if(k == kind::EQUAL && lhs.getType().isBoolean()) { - WarningOnce() << "Warning: converting BOOL = BOOL to BOOL <=> BOOL" << std::endl; - k = kind::IFF; + if(parser->strictModeEnabled()) { + WarningOnce() << "Warning: in strict parsing mode, will not convert BOOL = BOOL to BOOL <=> BOOL" << std::endl; + } else { + k = kind::IFF; + } } Expr e = em->mkExpr(k, lhs, rhs); return negate ? em->mkExpr(kind::NOT, e) : e; }/* createPrecedenceTree() recursive variant */ -Expr createPrecedenceTree(ExprManager* em, +Expr createPrecedenceTree(Parser* parser, ExprManager* em, const std::vector<CVC4::Expr>& expressions, const std::vector<unsigned>& operators) { if(Debug.isOn("prec") && operators.size() > 1) { @@ -391,7 +394,7 @@ Expr createPrecedenceTree(ExprManager* em, Debug("prec") << std::endl; } - Expr e = createPrecedenceTree(em, expressions, operators, 0, expressions.size() - 1); + Expr e = createPrecedenceTree(parser, em, expressions, operators, 0, expressions.size() - 1); if(Debug.isOn("prec") && operators.size() > 1) { Expr::setlanguage::Scope ls(Debug("prec"), language::output::LANG_AST); Debug("prec") << "=> " << e << std::endl; @@ -749,9 +752,9 @@ simpleSymbolicExpr[CVC4::SExpr& sexpr] CVC4::Rational r; } : INTEGER_LITERAL - { sexpr = SExpr(AntlrInput::tokenText($INTEGER_LITERAL)); } + { sexpr = SExpr(AntlrInput::tokenToInteger($INTEGER_LITERAL)); } | DECIMAL_LITERAL - { sexpr = SExpr(AntlrInput::tokenText($DECIMAL_LITERAL)); } + { sexpr = SExpr(AntlrInput::tokenToRational($DECIMAL_LITERAL)); } | HEX_LITERAL { sexpr = SExpr(AntlrInput::tokenText($HEX_LITERAL)); } | BINARY_LITERAL @@ -1197,7 +1200,7 @@ formula[CVC4::Expr& f] expressions.push_back(f); } i=morecomparisons[expressions,operators]? - { f = createPrecedenceTree(EXPR_MANAGER, expressions, operators); } + { f = createPrecedenceTree(PARSER_STATE, EXPR_MANAGER, expressions, operators); } ) ; @@ -1321,7 +1324,7 @@ comparison[CVC4::Expr& f] : term[f] { expressions.push_back(f); } ( comparisonBinop[op] term[f] { operators.push_back(op); expressions.push_back(f); } )* - { f = createPrecedenceTree(EXPR_MANAGER, expressions, operators); } + { f = createPrecedenceTree(PARSER_STATE, EXPR_MANAGER, expressions, operators); } ; comparisonBinop[unsigned& op] @@ -1345,7 +1348,7 @@ term[CVC4::Expr& f] } : storeTerm[f] { expressions.push_back(f); } ( arithmeticBinop[op] storeTerm[f] { operators.push_back(op); expressions.push_back(f); } )* - { f = createPrecedenceTree(EXPR_MANAGER, expressions, operators); } + { f = createPrecedenceTree(PARSER_STATE, EXPR_MANAGER, expressions, operators); } ; arithmeticBinop[unsigned& op] @@ -1500,7 +1503,7 @@ bvBinaryOpTerm[CVC4::Expr& f] } : bvNegTerm[f] { expressions.push_back(f); } ( bvBinop[op] bvNegTerm[f] { operators.push_back(op); expressions.push_back(f); } )* - { f = createPrecedenceTree(EXPR_MANAGER, expressions, operators); } + { f = createPrecedenceTree(PARSER_STATE, EXPR_MANAGER, expressions, operators); } ; bvBinop[unsigned& op] @init { diff --git a/src/parser/smt/Smt.g b/src/parser/smt/Smt.g index 53a05a9a4..5a80083b3 100644 --- a/src/parser/smt/Smt.g +++ b/src/parser/smt/Smt.g @@ -536,6 +536,7 @@ annotation[CVC4::Command*& smt_command] { std::string value = AntlrInput::tokenText($USER_VALUE); Assert(*value.begin() == '{'); Assert(*value.rbegin() == '}'); + // trim whitespace value.erase(value.begin(), value.begin() + 1); value.erase(value.begin(), std::find_if(value.begin(), value.end(), std::not1(std::ptr_fun<int, int>(std::isspace)))); value.erase(value.end() - 1); diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g index 926ce1718..d478bd843 100644 --- a/src/parser/smt2/Smt2.g +++ b/src/parser/smt2/Smt2.g @@ -405,9 +405,9 @@ simpleSymbolicExpr[CVC4::SExpr& sexpr] std::string s; } : INTEGER_LITERAL - { sexpr = SExpr(AntlrInput::tokenText($INTEGER_LITERAL)); } + { sexpr = SExpr(AntlrInput::tokenToInteger($INTEGER_LITERAL)); } | DECIMAL_LITERAL - { sexpr = SExpr(AntlrInput::tokenText($DECIMAL_LITERAL)); } + { sexpr = SExpr(AntlrInput::tokenToRational($DECIMAL_LITERAL)); } | str[s] { sexpr = SExpr(s); } | SYMBOL |