编译原理笔记

发布于:2025-06-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

1.编译原理流程

在这里插入图片描述

2.推导的定义

在这里插入图片描述
在这里插入图片描述

3.句型,句子定义

在这里插入图片描述

4.文法的几种类型

在这里插入图片描述
二型文法也叫上下文无关文法
在这里插入图片描述

5.短语

在这里插入图片描述

句柄为一棵树最左侧直接短语,在上图中为P。
直接短语是再无分支的叶子节点。
在这里插入图片描述

6.给定语法写出文法以及给定文法写出语法。

在这里插入图片描述
在这里插入图片描述

7.消除左递归

在这里插入图片描述
在这里插入图片描述

8.消除回溯

在这里插入图片描述

9.NFA

在这里插入图片描述

自上而下分析法

10.first集follow集

在这里插入图片描述

first求法例如
找X的first集合,就看这个字母产生式右边的第一个,如果是终结符就写入,如果是非终结符就继续往下。
在这里插入图片描述
follow集的求法:
1.如果是起始符加上‘#’。
2.如果这个集合右侧为空则等于箭头左侧的Follow集合。
3.如果这个集合的右侧为终结符直接写入。否则他的Follow集合是右侧非终结符的first集合去掉空串。
4.如果右侧非终结符能直接推导到空串,那么要加入Follow右侧集。
在这里插入图片描述
例子
在这里插入图片描述

11.预测分析表

在这里插入图片描述

12.LL(1)

13.LL(1)的输入串分析

1.要点:产生式反着压,转换为终结符,并且尽量往输入符号凑。
在这里插入图片描述

自下而上分析法

13.LR(0)

在这里插入图片描述
1.拓广文法:
用S‘ 指向它本身,并且吧有或(|)的产生式分离开来,标上序号。
2.画活前缀DFA
从开始符号进行第一次规约/移进
如果移进后,点右侧是非终结符,则把上一个状态的该字母产生式全部写入。
如果这个状态到下一个状态重复了那么将箭头指向自身。
在这里插入图片描述
3.引入SLR(1)
可以发现I4和I5发生了移进和归约的冲突。

4.填表
ACTION下放终结符和#。
GOTO下放非终结符。
左侧0-i个State。
1 / # 位置固定为 acc。
通过观察DFA。
I0通过a可以到达状态4填入S4。
I0通过S可以到达状态1填入1。
如果Ix是归约式子,在对应产生式右侧的Follow集合下方填入rx。
任何状态下的归约式子都要如此操作。
I2是归约式子,在对应产生式右侧的Follow集合下方填入r2.
在这里插入图片描述
5.分析表
规则:
1.状态栈顶和余串栈顶查表找Action,在下一行写入状态栈,符号站,余串出栈。
2.如果Action为ri,那么通过初始产生式将现有符号栈归约。
比如步骤3:
5和d匹配查表得到r6,那么将现有符号栈匹配产生式6进行归约,归约了几个符号那么状态对应出栈几位。
结果为 05 #bB d#
那么将5和B匹配找到GOTO为7,填入下一个状态。
于是为057 #bB d# GOTO 7。
直到ACTION为acc。
Ri看归约结果,Si看剩余输入串。
于是有
在这里插入图片描述

初始状态
在这里插入图片描述
结束状态

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到