将解析树(即具体语法树)简化为抽象语法树的一般策略是什么?
例如,我有以下语法规则:
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
这很好用 - 但是,我没有意识到这样做的任何“规则”。是否有特定的语法规则我应该简化?这是一种感觉问题,还是有更机械化的过程?
答案 0 :(得分:4)
这不是“感觉”的问题。抽象语法树取决于已解析内容的含义(语义),我认为这些是规则:
没有单一食谱。这取决于目标语言中的短语是什么意思。