我在哪里可以学习语义分析?

时间:2013-02-07 16:51:57

标签: programming-languages semantics

我一直在为我自己的习惯语言进行语义分析传递,但现在却没有太大的成功。但是,如果我在Google上搜索任何此类内容,那么绝大多数链接都是使用大学课程材料或学术论文,或者只是完全不相关的过程,例如英语文本的语义分析,而不是有用的知识。

我也一直在寻找具有传奇色彩的龙书,但我读到它在这方面并没有太大的含义(现在也超出了我在亚马逊的价格范围)。

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

1 个答案:

答案 0 :(得分:2)

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

通常包含以下内容:

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

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

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