02 程序设计语言及其文法 | 《编译原理》笔记

本系列是编译原理 (哈工大陈鄞、郭勇)视频课的课堂笔记,主要是课堂 PPT 和部分讲授内容的文字版,仅供参考。

基本概念

字母表 $\Sigma$ 是一个有穷符号集合,如二进制字母表(即 {0, 1})、ASCII 字符集、Unicode 字符集等。

字母表上的运算包含以下几种:

  • 乘法:
  • 幂运算:
  • 正闭包(positive closure):
  • 克林闭包(Kleene closure):2023_09_24_8IdKMQv

文法的定义




  • VT 和 VN 是互斥的集合
  • $\alpha$ 和 $\beta$ 都是文法符号串

简化的算术表达式文法:

  • id: 标识符
  • E: expression,是最大的语法成分



语言的定义

现在给出语言的形式化定义:由文法 G 的开始符号 S 推导出的所有句子构成的集合称为文法 G 生成的语言,记为 L(G)。例如:

文法的分类

2023_09_25_CcVhnSa

当上下文是 $\alpha_1$ 和 $\alpha_2$ 时,$A$ 才能被替换为 $\beta$。



上述右线性文法例子描述的是「字母开头的字母数字串」。

CFG 的分析树

正则文法可以描述程序设计语言中的大多数单词,但是生成能力有限,几乎描述不了程序设计语言中的句子构造,上下文无关文法则可以做到这一点。

分析树是推导的图形化表示。

「子树只有父子两代结点」即子树的高度为 2。

在这个例子中,「人民」、「生活」、「水平」是直接短语,即「直接短语一定是某产生式的右部」。「高人」、「民生」、「活水」不是边缘,所以不是直接短语,即「产生式的右部不一定是给定句型的直接短语」。


可以引入消歧规则:每个 else 和最近的尚未匹配的 if 匹配。

对于任意一个上下文无关文法,不存在一个算法,判定它有无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的:

  • 满足,肯定无二义性
  • 不满足,也未必就是有二义性的

02 程序设计语言及其文法 | 《编译原理》笔记

/posts/e92a38ab.html

作者

学习提升网

发布于

2023-09-24

更新于

2023-12-16

许可协议

评论