同时使用antlr和DLR - AST转换

时间:2010-02-24 20:28:06

标签: lambda antlr3 abstract-syntax-tree data-conversion

我有一个通过ANTLR生成的AST,我需要将其转换为DLR兼容的(表达式树)。但是,似乎我不能使用树模式匹配器,因为表达式树在实例化时需要它们的子树(我无法获得)。什么解决方案最适合我使用?

1 个答案:

答案 0 :(得分:2)

几年前我做了一些非常相似的事情 - 我没有构建一个DLR结构,但是我构建了自己的表达式树结构,它在构造时也需要参数(以实现不变性)。

那时候,我使用过ANTLR v2 - 我必须承认,我不熟悉新的v3语法,而且我不记得当时我是如何做到的每一个细节 - 所以不要提供给你有一个完全成熟的例子,我只想告诉你我的故事(不确定,如果它也适用于你的问题!):

首先,没有必要从 AST构建我的结构。我只使用ANLTR的AST构建器作为工具:除了AST节点本身之外,每个AST构建规则都可以返回一个Object。然后可以在外部规则中将返回值用作构造函数的参数,依此类推。所以这个结构会自动为你自己构建!

IOW,你在构建AST的同时构建最终结构(AST只是为了确保语法规则而构建的,并且可以被丢弃。)这种方法非常可靠,而且比第一次更快建立AST,然后转换它!但它仍然利用AST解析器的强大功能(而不是仅使用普通的Parser / Lexer)。如果你需要AST,那就把它保存到某个地方。

如果你想要完成一个完成的AST - 我想你可以使用任何程序化的例程来做到这一点 - 只需确保它可以自下而上构建你的结果!

希望这在某种程度上有所帮助!