这个msdn link说'('和')'左右相关性。
这有什么意义?有人可以举个例子吗?
答案 0 :(得分:2)
在正式语法中,具有从左到右优先级的运算符是递归的。所以加二进制:
S -> E
E -> E + a
E -> a
所以树看起来像:
S
|
E
|
E + a
|
E + a
|
a
正如您所看到的,前两个a
在第二个之前添加。
对于右关联运算符,您的语法将包含右递归。所以使用二进制求幂:
S -> E
E -> a ** E
E -> a
随后您的解析树将如下所示:
S
|
E
|
a ** E
|
a ** E
|
a
正如你所看到的那样,最后两个a
被取幂,首先,结果是第一个a
的幂(顺便说一句,这是求幂的正确关联性)。
对于三元和更大的运算符,应用相同的模式,递归规则是最左边的非终结符号或最右边的非终结符号。但是,在一元运算符的情况下,它是左递还是右递归取决于左侧还是右侧的非终结符号。在(
E
)
的情况下,任何一方都有一个终端,非终结,虽然是递归的,但从语法的角度来看,既不是左递归也不是右递归,所以我认为MSDN文章任意宣称它是“从左到右”。
括号的相关性与d
在a+b+c
d+(a+b+c)
之前评估并且与a+b+c
的关联性无关的事实无关,所以我不知道Jared正在谈论的是什么。
答案 1 :(得分:0)
有什么不清楚的?只要您有(
,就会有一对)
。一旦进入它们,你就可以从左到右处理arythmatic,所以如果你有d+(a+b+c)
,你会a+b
,然后a+b
的总和加到c
那么总和a,b,c
添加了d