3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 19:35:50 +00:00

fix #6792, add scaffolding for type variables

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2023-07-07 17:22:56 -07:00
parent f5c069f899
commit 5806869ae4
8 changed files with 96 additions and 14 deletions

View file

@ -102,6 +102,7 @@ namespace smt2 {
symbol m_declare_const;
symbol m_define_sort;
symbol m_declare_sort;
symbol m_declare_type_var;
symbol m_declare_datatypes;
symbol m_declare_datatype;
symbol m_par;
@ -856,6 +857,26 @@ namespace smt2 {
if (ct_decls.empty())
throw parser_exception("invalid datatype declaration, datatype does not have any constructors");
}
void parse_declare_type_var() {
SASSERT(curr_is_identifier());
SASSERT(curr_id() == m_declare_type_var);
next();
check_nonreserved_identifier("invalid sort declaration, symbol expected");
symbol id = curr_id();
if (m_ctx.find_psort_decl(id) != nullptr)
throw parser_exception("invalid sort declaration, sort already declared/defined");
next();
check_rparen("invalid sort declaration, ')' expected");
psort_decl * decl = pm().mk_psort_type_var_decl(id);
m_ctx.insert(decl);
m_ctx.print_success();
next();
}
void parse_declare_datatypes() {
SASSERT(curr_is_identifier());
@ -2975,6 +2996,10 @@ namespace smt2 {
parse_declare_sort();
return;
}
if (s == m_declare_type_var) {
parse_declare_type_var();
return;
}
if (s == m_declare_datatypes) {
parse_declare_datatypes();
return;
@ -3048,6 +3073,7 @@ namespace smt2 {
m_declare_const("declare-const"),
m_define_sort("define-sort"),
m_declare_sort("declare-sort"),
m_declare_type_var("declare-type-var"),
m_declare_datatypes("declare-datatypes"),
m_declare_datatype("declare-datatype"),
m_par("par"),