Javascript ECMAScript 2020求幂语法混乱

Javascript ECMAScript 2020求幂语法混乱,javascript,grammar,Javascript,Grammar,正在检查ECMA-262 ECMAScript 2020(或第11版)的最新标准,但无法确定求幂的语法生成 因此,一元表达式是一个指数表达式,因此允许像-x这样的东西向上传递解析树,但要实际计算一个指数,LHS必须是一个UpdateExpression(++x,--x,x++,x--或者仅仅是x)。RHS是一个指数表达式,因此可以是一个一元表达式。这意味着解析x**-y很容易,但是如何解析-x**y呢。我曾想过将其视为-(x**y),但后来没有办法将未加密的x**y从一个表达式返回到一个Upda

正在检查ECMA-262 ECMAScript 2020(或第11版)的最新标准,但无法确定求幂的语法生成

因此,一元表达式是一个指数表达式,因此允许像-x这样的东西向上传递解析树,但要实际计算一个指数,LHS必须是一个UpdateExpression(++x,--x,x++,x--或者仅仅是x)。RHS是一个指数表达式,因此可以是一个一元表达式。这意味着解析x**-y很容易,但是如何解析-x**y呢。我曾想过将其视为-(x**y),但后来没有办法将未加密的x**y从一个表达式返回到一个UpdateExpression,以馈送到UnaryExpression

或者仅仅是-x**y是不允许的,您必须使用

-(x ** y)
-(x**y)

(-x) ** y
(-x)**y

,两者都很容易解析,如下所示:

(x**y)是一个带括号的表达式,因此作为PrimaryExpression输入到UnaryExpression

(-x)类似地作为主表达式馈送到UpdateExpression

还是我遗漏了一些明显的东西

或者仅仅是-x**y是不允许的,您必须使用

-(x ** y)

(-x) ** y
没错

还是我遗漏了一些明显的东西

不,你说得对

中有一些有用的链接,包括2015年的es讨论列表,其中提出了当前语法

一些具体例子:

从Firefox控制台:

-2**4
SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'
来自(O'Reilly)(非背书):

-3**2
这样的表达式自然存在歧义。根据一元减和幂的相对优先级,该表达式可能表示
(-3)**2
-(3**2)
。不同的语言处理这个问题的方式不同,JavaScript并没有偏袒任何一方,而是简单地将省略括号作为语法错误,迫使您编写一个明确的表达式

当然,真正权威的指南是你已经引用过的语法