基于ANTLR的翻译器的结构(最佳实践)

时间:2011-12-12 21:04:40

标签: antlr

我想使用ANTLR编写从DSL到Java的翻译器。所以,我用两个不同的语法编写了词法分析器和解析器。现在我必须编写树语法,我想知道哪些是获得我的结果的最佳实践(或推荐的实践)。更确切地说,我想知道哪些是最好的方法,例如:使用属性(例如,添加类型)和优化来丰富树。

我应该编写不同的树语法来识别类型和优化,然后在解析器之后和最终的代码生成树语法之前串行调用吗?还有另一种更容易维护的方法吗?我还想手动解析解析器生成的树以识别类型。但这是非常值得维护的。

谢谢你。

1 个答案:

答案 0 :(得分:1)

没有真正的最佳实践:只是常识和个人偏好。

但是,在通过AST的单独传递中将某些属性添加到优化操作(重写^(* 0 ^(...))0)更合乎逻辑。不要太担心性能:树行走非常快:大部分时间通常在解析过程中花费。使用ANTLR 3.2添加tree pattern matching,您可以编写相当小的树语法来对AST执行非常特定的操作(易于维护!)。

另请参阅此前一个Q& A,它涉及手动移动AST或使用树语法: Systematic way to generate ANTLR tree grammar?