2016-11-20 66 views
0

我想创建以下2 C/C++/Java代码片段的抽象语法树:这种情况下的抽象语法树?

1) return j++-200*20-++A*7 

2) return j++-200*20-A++*7 

有人可以解释他们的差异,当谈到自己的AST?

+0

为什么你不能自己创建AST并比较它们? –

+0

@Ira Baxter问题是我得到了同样的树... – MATH000

+0

对于'++ A'和'A ++'之间的区别,看一看[Increment/Decrement Operators(++/- )]( http://stackoverflow.com/documentation/java/176/operators#t=201611200425069375529)在SO文档中的页面。 – Gulllie

回答

3

return j++ - 200*20 - ++A*7return j++ - 200*20 - A++*7将具有相同的AST直至涉及A的节点。第一个将有一个pre-increment A节点,而第二个将有一个post-increment A节点。

+0

那么我怎样才能在树上“看到”A ++比++ A具有更低的优先级呢? – MATH000

+1

您的优先级是什么意思?优先级差异在这里并不重要,所以唯一的区别是postincrement和preincrement是不同的运算符,具有不同的语义。如果你为其中一个使用'@ +'符号,可能会更有意义,以强调它们是不同的操作符。解析差异可以根据位置进行检测。 – andars

+0

我的意思是,'return x ++'将首先返回结果,然后将x增加1.另一方面'return ++ x'将首先将x增加1,然后返回结果...我如何描述它AST? – MATH000