我正在尝试根据概率分析可以具有多种翻译的动态语言。我的语言中有一些已定义的类型,例如数字、向量等...
例如,如果我们看到表达式“a+b”,那么这可能是两个数字的相加,也可能是两个向量的相加。一个数字更有可能,因此我们认为“最佳”表示是两个数字的总和。然而,它们有可能是向量,所以我仍然想保留这种“不太可能”的表示。
如果后来我看到“a/b”,那么我知道它们不能是向量,因为向量除法是未定义的。所以我会抛弃“矢量”表示,正确的表示占上风。
我想通过分析 AST 来做到这一点。问题是由于类型和运算符的许多可能组合,我们有一个组合爆炸。
关于我可以使用的合适策略或模式的任何想法?我正在考虑一种用于不同组合的访问者,它们并行运行以赋予结构最佳含义。有点像在自然语言处理中分析句子。
我正在使用 ANTLR 的树行走机制进行分析,因此任何特定于该系统的引用,或为动态语言实现语义将不胜感激。