Java 这种情况下的抽象语法树?

Java 这种情况下的抽象语法树?,java,c++,abstract-syntax-tree,Java,C++,Abstract Syntax Tree,我正在尝试为以下两个C/C++/Java代码段创建一个抽象语法树: 1) return j++-200*20-++A*7 2) return j++-200*20-A++*7 有人能解释一下他们在AST方面的区别吗?返回j++-200*20-++A*7和返回j++-200*20-A++*7在涉及A的节点上都有相同的AST。第一个将有一个增量前a节点,而第二个将有一个增量后a节点。返回j++-200*20-++a*7和返回j++-200*20-a++*7将有相同的AST,直到涉及a的节点。第一

我正在尝试为以下两个C/C++/Java代码段创建一个抽象语法树:

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

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


有人能解释一下他们在AST方面的区别吗?

返回j++-200*20-++A*7
返回j++-200*20-A++*7
在涉及
A
的节点上都有相同的AST。第一个将有一个
增量前a
节点,而第二个将有一个
增量后a
节点。

返回j++-200*20-++a*7
返回j++-200*20-a++*7
将有相同的AST,直到涉及
a
的节点。第一个将有一个
增量前a
节点,而第二个将有一个
增量后a
节点。

为什么你不能自己创建AST并比较它们?@Ira Baxter问题是我得到了相同的树…因为
++a
a++
之间的差异,请看一下SO文档中的页面。关于Gullie的评论:对于++a和a++,您可以得到不同的树节点。其中一个是“pre-increment++”操作符,另一个是“post-increment++”。如果树节点的标签正确,你应该得到不同的树。为什么你不能自己创建AST并比较它们呢?@Ira Baxter问题是我得到了相同的树…因为
++A
A++
之间的差异,请看一下SO文档中的页面。关于Gullie的评论:对于++a和a++,您可以得到不同的树节点。其中一个是“pre-increment++”操作符,另一个是“post-increment++”。如果树节点的标签正确,您应该得到不同的树。那么我如何在树上“看到”A++的优先级低于++A?您所说的优先级是什么意思?优先级的不同在这里并不重要,所以唯一的区别是postincrement和preincrement是不同的运算符,具有不同的语义。如果您为其中一个使用
@+/
符号来强调它们是不同的运算符,可能会更有意义。解析时,可以根据位置检测差异。我的意思是,
返回x++
将首先返回结果,然后将x增加1。另一方面,
return++x
将首先将x增加1,然后返回结果。。。我怎么能用AST来描述呢?你不知道。这不是AST的责任。你有操作员,这些行为就是操作员的定义。这就像问如何在AST中描述乘法。关于Andar的评论:AST的目的是反映语法。语义隐含在树节点的解释中。因此,树不会“担心”差异;只是它们不同而已。那么我怎么能在树上“看到”A++的优先级比A++低呢?你说的优先级是什么意思?优先级的不同在这里并不重要,所以唯一的区别是postincrement和preincrement是不同的运算符,具有不同的语义。如果您为其中一个使用
@+/
符号来强调它们是不同的运算符,可能会更有意义。解析时,可以根据位置检测差异。我的意思是,
返回x++
将首先返回结果,然后将x增加1。另一方面,
return++x
将首先将x增加1,然后返回结果。。。我怎么能用AST来描述呢?你不知道。这不是AST的责任。你有操作员,这些行为就是操作员的定义。这就像问如何在AST中描述乘法。关于Andar的评论:AST的目的是反映语法。语义隐含在树节点的解释中。因此,树不会“担心”差异;只是他们是不同的。