3

我正在尝试根据概率分析可以具有多种翻译的动态语言。我的语言中有一些已定义的类型,例如数字、向量等...

例如,如果我们看到表达式“a+b”,那么这可能是两个数字的相加,也可能是两个向量的相加。一个数字更有可能,因此我们认为“最佳”表示是两个数字的总和。然而,它们有可能是向量,所以我仍然想保留这种“不太可能”的表示。

如果后来我看到“a/b”,那么我知道它们不能是向量,因为向量除法是未定义的。所以我会抛弃“矢量”表示,正确的表示占上风。

我想通过分析 AST 来做到这一点。问题是由于类型和运算符的许多可能组合,我们有一个组合爆炸。

关于我可以使用的合适策略或模式的任何想法?我正在考虑一种用于不同组合的访问者,它们并行运行以赋予结构最佳含义。有点像在自然语言处理中分析句子。

我正在使用 ANTLR 的树行走机制进行分析,因此任何特定于该系统的引用,或为动态语言实现语义将不胜感激。

4

1 回答 1

1

在我看来,你需要的本质上是一个类型推断系统,它是编程语言中表达式类型的自动推导。您可以从关于类型推断的维基百科页面开始,然后花一些时间了解Hindley-Milner 算法

AST 只是一个编译器的开始,所以你应该尽量习惯于构建一个具体的 AST 数据结构,并编写访问者来多次遍历树。语义部分仅在您构建了整个 AST 之后才开始。

于 2012-12-27T09:26:59.500 回答