diff options
author | Morgan Deters <mdeters@cs.nyu.edu> | 2013-05-17 17:04:34 -0400 |
---|---|---|
committer | Morgan Deters <mdeters@cs.nyu.edu> | 2013-05-20 17:00:56 -0400 |
commit | aef543d74c4fb23a86ad2986d67e7fc7f11d1feb (patch) | |
tree | 61fa1130327fffd2c48e340c54b41f80445c0509 /src/parser | |
parent | cb1871573012e12029b06674ccc13f143b09c8a4 (diff) |
Fix parsing of SMT-LIBv2 |quoted| symbols that span newlines in interactive mode.
Thanks to David Cok for raising this issue.
Diffstat (limited to 'src/parser')
-rw-r--r-- | src/parser/parser.h | 5 | ||||
-rw-r--r-- | src/parser/smt2/Smt2.g | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/parser/parser.h b/src/parser/parser.h index d13fbf2d6..0761b4cda 100644 --- a/src/parser/parser.h +++ b/src/parser/parser.h @@ -462,6 +462,11 @@ public: d_input->parseError(msg); } + /** Unexpectedly encountered an EOF */ + inline void unexpectedEOF(const std::string& msg) throw(ParserException) { + d_input->parseError(msg, true); + } + /** * If we are parsing only, don't raise an exception; if we are not, * raise a parse error with the given message. There is no actual diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g index 7bbcb85d8..29b6e0fbb 100644 --- a/src/parser/smt2/Smt2.g +++ b/src/parser/smt2/Smt2.g @@ -1346,6 +1346,8 @@ symbol[std::string& id, PARSER_STATE->checkDeclaration(id, check, type); } } + | UNTERMINATED_QUOTED_SYMBOL EOF + { PARSER_STATE->unexpectedEOF("unterminated |quoted| symbol"); } ; /** @@ -1539,6 +1541,9 @@ BVSGE_TOK : 'bvsge'; QUOTED_SYMBOL : '|' ~('|' | '\\')* '|' ; +UNTERMINATED_QUOTED_SYMBOL + : '|' ~('|' | '\\')* + ; /** * Matches a keyword from the input. A keyword is a simple symbol prefixed |