getExpression - Return proper structure of ast.Expression and validate the syntax Available expressions: - ast.OperationExpression - ast.BooleanExpression - ast.ConditionExpression - ast.ContainExpression
()
| 707 | // - ast.ConditionExpression |
| 708 | // - ast.ContainExpression |
| 709 | func (parser *Parser) getExpression() (bool, ast.Expression, error) { |
| 710 | |
| 711 | if parser.currentToken.Type == token.IDENT || |
| 712 | parser.currentToken.Type == token.LITERAL || |
| 713 | parser.currentToken.Type == token.NULL || |
| 714 | parser.currentToken.Type == token.APOSTROPHE || |
| 715 | parser.currentToken.Type == token.TRUE || |
| 716 | parser.currentToken.Type == token.FALSE { |
| 717 | |
| 718 | leftSide, isAnonymitifier, err := parser.getExpressionLeftSideValue() |
| 719 | if err != nil { |
| 720 | return false, nil, err |
| 721 | } |
| 722 | |
| 723 | isValidExpression := false |
| 724 | var expression ast.Expression |
| 725 | |
| 726 | if parser.currentToken.Type == token.EQUAL || parser.currentToken.Type == token.NOT { |
| 727 | isValidExpression, expression, err = parser.getConditionalExpression(leftSide, isAnonymitifier) |
| 728 | } else if parser.currentToken.Type == token.IN || parser.currentToken.Type == token.NOTIN { |
| 729 | isValidExpression, expression, err = parser.getContainExpression(leftSide, isAnonymitifier) |
| 730 | } else if leftSide.Type == token.TRUE || leftSide.Type == token.FALSE { |
| 731 | expression = &ast.BooleanExpression{Boolean: leftSide} |
| 732 | isValidExpression = true |
| 733 | err = nil |
| 734 | } |
| 735 | |
| 736 | if err != nil { |
| 737 | return false, nil, err |
| 738 | } |
| 739 | |
| 740 | if (parser.currentToken.Type == token.AND || parser.currentToken.Type == token.OR) && isValidExpression { |
| 741 | isValidExpression, expression, err = parser.getOperationExpression(expression) |
| 742 | } |
| 743 | |
| 744 | if err != nil { |
| 745 | return false, nil, err |
| 746 | } |
| 747 | |
| 748 | if isValidExpression { |
| 749 | return true, expression, nil |
| 750 | } |
| 751 | } |
| 752 | return false, nil, nil |
| 753 | } |
| 754 | |
| 755 | func (parser *Parser) getExpressionLeftSideValue() (token.Token, bool, error) { |
| 756 | var leftSide token.Token |
no test coverage detected