【编译原理】计算机考研复试问答总结

因为复试专业课需要考编译原理,线上复试总结一些编译原理的相关题目~
(ps:只是一些面试的一些概念简答题,如果有笔试相关类型的题目要好好写)

第一章 编译概述

Q1. 高级语言,汇编语言和机器语言的关系?编译器如何将他们联系起来?
翻译程序是指把用某种程序设计语言编写的程序(源程序)翻译成与之等价的另一种语言的程序(目标程序)。包括:编译程序,汇编程序和解释程序。
编译程序:能够将高级语言编写的源程序翻译成等价的机器语言/汇编语言的目标程序。
汇编程序:将汇编语言程序翻译成等价的机器语言程序(可直接在计算机上执行)。
解释程序:翻译一句执行一句,不生成目标文件,直接执行源代码文件。

Q2.简述编译程序结构,并说明每个部分的作用。
(1)词法分析:根据词法规则,对构成输入源程序的字符扫描分解,识别出一个个单词符号。
(2)语法分析:在词法分析的基础上,根据语言语法规则,把单词符号分解成各类语法单位。
(3)语义处理和中间代码生成:根据语言的语义规则来生成中间代码。
(4)代码优化:对程序和中间代码进行等价变换,从变换后的程序出发,能生成更有效的目标代码。
(5)目标代码生成:把中间代码变换成特定机器上的低级语言代码。

第二章 词法分析器与有限自动机

Q3.什么是推导,什么是规约?并简述规范推导和规范归约。
推导:把句型中的非终结符用产生式规则的右部来替代的过程。
归约:把句子中的某个子串(即句柄)用一个非终结符来替代的过程。
规范推导:也称最右推导,指对一个推导序列中的每一步直接推导α=>β,都是对阿尔法中的最左非终结符进行替换;规范推导的逆过程成为最左归约,也即规范归约。

Q4.什么是语法树,其优点是什么?
语法树是一个句型推导的树形表示。
其优点是有助于理解一个句子语法结构的层次。

Q5.什么是文法二义性?怎样消除文法二义性?
文法的二义性:如果一个文法存在某一个句子对应两颗不同的语法树,则称这个文法是二义的。
消除文法二义性的方法包括:
(1)不改变文法,附加一些限制条件,生成确定的语法树
(2)改变文法,构造一个等价的新文法,把排除二义性规则合并到原文法中

Q6.怎样判断某个句子w是否合法?
(1)从文法的开始符号出发,逐步推导,看能否产生w。若能,则w是合法的句子;
(2)从句子w出发,逐步归约,看是否能够归约到文法的开始符号。若能,则w是合法的句子。

第三章 词法分析器与有限自动机

Q7.什么是DFA,什么是NFA?简述他们的区别和联系。
DFA(确定的有限自动机):M是一个五元组,M = ( S,Σ ,δ,S0,F )
S:有穷状态集
Σ:输入字母表,即输入符号集合。
δ:将S×Σ映射到S的转换函数。
S0:开始状态
F:终止状态集
NFA:非确定有限自动机:M是一个五元组,M = ( S,Σ ,δ,S0,F )
(状态子集确定,状态不确定)
S:有穷状态集
Σ:输入符号集合,即输入字母表。假设ε 不是Σ中的元素
δ:将S×Σ映射到S的转换函数。
S0:开始状态集
F:终止状态集
DFA是NFA的特例,NFA是DFA的推广。NFA能识别的语言都能被DFA识别,DFA相应的识别程序更容易实现。

Q8.简述NFA确定化为DFA的基本思路
核心思想:状态子集法
基本思路:DFA的每个状态代表NFA状态集合的某个子集,构造的DFA使用它的状态去记录NFA读入输入符号之后可能到达的所有状态的集合。

Q9.简述DFA最简化的基本思路
DFA中的有些状态是等价的。如果从状态S出发,经过任意符号串,能够到达终止状态,对于同一个串t,状态W也能终止,则状态S和W等价。两个终止状态可以不同,只要终止就可以。
不等价:找出一个串t,S出发可以终止,W出发不能到达终止状态。
将这些等价的状态进行合并,就可以简化DFA。

Q10.说明正规式,正规集和正规文法的关系。以及如何判断两个正规式等价?
正规式:是描述程序语言单词的表达式,是一种表示正规集的工具。
正规集:正规式描述的表达式的集合。
对于任意一个正规式,存在定义同一语言的正规文法;反之,对每个正规文法,同样存在一个生成同样语言的正规式。
两个正规式等价<=>描述的两个正规集相同(正规式=>NFA=>DFA=>最简化)

第四章 自顶向下的语法分析

Q11.简述自顶向下的语法分析的基本思想,以及面临主要的问题。
基本思想:从文发的开始符号出发,往下推导,试图推导出句子。
语法树角度:从树根出发,不断向下生长,直至所有叶子构成的串就是句子。
面临的两个问题:
(1)回溯问题 (2)左递归问题

Q12.FIRST集和FOLLOW集分别表示什么?
FIRST集:从符号x可以推导出的所有首终结符或可能的ε。
FOLLOW集:句型中,紧紧跟在符号A后面的终结符号。

Q13.如何判断有无回溯?
定义一个SELECT集合:
SELECT(x)=FIRST(x),若ε不属于FIRST(x) / (FIRST(x)-{ε})∪FOLLOW(A)
有A->X1|X2|…|Xn,若SELECT(Xi)∩SELECT(Xj)=Ø,则无回溯

Q14.简述LL(1)分析法的工作原理。
LL(1)分析技术结构组成包括:栈,输入,输出,总控程序(表驱动),LL(1)分析表
(1)若栈顶是非终结符号,查表。空白:报错。否则,栈顶弹出,倒序入栈;
(2)若栈顶是终结符号,比较。和下个单词一样:栈顶弹出,读取下一个单词。否则,报错。
(3)若栈顶是#,下个单词#,成功。否则,失效报错。

第五章 自底向上的语法分析

Q15.简述自底向上的语法分析的基本思想,以及面临的主要问题。
基本思想:从句子出发,不断向上归约,试图归约到文法的开始符号。
语法树角度:从叶子开始,向上生长,一直到树根。
面临的两个问题:
(1)如何寻找可规约子串?
(2)找出可规约字串后,用哪一条产生式规则进行规约?

Q16.介绍移进-归约法的基本思想。
基本思想:不断将下个单词移进栈,判断在栈顶是否已构成一个可规约子串。如果已经构成则立即归约;否则继续移进栈。

Q17.什么是素短语和最左素短语?
素短语:是指一个短语至少包含一个终结符,并且除它自身之外不再包含其他素短语。
最左素短语:就是句型最左边的素短语,是算符优先分析法的归约对象。

Q18.简述算符优先分析法的工作原理。
算符优先分析法从运算符之间优先级的角度作为切入点,通过算符优先关系生成算符优先关系表,就可以在移进-归约过程中,在栈的内部寻找最左素短语,一旦找到就立即进行归约。
具体过程:
(1)当栈顶运算符优先关系a<b或a=b时,将b移进栈;
(2)当栈顶运算符优先关系a>b时,表示已经找到了最左素短语的尾部,然后在栈内由栈顶向栈底搜索第一个出现<的运算符,头尾之间的子串即最左素短语,然后进行归约。

Q19.活前缀的作用是什么?
如果求出了文法G的所有活前缀,就可以方便地进行语法分析。每当移进一个符号,就查看栈中的内容是否与某一个活前缀βwP相同。若相同则按照规则P进行规约,否则就继续移进下一个符号。

Q20.求优先函数的方法
(1)Bell有向图法 (2)逐次加1法 (3)Martin算法

Q21.什么是LR(0)项目集规范簇?以及LR(0)项目集中有哪两种冲突形式?
LR(0)项目集规范簇:能够识别文法G的所有活前缀的LR(0)项目集闭包组成的DFA。
两种冲突形式:
(1)移进-归约冲突 (2)归约-归约冲突

Q22.相较于LR(0)分析法,SLR(1)分析法如何提高分析能力?
LR(0)分析技术不向前查看下一个符号,不利用下一个符号的信息。其表现为在填写r型动作时,在ACTION子表的状态i所在行上全填写上归约动作,增加了冲突的机会。
SLR(1)分析法通过使用FOLLOW集来提高分析能力,只有下个单词属于某个符号的FOLLOW集时,才允许在表中填入归约动作。

Q23.LR(1)分析技术是如何提高分析能力的?
当精确指明下个单词是哪些符号时,才允许归约。

第六章 属性文法

Q24.介绍属性,语义规则以及属性文法的概念。
属性:对文法中的每个符号,在语义方面人为指派若干个值。
语义规则:语法规则中符号属性间存在的约束关系(计算规则)。
属性文法:配上语义规则后的文法。

Q25.什么是综合属性,什么是继承属性?
A -> X1 X2 X3 …Xn相应的语义规则是b=f(a1,a2,…,ak)
(1)若b是A的属性:A.b称为A的综合属性;
(2)若b是Xi的属性:Xi.b称为Xi的继承属性。
综合属性依赖于子结点和自己,在自底向上语法分析时能通过一边扫描全部计算出来;
继承属性由其父结点或兄弟结点的属性值来确定,主要用于表达上下文的依赖性。

Q26.什么是S-属性文法,什么是L-属性文法?
S-属性文法:文法中的所有属性均为综合属性,适合于自底向上的语法分析;
L-属性文法:
(1)S-属性文法是L-属性文法
(2)若A -> X1 X2… Xk…Xn,b是Xk的继承属性,则Xk.b由A的继承属性及左边兄弟的任何属性决定
适用于自顶向下的语法分析。

Q27.简述语法制导的语义翻译的基本思想。
给文法配上语义规则,当进行语法分析,每当发生归约,则自动调用该规则所配置的语义规则。在进行语法分析的同时,自动进行语义的处理,即语义处理的时机,调用何种语义规则都是由当时进行语法分析的归约时刻决定的。

Q28.什么是翻译方案?
把语义规则转成语义动作,放在规则右部适当位置,成为文法的一个组成部分。

Q29.怎样指导将语义动作插入到合适的位置上?
(1)继承属性:计算继承属性的动作,应放在符号左边;
(2)综合属性:计算综合属性的动作,应放在这样的位置,其他属性都已经算出,通常放在最右边
(3)语义动作:一个语义动作不能引用他后边的符号的属性,语义动作通常放在它所引用的属性此时已经全部算出。

第七章 语义分析与语法制导的翻译

Q30.生成中间代码有什么好处?
(1)可以进行与具体机器特性无关的能反映代码本身特性的代码优化;
(2)当要将编译程序移植到新的目标机器时,前端(词法分析…)几乎不变,只需要修改后端。后端是针对具体目标机器的代码生成与优化。

Q31.简述“回填”技术的思想。
当生成一个跳转指令时,暂时不指定该跳转指令的目标标号。这样的指令都被放入由跳转指令组成的列表中。同一个列表中的所有跳转指令都具有相同的目标标号。等到能够确定正确的目标标号时,才去填充这些指令的目标标号。

第八章 运行时空间分配

Q32.说明C语言运行时的空间分配策略。
对于C语言程序中的全局变量,static型局部变量,采用静态分配存储策略;
对于函数中非static型局部变量,采用栈式存储分配策略;
对于指针类变量所指的空间,可以通过堆式存储分配策略来管理,需要运行库的支持。
运行时内存空间划分为代码区,静态数据去,栈,堆。静态数据区在编译时就已知大小,相对固定;栈和堆大小可变。栈向下生长,堆向上生长。

Q33.什么是活动,什么是活动记录?C语言活动记录的结构是怎样的?
函数的一次调用执行成为一个活动。
从函数的第一条指令开始执行到函数的最后一条指令为止,这个过程为函数的一次活动的生存周期。
管理函数的活动所需要的全部信息,称为函数的活动记录。

活动记录结构
临时变量
局部变量
老BP
返回地址
实参(n)
实参

老BP:用于运行时访问局部变量,即实参。格式:[BP+data]。

第九章 代码优化

Q34.什么是优化?优化原则有什么?
优化:对程序和中间代码进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。
原则:
(1)等价原则:不能改变程序运行的结果;
(2)有效原则:缩短目标程序运行的时间 / 压缩程序的存储空间
(3)合算原则:代价小

Q35.什么是基本块?怎样划分基本块?
基本块:指程序中一组顺序执行的语句序列,其中只有一个入口和一个出口。入口就是其中的第一条语句,出口就是其最后一条语句。对于一个基本块来说,执行是只能从其入口进入,从其出口退出,期间不能停止也不可能有分支。
求入口语句:
(1)四元式序列的第一条语句;
(2)经条件转移或无条件转移能转到的语句;
(3)紧跟在条件转移语句后面的语句
对于每个入口语句,其所属的基本块,是由该入口语句到下一入口语句(不包括该入口语句)或到下一转移语句(包括该转移语句)或停语句(包括该停语句)之间的语句序列组成的。

Q36.简述局部优化和循环优化的过程。
局部优化:(1)准备操作数的结点 (2)合并已知量 (3)删除公共子表达式 (4)删除无用赋值
循环优化:(1)代码外提 (2)强度削弱 (3)归纳变量删除

Q37. 简述利用DAG图进行基本块优化的基本思想。
基本思想:首先顺序地对一个基本块内所有四元式构造一个DAG,接着按构造节点的次序将DAG还原成四元式序列。构造DAG的同时已经进行了局部优化,因此按照构造DAG结点的顺序,对每一个结点写出相应的四元式就可以实现对基本块的优化处理。

第十章 目标代码生成

Q38.目标代码生成主要应考虑哪几方面的因素?
目标代码可以是某种能立即执行的机器语言代码,也可以是可重定位的机器语言模块,或者是某种类型机器上的汇编语言程序。
目标代码生成主要考虑的因素包括:生成的代码要短,执行效率高(充分利用机器中的寄存器,使用指令代价小的指令等)。

只有一些网络面试问答题,如果笔试的话一定要把相关题型做透。结束!后面三章好像有点草率了~

【编译原理】计算机考研复试问答题总结相关推荐

  1. 【离散数学】计算机考研复试问答题总结

    [离散数学]计算机考研复试问答题总结 复试专业课需要考察离散数学,针对线上复试总结出的一些问答题目~ (如果有笔试,相关类型的题目一定要好好做) 第一章 命题逻辑 Q1. 什么是永真式,永假式和可满足 ...

  2. 武汉理工大学计算机考研复试资料,武汉理工大学计算机考研复试

    武汉理工大学 计算机考研 复试 心得体会 经验 前言:理工计算机最近几年的复试题目貌似都很难找,作为过来人,本人深深高手到其不方便~~为此,本人在复试完毕后对题目做了及时的记录,希望对以后几届想考理工 ...

  3. 计算机考研复试--英语常问问题及答案

    计算机考研复试–英语常问问题及答案 Category 1: Personal Questions Question 1.1: Tell us something about yourself. Ans ...

  4. 计算机考研复试面试常问问题 操作系统篇

    计算机考研复试面试常问问题 操作系统篇 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高! 此 ...

  5. 2020杭电计算机考研复试面试

    2020杭电计算机考研复试面试问题 20考研学渣一枚,有幸上岸,整理了下自己以及朋友复试遇到的问题 英语题目: 1.如果你想邀请以为古代名人参加你的聚会,你会选谁 2.最重要的品质,为什么 专业题: ...

  6. 计算机考研复试面试常问问题 编程语言篇

    计算机考研复试面试常问问题 编程语言篇 个人整理,免费分享,不可用于商业用途,转载请注明出处! 但是有同学反应闲鱼上有人盗卖此免费分享资料,还有好多同学买了,所以希望大家多多点赞评论收藏,提高这份资料 ...

  7. 计算机考研复试面试常问问题 计算机网络篇(上)

    计算机考研复试面试常问问题 计算机网络篇(上) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

  8. 东北大学2022年计算机考研复试在几月

    2022年东北大学计算机考研复试时间预计在2022年3月中旬前后,考研复试内容当前暂未公布,建议考生参考2021年东北大学计算机考研复试信息. 东北大学2022年计算机考研复试时间:3月中旬前后 东北 ...

  9. 华中科技大学2022年计算机考研复试时间与复试内容

    2022年华中科技大学计算机考研复试时间预计在2022年3月中旬,考研复试内容当前暂未公布,考生建议参考2021年华中科技大学计算机考研复试信息. 华中科技大学2022年计算机考研复试时间:3月中下旬 ...

最新文章

  1. Balder 3D开发系列之--创建天空盒
  2. 深入理解linux系统的目录结构
  3. oracle mssql交换数据库,Database link 连接oracle MSSql 实现逻辑数据互导
  4. CF19E-Fairy【树形结构,差分】
  5. 统计信息在数据库中的作用_统计在行业中的作用
  6. 36日期计算包含计算某月某日是星期几的公式
  7. 关于Kafka高性能的几个问题
  8. vue项目中npm install初始化报错以及‘cross-env’ 不是内部或外部命令问题
  9. IDEA:AbstractMethodError: Receiver class org.jetbrains.plugins.scala ScTraitImpl not define or inher
  10. Java编程:分治算法
  11. svn 迁移到git下全过程
  12. 【QT】QT从零入门教程(八):图像灰度化
  13. 中国人大网络教育计算机考试题,第九章计算机多媒体技术20秋人大测试题
  14. ENVI软件图像放缩出现重影的解决办法
  15. 短视频代运营服务内容
  16. git push 提交失败
  17. FPGA仿真--前仿真和后仿真
  18. 高德地图在打包apk后部分页面无法正常定位解决办法
  19. vue 项目开发 lenovo商城
  20. JS中页面跳转,传值包含中文时乱码解决方案

热门文章

  1. Pause Giant AI Experiments: An Open Letter (Elon Musk, March 22 2023)【中英双语】
  2. linux 网卡自动挂死,shell脚本自动检测网络掉线和自动重连
  3. 【无标题】报告实录文本挖掘与分析(简单版)
  4. 2010年世界杯 模拟夺冠程序
  5. 数据结构—树与二叉树(Part Ⅵ)——平衡二叉树哈夫曼树
  6. 节点增加selinux权限
  7. java蓝桥杯练习 星际交流
  8. 云计算中SOA是什么?
  9. How to programatically unplug replug an USB device in linux?
  10. 助听器App 安卓 耳返