关联性如何影响操作数的评估顺序?

时间:2015-04-08 08:13:52

标签: c compiler-construction

在编译器设计中,如果我将语法定义为

E-->E+E/E-E/id
T-->id

既然这个语法是左递归的,我们也可以说+和 - 运算符都是左关联的,所以当构造解析树时,如果我有一个像id + id-id这样的输入,所以然后第一个id + id将被执行,然后add的结果将减去id。

如果我有一个像id + id + id的输入字符串,那么在这种情况下执行顺序将是(id + id)+ id。

我没有得到这个概念,因为我已经研究过运算符的关联性没有定义评估的顺序,如果那么真实那么解析树的生成呢,因为如果我们被要求比较两个解析树并找到哪个如果说我有一个像id + id-id这样的输入字符串,那么我们会选择解析树,其中我们有评估顺序,这样根据节点+生成的子树将首先被执行,然后是子树扎根 - 将首先执行,所以请告诉我确定c程序中评估顺序的实际参数。

1 个答案:

答案 0 :(得分:2)

关联性定义a - b - c是否等同于(a - b) - ca - (b - c),即c是否添加到b添加到{{}的结果中1}}或a的结果是否已添加到b + c。因此,关联性也告诉你表达式的AST是什么样的。

关联性没有告诉你的是首先评估a,b和c中的哪一个。也就是说,如果你写a,你知道它等同于f() - g() - h(),因为减法是左关联的。但是,您不知道在(f() - g()) - h()和/或f之前是否执行了g,依此类推。当人们说关联性没有定义评估顺序时,这就是人们的意思。

  

澄清了确定c程序中评估顺序的实际参数。

C程序中算术表达式中操作数的评估顺序未定义。这完全取决于编译器。