()
| 889 | } |
| 890 | |
| 891 | func (self *_parser) parseExponentiationExpression() ast.Expression { |
| 892 | parenthesis := self.token == token.LEFT_PARENTHESIS |
| 893 | |
| 894 | left := self.parseUnaryExpression() |
| 895 | |
| 896 | if self.token == token.EXPONENT { |
| 897 | if !parenthesis { |
| 898 | if u, isUnary := left.(*ast.UnaryExpression); isUnary && u.Operator != token.INCREMENT && u.Operator != token.DECREMENT { |
| 899 | self.error(self.idx, "Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence") |
| 900 | } |
| 901 | } |
| 902 | for { |
| 903 | self.next() |
| 904 | left = &ast.BinaryExpression{ |
| 905 | Operator: token.EXPONENT, |
| 906 | Left: left, |
| 907 | Right: self.parseExponentiationExpression(), |
| 908 | } |
| 909 | if self.token != token.EXPONENT { |
| 910 | break |
| 911 | } |
| 912 | } |
| 913 | } |
| 914 | |
| 915 | return left |
| 916 | } |
| 917 | |
| 918 | func (self *_parser) parseMultiplicativeExpression() ast.Expression { |
| 919 | left := self.parseExponentiationExpression() |
no test coverage detected