【发布时间】:2013-07-30 00:04:24
【问题描述】:
将解析树(即具体语法树)简化为抽象语法树的一般策略是什么?
例如,我有如下语法规则:
statement_list : statement
| statement_list statement
如果保留为解析树,将生成扇形输出,看起来像
program
statement_list
statement_list
statement
definition
p_type
assignment
statement
definition
statement
assign
assignment
如果我将每个节点的孩子串联起来(因为一个语句列表在解析后没有内在意义),我可以实现如下
program
definition
p_type
assignment
definition
assign
assignment
这很有效 - 但是,我不知道这样做的任何“规则”。是否有我应该简化的特定语法规则?是感觉的问题,还是有更机械的过程?
【问题讨论】:
-
你可以追求柔软的“外观和感觉”,但这主要是很多工作。您可以通过删除可以使用语法重新生成的节点来机械地执行此操作。见stackoverflow.com/a/1916687/120163
标签: parsing compiler-construction grammar abstract-syntax-tree concrete-syntax-tree