| 305 | } |
| 306 | |
| 307 | QueryParser::TreeNode QueryParser::expression() |
| 308 | { |
| 309 | if (tokenType() == Token::Type::word) { |
| 310 | auto left = token(true); |
| 311 | if (isOperatorToken(tokenType())) { |
| 312 | auto expOperator = token(true); |
| 313 | if (tokenType() != Token::Type::word && tokenType() != Token::Type::quotedWord) { |
| 314 | throw std::invalid_argument("missing right operand"); |
| 315 | } |
| 316 | auto right = token(true); |
| 317 | |
| 318 | return TreeNode("expression", { TreeNode(toLower(left), { }), TreeNode(right, { }) }, expOperator); |
| 319 | } else { |
| 320 | return TreeNode("expression", { TreeNode("all", { }), TreeNode(left, { }) }); |
| 321 | } |
| 322 | } |
| 323 | |
| 324 | return baseToken(); |
| 325 | } |
| 326 | |
| 327 | QueryParser::TreeNode QueryParser::baseToken() |
| 328 | { |