@@ -411,6 +411,7 @@ namespace smt2 {
411
411
412
412
bool curr_id_is_underscore () const { SASSERT (curr_is_identifier ()); return curr_id () == m_underscore; }
413
413
bool curr_id_is_as () const { SASSERT (curr_is_identifier ()); return curr_id () == m_as; }
414
+ bool curr_id_is_reserved () const { return curr_id_is_underscore () || curr_id_is_as (); }
414
415
bool curr_id_is_match () const { SASSERT (curr_is_identifier ()); return curr_id () == m_match; }
415
416
bool curr_id_is_case () const { return curr_id () == m_case; }
416
417
bool curr_id_is_forall () const { SASSERT (curr_is_identifier ()); return curr_id () == m_forall; }
@@ -427,10 +428,11 @@ namespace smt2 {
427
428
if (!curr_is_identifier () || curr_id () != id)
428
429
throw parser_exception (msg);
429
430
next ();
430
- }
431
+ }
431
432
void check_underscore_next (char const * msg) { check_id_next (m_underscore, msg); }
432
433
void check_as_next (char const * msg) { check_id_next (m_as, msg); }
433
434
void check_identifier (char const * msg) { if (!curr_is_identifier ()) throw parser_exception (msg); }
435
+ void check_nonreserved_identifier (char const * msg) { if (!curr_is_identifier () || curr_id_is_reserved ()) throw parser_exception (msg); }
434
436
void check_keyword (char const * msg) { if (!curr_is_keyword ()) throw parser_exception (msg); }
435
437
void check_string (char const * msg) { if (!curr_is_string ()) throw parser_exception (msg); }
436
438
void check_int (char const * msg) { if (!curr_is_int ()) throw parser_exception (msg); }
@@ -2163,7 +2165,7 @@ namespace smt2 {
2163
2165
check_lparen_next (" invalid sort declaration, parameters missing" );
2164
2166
unsigned i = 0 ;
2165
2167
while (!curr_is_rparen ()) {
2166
- check_identifier (" invalid sort parameter, symbol or ')' expected" );
2168
+ check_nonreserved_identifier (" invalid sort parameter, symbol or ')' expected" );
2167
2169
m_sort_id2param_idx.insert (curr_id (), i);
2168
2170
i++;
2169
2171
next ();
@@ -2214,7 +2216,7 @@ namespace smt2 {
2214
2216
SASSERT (curr_id () == m_declare_sort);
2215
2217
next ();
2216
2218
2217
- check_identifier (" invalid sort declaration, symbol expected" );
2219
+ check_nonreserved_identifier (" invalid sort declaration, symbol expected" );
2218
2220
symbol id = curr_id ();
2219
2221
if (m_ctx.find_psort_decl (id) != nullptr )
2220
2222
throw parser_exception (" invalid sort declaration, sort already declared/defined" );
@@ -2239,7 +2241,7 @@ namespace smt2 {
2239
2241
SASSERT (curr_is_identifier ());
2240
2242
SASSERT (curr_id () == m_define_sort);
2241
2243
next ();
2242
- check_identifier (" invalid sort definition, symbol expected" );
2244
+ check_nonreserved_identifier (" invalid sort definition, symbol expected" );
2243
2245
symbol id = curr_id ();
2244
2246
if (m_ctx.find_psort_decl (id) != nullptr )
2245
2247
throw parser_exception (" invalid sort definition, sort already declared/defined" );
@@ -2260,7 +2262,7 @@ namespace smt2 {
2260
2262
SASSERT (curr_id () == (is_fun ? m_define_fun : m_model_add));
2261
2263
SASSERT (m_num_bindings == 0 );
2262
2264
next ();
2263
- check_identifier (" invalid function/constant definition, symbol expected" );
2265
+ check_nonreserved_identifier (" invalid function/constant definition, symbol expected" );
2264
2266
symbol id = curr_id ();
2265
2267
next ();
2266
2268
unsigned sym_spos = symbol_stack ().size ();
@@ -2460,7 +2462,7 @@ namespace smt2 {
2460
2462
SASSERT (curr_is_identifier ());
2461
2463
SASSERT (curr_id () == m_declare_fun);
2462
2464
next ();
2463
- check_identifier (" invalid function declaration, symbol expected" );
2465
+ check_nonreserved_identifier (" invalid function declaration, symbol expected" );
2464
2466
symbol id = curr_id ();
2465
2467
next ();
2466
2468
unsigned spos = sort_stack ().size ();
@@ -2479,7 +2481,7 @@ namespace smt2 {
2479
2481
SASSERT (curr_is_identifier ());
2480
2482
SASSERT (curr_id () == m_declare_const);
2481
2483
next ();
2482
- check_identifier (" invalid constant declaration, symbol expected" );
2484
+ check_nonreserved_identifier (" invalid constant declaration, symbol expected" );
2483
2485
symbol id = curr_id ();
2484
2486
next ();
2485
2487
parse_sort (" Invalid constant declaration" );
0 commit comments