在编译器设计,如果我有,因为这个语法定义为关联性如何影响操作数的评估顺序?
E-->E+E/E-E/id
T-->id
现在文法是左递归的,而且我们也可以说,无论是+和 - 运算符是左结合这样的话,当解析树将被构造,所以如果我有像id + id-id这样的输入,那么第一个id + id会被执行,然后加法的结果会减去id。
如果我有一个输入字符串像id + id + id,那么在这种情况下,执行顺序将是(id + id)+ id。
我没有得到这个概念,因为我研究过运算符的关联性没有定义评估的顺序,如果那是真的,那么解析树的生成又如何,因为如果我们被要求比较两个分析树并找到哪一个会正常工作,如果说我有一个像id + id-id这样的输入字符串,那么我们会选择解析树,其中我们有评估的顺序,以便首先执行根节点+的子树,然后执行将植根于 - 的子树将首先执行,因此请澄清决定c程序中评估顺序的实际参数。
我不认为“操作数的评估顺序”意味着你认为它的含义。当你有'(a + b)+ c'时,顺序就属于'a','b'和'c',而不是表达式的结果。当然,在最终表达式之前评估子表达式“a + b”。 –
运算符优先级对执行顺序没有影响(除涉及序列点外)。编译器生成的分析树也不是。 – Wintermute
示例:'int value_of_life = work_hard()+ marry()+ make_children()'。取决于健康和宗教信仰,取决于操作数的评估顺序,结果可能会出人意料地发生变化。 –