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

基于ANTLR的翻译器结构(最佳实践),antlr,Antlr,我想使用ANTLR编写一个从DSL到Java的转换器。因此,我使用两种不同的语法编写了lexer和解析器。现在我必须编写树语法,我想知道哪些是获得结果的最佳实践(或推荐实践)。更确切地说,我想知道哪种方法是最好的,比如:用属性丰富树(例如,添加类型)和优化 我是否应该编写不同的树语法来识别类型和进行优化,然后在解析器之后和最终代码生成树语法之前依次调用?还有其他更容易维护的方法吗?我还考虑手动解析解析器生成的树,以识别类型。但这是很难维持的 谢谢。没有真正的最佳实践:只有常识和个人偏好 但是,在

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

我是否应该编写不同的树语法来识别类型和进行优化,然后在解析器之后和最终代码生成树语法之前依次调用?还有其他更容易维护的方法吗?我还考虑手动解析解析器生成的树,以识别类型。但这是很难维持的


谢谢。

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

但是,在AST的不同过程中,将某些属性添加到节点与优化操作(将
^(*0^(…)
重写为
0
)分开更符合逻辑。不要太担心性能:树遍历非常快:大部分时间通常花在解析过程中。通过ANTLR3.2的添加,您可以编写非常小的树语法来在AST上执行非常具体的操作(易于维护!)

另请参阅前面的问答,其中涉及手动遍历AST或使用树语法: