巴克斯诺尔形式结合性

Backus Naur Form Assoicativity

这是为求幂 PowExp 实现右结合律的正确方法吗?所以 2^3^4 实际上是 (2^(3^4))

<Exp> ::= <Exp> + <MulExp>
| <Exp> - <MulExp>
| <MulExp>
<MulExp> ::= <MulExp> * <PowExp>
| <MulExp> / <PowExp>
| <PowExp>
<PowExp> ::= <NegExp> ^ <PowExp>
|<NegExp>
<NegExp> ::= - <RootExp>
| <RootExp>
<RootExp> ::= ( <Exp> )
| 1 | 2 | 3 | 4

你写的是正确的。

顺便说一句,您可能想重新考虑您的层次结构;在常规数学中,−34 是 −(34),而不是 (−3)4 .因此,您可能希望 - 3 ^ 4 表示 - (3 ^ 4),在这种情况下 NegExp 将包含 PowExp,而不是相反。 (但我想如果 -3 ^ 4 表示 -(3 ^ 4) 可能会造成混淆,所以这里可能没有直观的操作顺序?另一种可能性是 或者 [=30= 需要括号] 阅读,让 PowExpNegExp 都直接依赖于 RootExp。)