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]
我说得对不对?
是的。 (一些带幂运算符的语言的幂运算优先于一元减号,所以'-2 ** 4'的值为'-16',这可能不如16'那么令人惊讶。)我没有检查你的引用以查看如果这是提到)。 – rici
@rici,谢谢。 '-16'可能是意想不到的,因为这与数学相矛盾,对吧?另外ES规格使用了一些不同的符号:'E :: T \ nO'而不是'E - > T | O'。你知道这个符号的名字吗? –
IIRC ES标准使用':'进行句法生成,'::'进行词汇生成。这完全是特质。 – rici