| 40 | } |
| 41 | |
| 42 | SMTLib2Expression SMTLib2Parser::parseExpression() { |
| 43 | skipWhitespace(); |
| 44 | if (token() == '(') |
| 45 | { |
| 46 | advance(); |
| 47 | skipWhitespace(); |
| 48 | std::vector<SMTLib2Expression> subExpressions; |
| 49 | while (token() != 0 && token() != ')') |
| 50 | { |
| 51 | subExpressions.emplace_back(parseExpression()); |
| 52 | skipWhitespace(); |
| 53 | } |
| 54 | if (token() != ')') |
| 55 | throw ParsingException{}; |
| 56 | // Simulate whitespace because we do not want to read the next token since it might block. |
| 57 | m_token = ' '; |
| 58 | return {std::move(subExpressions)}; |
| 59 | } else |
| 60 | return {parseToken()}; |
| 61 | } |
| 62 | |
| 63 | std::string SMTLib2Parser::parseToken() { |
| 64 | std::string result; |
no test coverage detected