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

Programming languages 我在哪里可以学习语义分析?,programming-languages,semantics,Programming Languages,Semantics,我已经为自己的习惯语言做了一段时间的语义分析,但没有多大成功。但如果我在谷歌上搜索任何此类内容,那么绝大多数链接都是有用的大学课程材料或学术论文,或者完全无关的过程,例如英语文本的语义分析,而不是有用的知识 我也在寻找传说中的龙之书,但我读到它在这方面的内容并不多(而且也超出了我目前在亚马逊上的价格范围) 关于在哪里可以找到这个特定编译阶段的资料,有什么建议吗?语义分析是一个涵盖编译器中许多简单步骤的总括术语 它通常包括以下内容: 语法分析和/或宏扩展可以简化进一步的分析 标识符解析和重命名。

我已经为自己的习惯语言做了一段时间的语义分析,但没有多大成功。但如果我在谷歌上搜索任何此类内容,那么绝大多数链接都是有用的大学课程材料或学术论文,或者完全无关的过程,例如英语文本的语义分析,而不是有用的知识

我也在寻找传说中的龙之书,但我读到它在这方面的内容并不多(而且也超出了我目前在亚马逊上的价格范围)


关于在哪里可以找到这个特定编译阶段的资料,有什么建议吗?

语义分析是一个涵盖编译器中许多简单步骤的总括术语

它通常包括以下内容:

  • 语法分析和/或宏扩展可以简化进一步的分析
  • 标识符解析和重命名。也就是说,每个名称都被转换成一个完全限定的标识符,每个本地范围的标识符都被赋予一个唯一的名称
  • 类型检查(类型推断或类型传播)
  • 约束检查
  • 各种健全性检查(即,“如果非void函数返回值”,或“如果初始化前使用了变量”)
当前的趋势是尝试将所有约束检查限制在类型系统中,而不是单独进行传递。本文介绍了一种适用于多种不同语言的通用且功能强大的键入算法。尽管它看起来可能很复杂,但事实上,如果使用正确的方法,它比哑类型传播(如在C或Java中)更容易实现


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

Benjamin Pierce有两本关于类型检查的好书。