【发布时间】:2012-12-27 00:19:46
【问题描述】:
我正在尝试分析一种可以根据概率进行多种翻译的动态语言。我的语言中有一些已定义的类型,例如数字、向量等...
例如,如果我们要看到表达式“a+b”,那么这可能是两个数字的相加,也可能是两个向量的相加。 一个数字更有可能,因此我们认为“最佳”表示是两个数字的总和。但是它们有可能是向量,所以我仍然想保留这种“不太可能”的表示。
如果后来我看到“a/b”,那么我知道它们不能是向量,因为向量除法是未定义的。所以我会丢弃“向量”表示,正确的表示占上风。
我想通过分析 AST 来做到这一点。问题在于,由于类型和运算符的多种可能组合,我们遇到了组合爆炸。
关于我可以使用的合适策略或模式的任何想法?我正在考虑一种用于不同组合的访问者,它们并行运行以赋予结构最佳含义。有点像在自然语言处理中分析句子。
我正在使用 ANTLR 的树遍历机制进行分析,因此任何特定于该系统的参考,或为动态语言实现语义将不胜感激。
【问题讨论】:
-
如果您能找到“Dragon Book”(编译器、原理、技术和工具,Aho、Sethi 和 Ullman 着)的副本,请阅读第 6 章,特别参考 6.7 中的统一算法。 (我的副本是 1980 年代的,所以章节编号可能已经改变。但“统一”这个词将是关键。)
-
谢谢,但龙书对我来说似乎太抽象了。我会研究统一的。
标签: parsing dynamic compiler-construction antlr abstract-syntax-tree