summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@cs.nyu.edu>2013-05-17 17:04:34 -0400
committerMorgan Deters <mdeters@cs.nyu.edu>2013-05-20 17:00:56 -0400
commitaef543d74c4fb23a86ad2986d67e7fc7f11d1feb (patch)
tree61fa1130327fffd2c48e340c54b41f80445c0509
parentcb1871573012e12029b06674ccc13f143b09c8a4 (diff)
Fix parsing of SMT-LIBv2 |quoted| symbols that span newlines in interactive mode.
Thanks to David Cok for raising this issue.
-rw-r--r--src/parser/parser.h5
-rw-r--r--src/parser/smt2/Smt2.g5
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
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback