rye*_*guy 2 compiler-construction parsing
给定一个AST,是什么原因导致一个Walker
类遍历树并执行输出,而不是给每个Node
类一个compile()
方法并让它负责自己的输出?
以下是一些示例:
Doctrine 2(ORM)使用a SQLWalker
来遍历AST并从节点生成SQL.
Twig(模板语言)让节点输出自己的代码(这是一个if
语句节点).
Walker
随着目标表示的数量增加,使用单独的代码生成避免了AST节点类的数量的组合爆炸.当a Walker
负责代码生成时,您可以通过更改Walker
类来将其重新定位到不同的表示形式.但是当AST节点本身负责编译时,每个单独的目标表示需要不同版本的每个节点.
归档时间: |
|
查看次数: |
1601 次 |
最近记录: |