| 14 | } |
| 15 | |
| 16 | bool AssignParser::assignment(AssignStatement& expr) |
| 17 | { |
| 18 | if (!match(TokenType::Identifier)) |
| 19 | { |
| 20 | setError("Expected dimension name for assignment."); |
| 21 | return false; |
| 22 | } |
| 23 | expr.identExpr().pushNode(NodePtr(new VarNode(curToken().sval()))); |
| 24 | |
| 25 | if (!match(TokenType::Assign)) |
| 26 | { |
| 27 | setError("Expected '=' after dimension name in assignment."); |
| 28 | return false; |
| 29 | } |
| 30 | |
| 31 | static const std::vector<Token> endTokens |
| 32 | { |
| 33 | Token(TokenType::Eof), |
| 34 | Token(TokenType::Identifier, "WHERE") |
| 35 | }; |
| 36 | |
| 37 | MathParser parser(lexer(), endTokens); |
| 38 | if (!parser.expression(expr.valueExpr())) |
| 39 | { |
| 40 | setError(parser.error()); |
| 41 | return false; |
| 42 | } |
| 43 | if (!parser.checkEnd()) |
| 44 | { |
| 45 | setError("Invalid token '" + peekToken().sval() + "' following valid math expression"); |
| 46 | return false; |
| 47 | } |
| 48 | |
| 49 | return where(expr); |
| 50 | } |
| 51 | |
| 52 | bool AssignParser::where(AssignStatement& expr) |
| 53 | { |