括号的相关性

时间:2012-05-12 05:41:39

标签: associative

这个msdn link说'('和')'左右相关性。

这有什么意义?有人可以举个例子吗?

2 个答案:

答案 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文章任意宣称它是“从左到右”。

括号的相关性与da+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

相关问题