1

一段时间以来,我一直在为自己的习惯语言进行语义分析通行证,但没有取得多大成功。但是如果我在谷歌上搜索任何这样的东西,那么绝大多数链接都是无用的大学课程资料或学术论文,或者只是完全不相关的过程,例如英语文本的语义分析,而不是有用的知识。

我也找了传说中的龙书,但我读到它在这方面确实没有太多内容(而且现在也超出了我在亚马逊上的价格范围)。

关于在哪里可以找到此特定编译阶段的材料的任何建议?

4

1 回答 1

2

语义分析是一个笼统的术语,涵盖了编译器中的许多简单步骤。

它通常由以下内容组成:

  • 语法糖和/或宏扩展传递以简化进一步分析
  • 标识符解析和重命名。即,每个名称都变成一个完全限定的标识符,每个局部范围的标识符都被赋予一个唯一的名称
  • 类型检查(类型推断或类型传播)
  • 约束检查
  • 各种健全性检查(即,“如果一个非 void 函数返回一个值”,或者“如果一个变量在初始化之前使用”)

当前的趋势是尝试将所有约束检查限制在类型系统中,而不是单独通过。适用于许多不同语言的通用且强大的类型算法是Hindley-Milner。虽然它看起来很复杂,但实际上它比哑类型传播(如在 C 或 Java 中)更容易实现,如果你以正确的方式进行。

进行复杂类型和任意语义检查的一个非常通用和简单的技巧是遍历您的 AST 并发出一个平面序列的 Prolog(在某些情况下甚至是 Datalog)表达式,您可以将其提供给一个简单的 Prolog 解释器并获取您的整个 AST约束系统解决。

于 2013-02-07T17:18:44.800 回答