sda*_*das 5 compiler-construction grammar parsing abstract-syntax-tree concrete-syntax-tree
将解析树(即具体语法树)简化为抽象语法树的一般策略是什么?
例如,我有以下语法规则:
statement_list : statement
| statement_list statement
Run Code Online (Sandbox Code Playgroud)
如果保留为解析树,它将生成看起来像扇形输出
program
statement_list
statement_list
statement
definition
p_type
assignment
statement
definition
statement
assign
assignment
Run Code Online (Sandbox Code Playgroud)
如果我连接每个节点的子节点(因为语句列表在解析后没有固有含义),我可以实现以下内容
program
definition
p_type
assignment
definition
assign
assignment
Run Code Online (Sandbox Code Playgroud)
这很好用 - 但是,我没有意识到这样做的任何"规则".是否有特定的语法规则我应该简化?这是一种感觉问题,还是一个更机械化的过程?
这不是“感觉”的问题。抽象语法树取决于所解析内容的含义(语义),我认为这些将是规则:
没有单一的食谱。这取决于目标语言中的短语的含义。
归档时间: |
|
查看次数: |
1572 次 |
最近记录: |