2021-2022学年编译原理考试重点[华侨大学]

2021-2022学年编译原理考试重点

注:计算部分请参考 编译原理实验报告

名词解释

  • 编译器:编译阶段,用户输入源程序,经编译器翻译生成目标程序,目标程序在运行时接受输入数据,得到数据输出

  • 解释器:将源程序的翻译和目标程序的运行结合起来,翻译一段源程序,紧接着就执行它,这种方式称为解释

    记忆:编译器和解释器的功能都是翻译和运行目标程序,编译器将二者分开进行,而解释器同时进行翻译和运行工作。

  • 词法分析:根据词法规则,识别源程序中的各个记号(token),每个token代表一类单词(lexeme)

  • 语法分析:根据语法规则,识别记号流中的语法结构,并构造反应该结构的语法分析树

  • 语义分析:根据语义规则,对语法树进行静态语义检查,确保结构正确的语句在语义上也正确

  • 中间代码生成:根据语义分析的结果生成与具体机器无关的中间代码,之后根据具体的机器对中间代码进行解释和执行

  • 中间代码优化:中间代码的生成是机械且固定的,对中间代码进行等价变换,提高代码的时间和空间效率

  • 目标代码生成:将中间代码变换成特定机器上运行的指令代码

  • 符号表:记录源程序中符号的相关信息,合理组织后,在编译器的各个阶段进行快速、准确的增删改查等操作

  • 出错处理:遇到一个错误就使编译器停止工作的做法是不负责的,所以编译器应具有广泛的查错能力,准确报告错误种类和出错位置

  • 语言:语言LLL是有限字母表Σ\SigmaΣ上有限长度符号串的集合

  • 正规式:有限字母表Σ\SigmaΣ上的正规式及正规集LLL的定义为

    1. ϵ\epsilonϵ是正规式,L(ϵ)={ϵ}L(\epsilon)=\{\epsilon\}L(ϵ)={ϵ}
    2. a∈Σa\in \SigmaaΣaaa是正规式,L(a)={a}L(a)=\{a\}L(a)={a}
    3. r,sr,sr,s是正规式,对应正规集L(r),L(s)L(r),L(s)L(r),L(s),则
      1. r∣sr|srs是正规式,L(r∣s)=L(r)∪L(s)L(r|s)=L(r)\cup L(s)L(rs)=L(r)L(s)
      2. rsrsrs是正规式,L(rs)=L(r)L(s)L(rs)=L(r)L(s)L(rs)=L(r)L(s)
      3. r∗r^*r是正规式,L(r∗)=(L(r))∗L(r^*)=(L(r))^*L(r)=(L(r))
      4. (r)(r)(r)是正规式,L((r))=L(r)L((r))=L(r)L((r))=L(r)

    记忆:定义有限字母表上的正规式和其对应的正规集,首先ϵ\epsilonϵ是正规式,其正规集为{ϵ}\{\epsilon\}{ϵ}. 其次,字母表中的每个字母构成正规式,对应正规集为该字母的集合。接着定义正规式的基本操作:或运算、连接运算、闭包运算、括号规定优先级。

  • 模式:产生和识别单词的规则

  • 记号:根据某种规则(模式)识别出的元素

  • NFA:Nondeterministic Finite Automata(不确定有限状态机)是一个五元组(Q,Σ,δ,S,F)(Q,\Sigma,\delta,S,F)(Q,Σ,δ,S,F),其中

    1. QQQ是有限状态的集合
    2. Σ\SigmaΣ是有限字母表,包括ϵ\epsilonϵ
    3. δ\deltaδ是状态转移函数,δ\deltaδ是多值函数,定义如下:
      δ:Q×Σ→2Q\delta:Q\times \Sigma \to 2^Qδ:Q×Σ2Q
      其中,2Q2^Q2QQQQ的幂集。
    4. SSS是初态集,S⊆QS\subseteq QSQ
    5. FFF是终态集,F⊆QF\subseteq QFQ
  • DFA:Deterministic Finite Automata(确定有限状态机)是一个五元组(Q,Σ,δ,S,F)(Q,\Sigma,\delta,S,F)(Q,Σ,δ,S,F),其中

    1. QQQ是有限状态的集合
    2. Σ\SigmaΣ是有限字母表
    3. δ\deltaδ是状态转移函数,δ\deltaδ是单值函数,定义如下:
      δ:Q×Σ→Q\delta:Q\times \Sigma \to Qδ:Q×ΣQ
    4. SSS是唯一初态,S∈QS\in QSQ
    5. FFF是终态集,F⊆QF\subseteq QFQ

    记忆:与NFA相比,DFA具有确定性,因此DFA的Σ\SigmaΣ不包含ϵ\epsilonϵδ\deltaδ是单值映射函数、SSS是唯一初态。

  • 上下文无关文法:四元组(VN,VT,P,S)(V_N,V_T,P,S)(VN,VT,P,S),其中

    1. VNV_NVN是非终结符的有限集合
    2. VTV_TVT是终结符的有限集合
    3. PPP是产生式的有限集合,每条产生式型如A→αA\to \alphaAαα∈(VN∪VT)∗\alpha \in (V_N\cup V_T)^*α(VNVT)
    4. SSS是文法的开始符号
  • 终结符:组成一个语言的不可再分的基本符号

  • 非终结符:产生式左部可以派生出符号或符号串的符号

  • 文法产生式:递归描述终结符与非终结符构成的句型。一般形式为:α→β\alpha \to \betaαβ. 其中,α,β∈(VN∪VT)∗\alpha, \beta \in (V_N\cup V_T)^*α,β(VNVT),且α\alphaα至少含有一个非终结符

  • 推导:从文法开始符号SSS开始,反复使用产生式,将产生式左部非终结符替换为右部文法符号序列,直至得到一个终结符序列

  • 归约:是推导的逆过程,反复用产生式左部替换右部,直至输入串分析完毕

  • 句型和句子:设文法G[S]G[S]G[S],若S⇒∗x,x∈(VN∪VT)∗S\stackrel{*}{\Rightarrow}x,x \in (V_N\cup V_T)^*Sx,x(VNVT),则xxx称为该文法的句型。若S⇒∗x,x∈VT∗S\stackrel{*}{\Rightarrow}x,x \in V_T^*Sx,xVT,则xxx称为该文法的句子

  • 二义性:如果一个文法存在某个句子对应两棵不同的语法树,即具有不同的最左(最右)推导,这个文法就是二义性的

  • 下推自动机:扩展DFA使之可以存取一个栈,称为下推栈。输入一串记号流,下推自动机将根据“有限状态转移控制”,决定是否接受该记号流

  • First集:First(α)={a∣α⇒∗a…anda∈VT}First(\alpha)=\{a|\alpha\stackrel{*}{\Rightarrow} a\dots\ and\ a\in V_T \}First(α)={aαa and aVT},若α⇒∗ϵ\alpha \stackrel{*}{\Rightarrow} \epsilonαϵ,则ϵ∈First(α)\epsilon \in First(\alpha)ϵFirst(α)

  • Follow集:Follow(A)={a∣S⇒∗…Aa…,a∈VT}Follow(A)=\{a|S\stackrel{*}{\Rightarrow}\dots Aa\dots,a\in V_T \}Follow(A)={aSAa,aVT},若S⇒∗…AS\stackrel{*}{\Rightarrow}\dots ASA,则#∈Follow(A)\#\in Follow(A)#Follow(A)

  • 活前缀:规范句型前缀,不含句柄之后的任何符号。若S⇒∗δAωS\stackrel{*}{\Rightarrow}\delta A\omegaSδAω,且可继续规范推导出S⇒∗δαβωS\stackrel{*}{\Rightarrow}\delta \alpha \beta \omegaSδαβω,其中,δ∈V∗,A∈VN,ω∈VN∗,α∈V+\delta \in V^*,A\in V_N,\omega\in V_N^*,\alpha\in V^+δV,AVN,ωVN,αV+,则αβ\alpha\betaαβδαβω\delta\alpha\beta\omegaδαβω的句柄,δαβ\delta\alpha\betaδαβ的任意前缀都是δαβω\delta\alpha\beta\omegaδαβω的活前缀

  • 移进规约冲突:一个项目集中,既有移进项目,又有规约项目,则此时不能决定产生移进动作还是规约动作

  • 语法制导翻译:为每一个产生式配上相应的语义规则,在推导或规约的过程中根据产生式的语义规则执行对应的语义动作

  • 综合属性:若A→α,b:=f(c1,c2,…,ck)A\to \alpha,b:=f(c_1,c_2,\dots,c_k)Aα,b:=f(c1,c2,,ck),其中,bbbAAA的属性,c1,c2,…,ckc_1,c_2,\dots,c_kc1,c2,,ckα\alphaα中某些文法符号的属性或AAA的其他属性,则bbb是综合属性

  • 继承属性:若A→α,b:=f(c1,c2,…,ck)A\to \alpha,b:=f(c_1,c_2,\dots,c_k)Aα,b:=f(c1,c2,,ck),其中,bbbα\alphaα中某文法符号的属性,c1,c2,…,ckc_1,c_2,\dots,c_kc1,c2,,ckAAA的属性或α\alphaα中其他文法符号的属性,则bbb是继承属性

    记忆:综合属性“自下而上,包含自身”;继承属性“自上而下,包含兄弟”。

  • 三地址代码:每条代码包含一个运算和三个地址,例如x=yopzx=y\ op\ zx=y op z,运算op,两个地址y,zy,zy,z用于存放运算对象,地址xxx用于存放运算结果

  • 四元式:(op,arg1,arg2,result)(op,arg1,arg2,result)(op,arg1,arg2,result),四元式是具有四个域的记录结构,其含义是arg1和arg2进行op指定的操作,结果存放到result中

  • 拉链与回填:当三地址码中的转向不确定时,将所有转向同一地址的三地址码拉成一个链,一旦转向地址确定,沿此链回填转向地址

简答题

  • 编译器和解释器的比较:
    编译器和解释器的功能都是翻译和运行目标程序,从翻译的角度来说,二者相类似,但编译器将源程序的翻译和目标代码的运行分开进行,而解释器同时进行翻译和运行工作。
    解释器的优点:

    1. 具有较好的动态特性。目标程序运行时,控制权在解释器,用户可动态修改源程序;
    2. 具有较好的可移植性。对解释器进行重新编译,就可以使其运行在不同环境中。

    解释器的缺点:

    1. 时间损失大。解释器需要边翻译、边运行,运行时需要时间检查源程序;
    2. 空间损失大。解释器的运行也需要占据内存空间。

    记忆:(相同)翻译过程类似。(区别)编译器分别进行翻译和运行工作,解释器则同时进行。(解释器的优缺点)“移动时空”——(优)可移植性、动态特性,(缺)时空损失大、运行效率低。

  • 编译的一般过程:

    • 输入:源程序
    • 输出:目标程序
    • 过程——词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
    • 依赖——符号表管理、出错处理
  • 多遍扫描与一遍扫描的比较:

    • 定义——逻辑上,编译器工作的每个阶段,都要对程序进行完整扫描和分析,称为多遍扫描。但实际上,编译器往往把若干阶段的工作结合起来,进行一遍扫描。原则上,希望扫描的遍数越少越好。
    • 一遍扫描的优点——避免重复扫描,提高编译速度;
    • 一遍扫描的缺点——算法逻辑不清晰、不便于代码优化、发生语法语义错误时前期工作作废

    记忆:(定义)多遍扫描是编译器编译过程中对源程序进行多遍完整的扫描和分析,一遍扫描指的是编译器将若干阶段的工作结合起来,只进行一遍扫描和分析工作。(一遍扫描的优缺点)——优:效率高,减少重复工作;缺点:(算法、代码优化、错误处理)算法逻辑不清晰、不利于代码优化、语法语义分析过程中出现错误导致前面分析过程的结果作废。

  • 语言的运算:

    记忆:交、并、差、连接、闭包、正闭包

    1. X=L∩M,X={s∣s∈Lands∈M}X=L\cap M,X=\{s|s\in L\ and\ s\in M \}X=LM,X={ssL and sM}
    2. X=L∪M,X={s∣s∈Lors∈M}X=L\cup M,X=\{s|s\in L\ or\ s\in M \}X=LM,X={ssL or sM}
    3. X=L−M,X={s∣s∈Lands∉M}X=L- M,X=\{s|s\in L\ and\ s\notin M \}X=LM,X={ssL and s/M}
    4. X=LM,X={st∣s∈Landt∈M}X=LM,X=\{st|s\in L\ and\ t\in M \}X=LM,X={stsL and tM}
    5. X=L∗,X={s∣s∈L0∪L1∪…}X=L^*,X=\{s|s\in L^0\cup L^1\cup\dots \}X=L,X={ssL0L1}
    6. X=L+,X={s∣s∈L1∪L2∪…}X=L^+,X=\{s|s\in L^1\cup L^2\cup\dots \}X=L+,X={ssL1L2}
  • 构造正规式:

    • 标识符的构造:
      digit→[0−9]digit\to [0-9]digit[09]
      letter→[a−zA−Z_]letter\to [a-zA-Z\_]letter[azAZ_]
      id→letter(letter∣digit)∗id\to letter(letter|digit)^*idletter(letterdigit)
    • 浮点数的构造:
      zero→0zero\to 0zero0
      nonzero→[1−9]nonzero\to [1-9]nonzero[19]
      digit→zero∣nonzerodigit\to zero|nonzerodigitzerononzero
      digits→digitdigit∗digits\to digit\ digit^*digitsdigit digit
      integerPart→zero∣nonzerodigit∗integerPart\to zero|nonzero\ digit^*integerPartzerononzero digit
      optionalFraction→.digits∣ϵoptionalFraction\to .digits|\epsilonoptionalFraction.digitsϵ
      FloatNum=integerPartoptinalFractionFloatNum=integerPart\ optinalFractionFloatNum=integerPart optinalFraction
  • 正规式等价证明:
    若正规式P、Q表示同一个正规集,则称P、Q等价,记为P=Q. 可以利用正规式的恒等运算的代数性质,化简复杂正规式,从而判断正规式是否等价。

    记忆:“或”运算具有交换律、结合律,连接运算具有结合律,正闭包运算r+=rr∗=r∗rr^+=rr^*=r^*rr+=rr=rr,闭包运算r∗=r+∣ϵr^*=r^+|\epsilonr=r+ϵ,可缺省运算r?=r∣ϵr?=r|\epsilonr?=rϵ.

  • DFA三种形式的转换:

    1. 状态转换函数sj=δ(si,a)s_j=\delta(s_i,a)sj=δ(si,a)
    2. 状态转换图(注:开始状态用双箭头指向,终结状态用双圈标记)
    3. 状态转换表(注:每个表元素表示某状态在某个输入符号时的转移状态)
  • 汤普森算法:
    作用——构造识别正规式的NFA.
    形式——r1r2,r1∣r2,r1∗r_1r_2,r_1|r_2,r_1^*r1r2,r1r2,r1

    记忆:Thompson算法构造的NFA中,不存在“自回路”且某状态至多只能引出一个非ϵ\epsilonϵ转移。

    改进:在根据正规式构造NFA的实际操作中,常采用“改进的Thompson算法”,以简化NFA的状态。

  • 消除二义性:

    1. 引入新的非终结符,增加一个子结构并提高一级优先级
    2. 递归非终结符在产生式中的位置可以反映文法符号的结合性

    else悬空问题:

    S→ifbthenSS\to if\ b\ then\ SSif b then S
    ∣ifbthenSelseS| if\ b\ then\ S\ else\ Sif b then S else S
    ∣A|AA

    if b then if b then A else A 具有二义性。产生该二义性的原因是else和then数目不同,不能确定else和第一个then对应还是和第二个then对应。因此,将S分为完全匹配(MS)和不完全匹配(UMS),完全匹配中else-then数目相同,每个else都能找到then与之对应,而UMS中else-then数目不同。MS和UMS中都要体现else的右结合性,即与最靠近else左边的then匹配。

    消除二义性后的结果:

    S→MS∣UMSS\to MS|UMSSMSUMS
    MS→ifbthenMSelseMSMS\to if\ b\ then\ MS\ else\ MSMSif b then MS else MS
    UMS→ifbthenS∣ifbthenMSelseUMSUMS\to if\ b\ then\ S\ |\ if\ b\ then\ MS\ else\ UMSUMSif b then S  if b then MS else UMS

  • 预测分析器:
    由驱动器、符号栈和预测分析表组成。输入缓冲区存放待分析的串,以#标记输入串的结束,最终输出语法分析的结果。驱动器控制读入记号,根据栈顶符号和当前读入符号,由预测分析表决定对符号栈进行何种操作。

  • 移进规约分析器:
    由驱动器、符号状态栈和移进归约分析表组成,其工作模式与预测分析器完全相同。输入缓冲区存放待分析的串,以#标记输入串的结束,最终输出语法分析的结果。驱动器控制读入记号,根据栈顶状态和当前读入符号,由移进归约分析表决定对符号状态栈进行何种操作。

  • 中缀式与后缀式的转换:

    • 中缀式转后缀式:后缀式中操作数的顺序与中缀式一致,运算符按运算的先后顺序放入相应的操作数之后;
    • 后缀式转中缀式:顺序遍历后缀式,若当前输入是操作数,则进栈;若当前输入是运算符,则从栈中弹出操作数进行运算,将结果压回栈中。

    记忆:后缀式的引入消除了括号,方便计算。

参考文献

  1. 刘坚. 编译原理基础. 西安:西安电子科技大学出版社,2008.
  2. 刘铭. 编译原理[M]. 北京:电子工业出版社,2018.
  3. 黄贤英. 编译原理及实践教程[M]. 北京:清华大学出版社,2019.
  4. Keith Cooper. 编译器设计[M]. 北京:人民邮电出版社,2012.
  5. 黄贤英. 编译原理:重难点分析·习题解析·实验指导[M]. 北京:机械工业出版社,2008.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂全球半导体市场

来源:深城物联作者:孙卓异,供职于赛迪顾问集成电路产业研究中心 半导体是当今信息技术产业高速发展的基础和原动力,已经高度渗透并融合到了经济、社会发展的各个领域,其技术水平和发展规模已经成为衡量一个国家产业竞争…

如何写好一份技术简历?

写简历的基本目的和策略 大部分情况下,写简历是找工作的第一步,考虑到第二步就是面试,那么简历就是敲门砖,为了让企业认识到你的价值,必须把自己的真实水平描述出来,展现出你有能力应对这份工作。甚至要体现…

这是我看过最全的工业机器人知识介绍 !

来源:产业智能官编者按工业机器人广泛使用在产业制造上,汽车制造、电器、食品等,能替代反复机器式操纵工作,是靠本身动力和控制才能来实现种种功用的一种机器。它能够承受人类指挥,也能够按照事先编排的程序运转。今天…

表白网站|程序猿的爱情记录网站模版|情侣日记网页

程序猿的爱情记录网站模版|情侣日记网页设计 介绍 我为我的女朋友制作了这个主页,目的是记录一些值得纪念的时刻。 如果需要,您可以复制和修改此模板作为送给女朋友或妻子的礼物。 Demo Click here to review the website! ❤️ https://…

python-字符串方法

#find方法:查找子串,返回子串所在位置的最左端索引,如果没有找到则返回-1 s"agsa" print(s.find("gs")) print(s.find("agsaa")) #可以指定匹配的起始点和结束点参数,包含第一个索引,不包含第二个索…

智慧食堂数据分析系统

智慧食堂数据分析系统|大数据分析|数据可视化 Demo Repo:https://github.com/sylvanding/AI-Restaurant-Data-Analysis项目演示(模拟真实运行环境):http://analysis.sylvanding.online数据展示静态页面&am…

鸿蒙系统全面解析,诞生背景、技术细节生态圈一文看懂

编辑:智东西内参华为6月2日正式发布的鸿蒙系统无疑占据了最近热点话题的C位,虽然不全是赞美的声音,但这种努力打破美国垄断,挑战谷歌、苹果在移动操作系统上垄断地位的尝试必将成为中国科技史上的里程碑事件。本期的智能内参&…

python-字典

字典映射:通过名字来引用值;字典是python中唯一内建的映射类型;1)创建字典:字典有键-值对(项)组成,键和值之间通过冒号(:)隔开,项之间通过逗号(,)分割,整个字典由大括号括起来;空字典…

2021十大人工智能趋势

来源:雷锋网6月5日,以“交叉、融合、相生、共赢”为主题的2021全球人工智能技术大会(GAITC 2021)在杭州举行。会上,腾讯优图联合厦门大学人工智能研究院共同发布《2021十大人工智能趋势》(以下简称“趋势报…

通过CTY、VTY、TTY访问网络设备[计网实践Cisco Packet Tracer]

实验一:接入网络设备 学习目标 CTY访问网络设备VTY访问网络设备TTY访问网络设备WEB访问网络设备 实验环境 Cisco Packet Tracer 6.0 原创文章,转载请注明出处:©️Sylvan Ding ❤️ 实验内容 CTY访问设备 CTY是指通过Console接口访…

python-字符串格式化

1)字符串格式化format代表格式字符串,格式:format%x,x为被格式化的值,如果需要在格式化字符串中包括百分号,必须使用%%;format"Hello,%s.%s!" values(world,python) print(format%values)format&…

细数二十世纪最伟大的10大算法

来源:深度学习于机器视觉编辑:nhyilin一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]1946…

外连接就是允许不满足条件的字段查询出来

外连接就是允许不满足条件的字段查询出来转载于:https://www.cnblogs.com/classmethond/p/10129069.html

python-元组

不可变序列:元组,字符串元组用两个圆括号()来表示;用逗号分隔一些值,则自动创建了元组a(1,2,3) print(a) print(())#空元组 #一个值的元组需在值后加一个逗号,与括号进行区分; b(1)#非元组 c(1,) print(b) print(c)#函…

MIT发布首个贝叶斯「数据清洗」机器人!8小时洗200万条数据

来源:GitHub和数据派THU编辑:王菁校对:林亦霖脏数据可以说是所有AI从业者、数据分析师、数据科学家的噩梦。好消息来了!麻省理工学院的研究人员最近带来了一种全新的系统PClean,能够自动地清洗脏数据,如错误…

我的开源项目——Jerry

在日常工作中,经常会碰到一些问题,比如数字金额要写成千分位形式(1234 -> 123,4.00)、要写成汉字大写形式(123 -> 壹佰贰拾叁圆),又比如要进行 cookie 读写操作,这些问题都比较…

python-列表和元组

python 数据结构 1.序列(包括元组、列表、字符串、buffer对象和xrange对象)序列中第一个元素的索引为0,第二个为1,依次类推序列的最后一个元素标记为-1,最后第二个为-2,依次类推 既可以向前计数,也可以向后计数2.列表和…

李德毅院士:希望智能驾驶成为我国继高铁之后又一张新名片

来源:汽车俱乐部Plus/ 导读 /5月19日,在WIC2021第五届世界智能大会的分论坛“智能交通峰会”上,中国工程院院士,欧亚科学院院士李德毅发表了主题演讲。以下是演讲实录。让我们掌声欢迎中国工程院院士,欧亚科学院院士&a…

windows下vagrant的安装使用

vagrant是简便虚拟机操作的一个软件,而使用虚拟机有几个好处: 1、为了开发环境与生产环境一致(很多开发环境为windows而生产环境为linux),不至于出现在开发环境正常而移步到正式生产环境时出现各种问题,而v…

python-字符串

#字符串之间的拼接,转换 #str():他会把值转换成合理形似的字符串,repr()会创建一个字符串,然后以合法的形似来表示值 #事实上,str(),int()、float()和long()是一种类型对象,并不完全是普通的函数,而repr()是…