这个语法是否通过正确的递归定义了右关联性

时间:2017-09-03 16:11:28

标签: javascript ecmascript-6 compiler-construction context-free-grammar

我正在阅读this article关于将**运算符添加到EcmaScript规范中,其中作者声明了以下内容:

  

必须在乘法之前评估指数以及更多   重要的是,BNF语法必须写成运算符   正确定义了右倾相关性(不像   MultiplicativeExpression,左关联)。

他将语法中的新非终端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 个答案:

答案 0 :(得分:2)

  

我是对的吗?