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

回答