LmTinyToon Asked:2020-03-09 16:07:02 +0000 UTC2020-03-09 16:07:02 +0000 UTC 2020-03-09 16:07:02 +0000 UTC 解析树和抽象语法树有什么区别? 772 现在正在研究Ulman的书《Compilers - principles, technologies, tools》。作者介绍了这两个概念,但我无法理解其中的区别。 компилятор 1 个回答 Voted Best Answer user181100 2020-03-09T16:39:48Z2020-03-09T16:39:48Z 在处理源代码的过程中,首先构建一个解析树,然后从中构建一个 AST(可能通过额外的阶段):同义词的各种消除、冗余元素、无关紧要的结构(注释?)——一切与行为的定义无关。 这是一个有损转换。如果仍然可以从解析树中恢复源代码,那么就不可能再从 AST 中恢复源代码。 这是维基百科关于 ASD 的说法: 抽象语法树与解析树的不同之处在于,它缺少那些不影响程序语义的语法规则的节点和边。括号分组是这种缺失的典型示例,因为在 AST 中,操作数的分组是由树结构明确给出的。
在处理源代码的过程中,首先构建一个解析树,然后从中构建一个 AST(可能通过额外的阶段):同义词的各种消除、冗余元素、无关紧要的结构(注释?)——一切与行为的定义无关。
这是一个有损转换。如果仍然可以从解析树中恢复源代码,那么就不可能再从 AST 中恢复源代码。
这是维基百科关于 ASD 的说法: