0

这个 msdn链接说 '(' 和 ')' 具有从左到右的关联性。

这有什么意义?有人可以给我一个例子吗?

4

2 回答 2

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的幂(顺便说一下,这是取幂的正确关联性)。

对于三元和更大的运算符,应用相同的模式,递归规则是最左边的非终结符或最右边的非终结符。但是,对于一元运算符,它是左递归还是右递归取决于非终结符 s 分别位于左侧还是右侧。( E )在两边都有一个终端的情况下,非终端虽然是递归的,但从语法的角度来看既不是左递归也不是右递归,所以我认为 MSDN 文章已经武断地声明它是“从左到右”。 "

括号的关联性与在 ind之前评估的事实无关,也与的关联性无关,所以我不知道另一个 Jared 在说什么。a+b+cd+(a+b+c)a+b+c

于 2012-08-14T21:18:10.510 回答
0

什么不清楚?只要你有一个,它们就会成对出现,(你就会有一个)。一旦进入它们,你就可以从左到右进行算法运算,所以如果你有的话,d+(a+b+c)你会这样做,a+b然后加起来的总和然后a+b加起来c的总和a,b,cd

于 2012-05-12T05:47:13.777 回答