此MSDN link说,“(”和“)”已经离开的左联。
请问该怎么做有意义吗?有人可以给我一个例子吗?
在正式语法左到右的优先级操作是左递归。因此,与二进制加法:
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
的关联性没有影响,以及没有任何影响,所以我不知道对方是什么贾里德在谈论。
什么是不清楚的吗?他们有一对,只要你有一个(
你将有一个)
。一旦他们进入你从左至右工作arythmatic所以如果你有d+(a+b+c)
你会做a+b
然后a+b
的总和加入到c
然后a,b,c
的总和增加d