前言
参考东南大学廖力老师的编译原理教程和课上PPT内容。 该学习笔记目前仅打算个人使用。
由于本菜鸡第一次发csdn,许多格式不会用。后续会进一步整理,包括添加笔记内容,标明参考资料。暂时只将学习时的markdown直接导入。
更新中。。。
一、文法的概念
1、文法
文法是描述语言的语法结构的形式规则。
例:英语语法
- Young men like pop music.
英语语法规则如下:
- <句子> → <主语><谓语>
- <主语> → <形容词><名词>
- <谓语> → <动词><宾语>
- <宾语> → <形容词><名词>
- <形容词> → Young I pop
- <名词> → men | music
- <动词> → like
视频中使用的是 → ,而在课上的上PPT中使用的是 ::= 。两种符号都表示“由…组成”,两种符号都可以用。
2、相关概念
(1)非终结符
- 出现在规则的左部、用
<>括起来、表示一定语法概念的词。 - 非终结符集合用VN表示。
(2)终结符
- 语言中不可再分割的字符串(包括单个字符组成的串)。
- 终结符是组成句子的基本单位。
- 终结符集合用VT表示。
(3)开始符号
- 表示所定义的语法范畴的非终结符。
- 注:开始符号又称为识别符号。
(4)产生式
- 是用来定义符号串之间关系的一组(语法)规则。
- 形式:A → α (A 产生 α,或 A 由 α 构成)
(5)推导
推导是从开始符号开始,通过使用产生式的右部取代左部,最终能产生语言的一个句子的过程。
- 最左(右)推导:每次使用一个规则,以其右部取代符号串最左(右)非终结符。
注:最左推导和最右推导称为规范推导。
例:根据英语语法规则推导英语句子。
- Young men like pop music.
英语语法规则如下:
- <句子> → <主语><谓语>
- <主语> → <形容词><名词>
- <谓语> → <动词><宾语>
- <宾语> → <形容词><名词>
- <形容词> → Young I pop
- <名词> → men | music
- <动词> → like
最左推导(由上至下)/ 最右归约(由下至上)过程:
- <句子> ⇒ <主语><谓语>
- ⇒ <形容词> <名词><谓语>
- ⇒ Young <名词><谓语>
- ⇒ Young men <谓语>
- ⇒ Young men <动词><宾语>
- ⇒ Young men like <宾语>
- ⇒ Young men like <形容词><名词>
- ⇒ Young men like pop <名词>
- ⇒ Young men like pop music(语法正确)
视频中使用的是 → ,而在课上的上PPT中使用的是 ⇒ 。⇒ 是为了与产生式中的符号 → 区分,用 ⇒ 表示推导。这里用 ⇒ 来表示。
为了表示和书写的方便,使用符号来表示上述推导序列,并把推导过程缩写为:
- <句子>
Young men like pop music
(6)归约
归约是推导的逆过程,即从给定的源语言的句子开始,通过规则的左部取代右部,最终达到开始符号的过程。
- 最左(右)归约是最右(左)推导的逆过程。
注:最左归约和最右归约称为规范归约。
(7)句型、句子和语言
句型
句型是从文法的开始符号 S 开始,每步推导(包括0步推导)所得到的字符串 α 。
记作:s α,其中 α ∈ (VN ∪ VT)*
句子
是仅含终结符的句型。
例:根据英语语法规则,能否推导得出下列英语句子是语法正确的句子?推导过程中会出现哪些句子?
- Young men like pop music.
英语语法规则如下:
- <句子> → <主语> <谓语>
- <主语> → <形容词><名词>
- <谓语> → <动词><宾语>
- <宾语> → <形容词><名词>
- <形容词> → Young I pop
- <名词> → men | music
- <动词> → like
最左推导(由上至下)/ 最右归约(由下至上)过程:
- <句子> ⇒ <主语><谓语>
- ⇒ <形容词> <名词><谓语>
- ⇒ Young <名词><谓语>
- ⇒ Young men <谓语>
- ⇒ Young men <动词><宾语>
- ⇒ Young men like <宾语>
- ⇒ Young men like <形容词><名词>
- ⇒ Young men like pop <名词>
- ⇒ Young men like pop music(语法正确)
注:过程中少了很多步骤,如将<形容词> <名词>归约为<主语>或<宾语>时的判断(走到头不成功则换另一种)
用图示化方式表示(语法树)
推导:
最左归约:
可能出现的句子:
- 推导过程中的每一步中间结果(包括0度推导,即<句子>)都是一个句型。如<主语> <动词> <宾语>。
语言
语言是由S开始通过 1 步或 1 步以上推导所得的句子的集合。
记为:L(G),L(G) = { α | S α,且 α ∈ VT* }
视频中使用的符号是
,这里还是按照课上PPT走。
(8)文法规则的递归定义
- 非终结符的定义中包含了非终结符自身。
- 使用文法的递归定义要谨慎
例如:字母表 A = { 0,1 },语法规则为:
- <整数> → <数字> <整数> | <数字>
- <数字> → 0 | 1
再如:字母表A = { 0,1 },语法规则为:
- <整数> → <数字><整数>
- <数字> → 0 | 1
待续