将解析树(即具体语法树)简化为抽象语法树的一般策略是什么?
例如,我有以下语法规则:
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
这运作良好 - 但是,我不知道这样做的任何“规则”。是否有我应该简化的特定语法规则?是感觉的问题,还是有更机械的过程?