2

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

4

1 回答 1

2

几年前我做过非常相似的事情——我没有构建 DLR 结构,但我构建了自己的表达式树结构,这也需要在构建时提供参数(以实现不变性)。

那时,我使用 ANTLR v2 - 我必须承认,我不熟悉新的 v3 语法,而且我不记得我当时是如何做到的每一个细节 - 所以我没有为您提供完整的制定了示例,我将尝试告诉您我的故事(不确定,是否也适用于您的问题!):

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

IOW,你在构建 AST 的同时构建最终结构(构建 AST 只是为了确保语法规则,可以丢弃。)这种方法非常可靠,甚至比第一次构建 AST 还要快,然后对其进行改造!但它仍然利用了 AST 解析器的强大功能(而不是仅仅使用普通的 Parser/Lexer)。如果您也需要 AST - 只需将其保存在某处即可。

但是,如果您想完成完成的 AST - 我想您可以使用任何编程例程来做到这一点 - 只需确保它自下而上地构建您的结果!

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

于 2010-03-21T00:49:56.423 回答