NKU-SE【资料分享】编译原理复习重点

本专栏提供的信息:

写在前面的话

Updated on Jan 15th, 2022

资料来源:

老师本学期最后一节课的复习内容&本人当场速记&本人记忆补充&参照往年学长学姐资料补充

复习ppt:本年度无(老师明确表示不发,因此之后复习课时能当场记就当场记)
本人复习和上课用书:编译原理(第二版)龙书
编译原理(第2版)(Alfred V. Aho、Monica S.Lam等著)
配套答案

其他资源:
课本查找

内容说明:

本篇博客内容由于为当场速记,虽已经过整理,但为了重现课堂,因此仍涵盖大量口语,请自行理解。

复习重点:
题型:

选择题 20道
简答题 几道
两道大题

老师对于考试的一些提示:

YACC要知道,简单的YACC代码要能看懂
题可能会很多,要衡量一下时间
代码题写伪代码就行
汇编语言要会看,起码知道哪个指令代表什么意思

学期知识复习概览:

1. 编译器:
我们将高级语言程序翻译成机器代码进行执行,它的过程是翻译而不是解释也不是直接执行。
要知道编译器的功能是什么,起到的作用是什么。

2. 词法分析:
识别源程序是否有误,读入源程序生成token序列
串:什么是串?串的运算?给一个串,它的幂是多少?长度是多少?
正则表达式:语言和正则表达式之间的转换。知道正则表达式能够表示什么样的语言——写出一个正则表达式它所描述的语言;设计一个语言来写出它的正则表达式。
正则表达式的运算:或、幂、连接。 不同正则表达式运算之间的规律:交换律、结合律等等
有限自动机:NFA DFA
词法分析的工作流程:给定一个正则表达式,根据thompson构造法构造出等价的NFA,根据子集构造法将NFA转化为DFA,并将DFA优化,使得状态集最小。

3. 语法分析:
上下文无关文法描述其语法结构:给定一个CFG,这里面的终结符是哪些,非终结符是哪些,开始符号是哪一个
CFG的改写——去掉空串、消除左递归使得CFG可以满足自顶向下和自底向上
推导:最左推导和最右推导,以及推导和规约之间的关系。
语法分析的工作原理:
自顶向下:递归下降和LL1,要知道递归下降的缺点和LL1的优点
自底向上:LR0 SLR LR1 LALR
对于YACC采取的是LALR的分析思路。要利用YACC这个辅助工具辅助语法分析的过程。
重点掌握:LL1 LR0 SLR这三部分就可以了

4. 语法制导翻译:
SDD SDT :有S-SDD L-SDD ,要能够写出来简单的SDD和SDT
SDD转成SDT:S属性的SDD和L属性的SDD转化成SDT时,应该将属性嵌到什么位置,这些基本的规则要掌握。

5. 中间代码生成:
中间表示形式:能够画出语法树,写出相应的三地址码、四元式和三元式等。
类型和声明:如何写一个对象的类型表达式;对于一个声明语句掌握其在翻译过程中的作用是什么
表达式:控制语句、布尔表达式的翻译,这些翻译要能够看懂

6. 运行时刻环境:
静态分配、栈分配和堆分配分别是怎么进行分配和划分的

7. 代码生成部分:
根据中间表示生成汇编语言,涵盖指令选择、寄存器分配和指令排序等等
对于一个基本块,能够根据中间表示能够划分基本块,形成相应的流图和简单的优化

8. 代码优化部分:
公共子表达式消除、死代码消除、折叠常量等等, 这些可以通过什么样的方式找到不同优化的形式,以及如何对它进行相应的优化。

9. 符号表和错误处理:
符号表记录哪些信息,错误处理:每个阶段可能会遇到哪个错误,然后报告出错误的位置然后继续编译。

大致题目内容:

以下为本场考试的本人记忆,不对真实性和时效性做任何承诺。

  • 选择题:
    一个文法所对应的NFA过程选择
    给出一个文法,选择其表示什么语言
    Yacc中的include部分可以写什么
    L-SDD要在自底向上中分析,应该满足什么条件(给四个概念选一个)
    公共子表达式消除对应什么优化形式(到达定值、活跃变量、可用表达式……)
    ……

选择题属于比较基础的题,就是一些简单练习和概念,难度不大

  • 简答题:
  1. 给语言写出可以描述其的正则表达式。
    本次考试题目为:给出描述一个八进制除8余x的正则表达式描述(x具体是几我忘记了)
    本题可以参考一道“二进制整除3的正则表达式”解答方法……(个人想法)
  2. 给一个串和产生式,给出能够表示出这个串的SDT/SDD
  3. 中间代码四元式表示
    ……
  • 大题:
    Thompson构造法大题:从正则表达式——NFA——DFA——DFA优化 ,比平常作业难了点,出现了死状态,写的时候一直在怀疑自己前面有没有写错
    SLR大题:给出文法,指出文法中终结符有哪些非终结符有哪些,然后构造SLR分析表。
本场考试总结:

小崩。
选择题感觉还可以;
简答题的时候正则表达式不太会写,感觉要写很久跳过了,结果后面也没时间转头写了;第二个SDD和SDT的题,没有太看懂那个串应该如何推导出来,想到的一个推导方法又太nc了,感觉不会这么简单,所以就不知道语义动作应该加什么,加到哪里……
大题:NFA那题题目比平时作业多了一个点,就是到终态之后可能并不会返回回之前出现的某个状态,而是空出来。因为之前练这种题少所以一直在检查自己到底有什么地方出错了,花费了较多时间;
文法SLR比平时作业简单,写的还算顺利。
总的来说,编译原理这课学的时候就太过懵懂,没有及时复习,也没有做多少题,取得这种结果也是理所应当。
一定要多做题!一定要及时弄懂老师上课讲的东西 啊!

关于平时作业:

因为平时作业的ppt也是老师的成果,所以不会放出来;
但是平时作业的题目一部分为龙书课后习题原题,大多数题目类型都可以在龙书课后习题中找到,因此我可以直接摘自龙书,答案在上文中已给出资源链接。

龙书上的正则表达式和语言转化:
正则表达式和语言转化题目一览
正则表达式和语言转化题目一览
龙书上的NFA:
NFA题目一览
龙书上的SDD和SDT:
SDD和SDT题目一览
龙书上的DAG图和代码优化:
代码优化题目一览

关于布尔表达式的四元式序列,可以参考B站视频(选集p5,我觉得讲的比较好),龙书上我并没有找到课后习题
一些关于布尔表达式翻译题的习题博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值