1. 语法描述
1.1. 上下文无关文法
1.2. 句子 & 句型 & 语言
-
- 推导出来的都是句型
- 但是如果句型中只含有终结符,那就是句子
- 所有的句子合起来,才是语言
1.3. 文法
文法就是推导的式子。
1.4. 文法二义性
1.5. 文法二义性证明——根据最左 \ 最右推导有两种
1.6. 语言二义性
如果文法没有二义性,也可能使得语言是二义性的。
1.7. 二义性的性质
二义性文法可以转化为无二义性的文法。
1.8. 上下文无关文法的限制
1.9. 文法的类型
2. 词法分析
2.1. DFA
S0 只能是一个(元素)
F 可以有很多(集合)
2.2. NFA
2.3. DFA 和 NFA 区别
2.4. NFA 转换为 DFA
2.4.1. 先对 NFA 转换,用以下规则
2.4.2. 构造状态转换矩阵
2.4.3. 转换为数字
I 这一列从上到下依次排序,然后对应转换后两列的值。
2.4.4. 化简
2.5. 正规式和正规集的转换
3. 语法分析——自上而下
3.1. 消除左递归
- 竖线后面的写前来,后面跟一个 A'
- 剩下的写前来,后面跟一个 A',加竖线和空串
3.2. 构造非终结符的 FIRST 集合
3.2.1. 步骤
- 找出所有的非终结符,遍历所有的文法,直到规则不发生变化为止
- 如果是符号,就将其加入到 FIRST(左边的非终结符)
- 如果不是符号,就将“->”右边的非终结符的 FIRST 有的元素,加入到右边的非终结符的 FIRST 集合中
3.3. 构造非终结符的 FOLLOW 集合
3.3.1. 步骤
后面如果是一个非终结符,最终能够推出来的是‘空’,那么就是第三种情况。
3.3.2. 例题
3.4. 分析表构建
是根据 FIRST 和 FOLLOW 集进行构造。
- 如果 FIRST 中没有空,直接在 FIRST 里的元素上写上产生式
- 如果 FIRST 中有空,要在 FOLLOW 集里的元素写上产生空的产生式
3.5. LL(1)的意义
4. 语法分析——自下而上
4.1. 概念
4.1.1. 短语
- 短语:任意一颗子树中,如果根结点经过若干步才推导出了叶子结点,则这些叶子结点组成的序列就是相对于这棵子树的短语
4.1.2. 直接短语
- 直接短语:属于短语,只不过不能经过若干步的推导了,必须一步就能推导出来叶子结点来,这些叶子结点组成的序列才是相对于这颗子树的直接短语
4.1.3. 句柄
直接短语中的最左直接短语为该句型的句柄
4.1.4. 素短语
素短语,是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。
4.1.5. 最左素短语
最左素短语是句型中最左边的素短语。
4.1.6. 例子
4.2. 规范规约&最右推导
4.3. 算符优先级规则
- 后出现的优先级高。
- 两条原则:
-
- 设终结符 a 在非终结符 A 的前面,那么 a <· 所有 A 的 firstVT
- 设非终结符 A 在终结符 a 的前面,那么 A 的 lastVT ·> a
VT 就是 VT 就是终结符的意思。
4.4. LR 分析
4.4.1. LR 分析器
4.4.2. LR(0)分析器
4.4.3. LR(0)分析表的构造
拓广文法如果没有 S',那么就需要写上 S'->S。
4.4.4. ACTION 和 GOTO 表构造造
- action 就是 VT,goto 就是 VN。
- ACTION 写的是 rj 或者 sj, GOTO 写的是序号(表示下一步到达哪个状态)。
-
- 初始的项目集规范族 在哪,acc 就在哪
- 其余的只有规约项目的,都填 rj
- 其余的,都填 sj
4.5. LR(1)分析表
4.5.1. 构造
另一个例子