summaryrefslogtreecommitdiff
path: root/src/parser/smt2/Smt2.g
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/smt2/Smt2.g')
-rw-r--r--src/parser/smt2/Smt2.g20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g
index 11ccb4935..7ef7edbbe 100644
--- a/src/parser/smt2/Smt2.g
+++ b/src/parser/smt2/Smt2.g
@@ -1549,6 +1549,12 @@ termNonVariable[CVC4::api::Term& expr, CVC4::api::Term& expr2]
}
expr = SOLVER->mkTuple(sorts, terms);
}
+ | LPAREN_TOK TUPLE_PROJECT_TOK term[expr,expr2] RPAREN_TOK
+ {
+ std::vector<uint32_t> indices;
+ api::Op op = SOLVER->mkOp(api::TUPLE_PROJECT, indices);
+ expr = SOLVER->mkTerm(op, expr);
+ }
| /* an atomic term (a term with no subterms) */
termAtomic[atomTerm] { expr = atomTerm; }
;
@@ -1672,6 +1678,19 @@ identifier[CVC4::ParseOp& p]
// put m in expr so that the caller can deal with this case
p.d_expr = SOLVER->mkInteger(AntlrInput::tokenToUnsigned($m));
}
+ | TUPLE_PROJECT_TOK nonemptyNumeralList[numerals]
+ {
+ // we adopt a special syntax (_ tuple_project i_1 ... i_n) where
+ // i_1, ..., i_n are numerals
+ p.d_kind = api::TUPLE_PROJECT;
+ std::vector<uint32_t> indices(numerals.size());
+ for(size_t i = 0; i < numerals.size(); ++i)
+ {
+ // convert uint64_t to uint32_t
+ indices[i] = numerals[i];
+ }
+ p.d_op = SOLVER->mkOp(api::TUPLE_PROJECT, indices);
+ }
| sym=SIMPLE_SYMBOL nonemptyNumeralList[numerals]
{
p.d_op = PARSER_STATE->mkIndexedOp(AntlrInput::tokenText($sym), numerals);
@@ -2279,6 +2298,7 @@ EMP_TOK : { PARSER_STATE->isTheoryEnabled(theory::THEORY_SEP) }? 'emp';
CHAR_TOK : { PARSER_STATE->isTheoryEnabled(theory::THEORY_STRINGS) }? 'char';
TUPLE_CONST_TOK: { PARSER_STATE->isTheoryEnabled(theory::THEORY_DATATYPES) }? 'mkTuple';
TUPLE_SEL_TOK: { PARSER_STATE->isTheoryEnabled(theory::THEORY_DATATYPES) }? 'tupSel';
+TUPLE_PROJECT_TOK: { PARSER_STATE->isTheoryEnabled(theory::THEORY_DATATYPES) }? 'tuple_project';
HO_ARROW_TOK : { PARSER_STATE->isHoEnabled() }? '->';
HO_LAMBDA_TOK : { PARSER_STATE->isHoEnabled() }? 'lambda';
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback