1

我读this article有关将**运营商的规范的EcmaScript定义右键关联在这里笔者状态如下:这是否语法通过右键递归

幂必须乘前进行评估,更 重要BNF语法必须写成运算符的 右结合性明确定义(不同于 乘法表达式,它是左关联的)。

而且他在语法定义了新的非终端ExponentiationExpression符号为:

ExponentiationExpression : 
    UnaryExpression[?Yield] 
    UnaryExpression[?Yield] ** ExponentiationExpression[?Yield] 

MultiplicativeExpression[Yield] : 
    ExponentiationExpression[?Yield] 
    MultiplicativeExpression[?Yield] MultiplicativeOperator ExponentiationExpression[?Yield] 

This article指出:

要编写语法是正确表达运营商关联:

  • 对于左结合性,使用左回归离子。
  • 对于右结合, 使用权利递归。

看来,他遵循的规则和使用权递归这里的ExponentiationExpression定义的关联性:

ExponentiationExpression -> UnaryExpression[?Yield] ** ExponentiationExpression[?Yield] 

我说得对不对?

+1

是的。 (一些带幂运算符的语言的幂运算优先于一元减号,所以'-2 ** 4'的值为'-16',这可能不如16'那么令人惊讶。)我没有检查你的引用以查看如果这是提到)。 – rici

+0

@rici,谢谢。 '-16'可能是意想不到的,因为这与数学相矛盾,对吧?另外ES规格使用了一些不同的符号:'E :: T \ nO'而不是'E - > T | O'。你知道这个符号的名字吗? –

+0

IIRC ES标准使用':'进行句法生成,'::'进行词汇生成。这完全是特质。 – rici

回答