编译原理历年试题分析(大题向待补充)

前言

  • 2020.9.6
    近几年的大题考法以及【】中出现的为出题次数,大致就这些题型,下面的问题还需要再整理(挖了3个坑):将题目归一化有序化;每种类型的题目给出例题;每种类型的题目根据题目的发展给出一般的答题模版和巧思
  1. 请画出编译器的功能结构图(简述典型编译器的构成以及各个部分的功能和作用)【2】
源程序->词法分析-语法分析-语义分析-中间代码生成-中间代码优化-目标代码生成->目标程序
中间伴随着表格管理和错误处理
词法分析:将字符串表示成机器可以处理的信息
语法分析:
语义分析:
中间代码生成:
中间代码优化:
目标代码生成:
  1. 典型编译程序在逻辑功能上由哪几部分组成【3】
词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成
  1. 简述DFA和NFA有哪些主要区别?
a/NFA有多个初始状态
b/NFA的输入可以是null
c/NFA同一个输入可以转换到多个不同的状态
  1. 设计确定有限状态自动机,识别被5整除的二进制正整数(不包括前导0)【6】
  2. 给定非确定有限自动机/正则表达式,进行构造与之等价的最简确定有限自动机【7】
  3. 给出确定有限自动机,写出与之等价的正则表达式(用正则表达式描述下面自动机所接受的语言)【2】
上面三种题型都是涉及到第一章词法分析的内容,在设计自动机识别有效状态的时候,不用考虑无效状态;
给定正则表达式要注意三种转换方法,转换到NFA,然后再进行NFA到DFA转换,然后是DFA化简;
NFA转换到DFA是去掉null,将多个终止集合并等操作;
DFA化简是去掉无关状态和合并等价状态的过程
  1. 构造如下文法的NFA/设计构造与左线性文法等价的NFA算法【2】
  2. 直接设计一个正则表达式【5】
(1)写一正则表达式,使其语言是奇正整数的集合,且每个数不以0为前导
D = {0,1,2,3,4,5,6,7,8,9}
D1 = {1,2,3,4,5,6,7,8,9}
D2 = {1,3,5,7,9}
   奇正整数 =  D1D*D2|D2 (十进制形式)
   奇正整数 = 1(0|1)*1|1
(2)用正则表达式描述奇数的集合,且每个数不以0为前导
D = {0,1,2,3,4,5,6,7,8,9}
D1 = {1,2,3,4,5,6,7,8,9}
D2 = {1,3,5,7,9}
   奇数 = D1D*D2|D2
(3)有语言L={a^nb^n|n>0},则识别L的正则表达式可以是aa*bb*
❌ 正则表达式无法描述对称字符串 aaabb不行	
(4) S={a,b} 写出识别语言"每个a后面至少有1个b的所有串"的正则表达式
((ab+)*|b*)*
(5)描述指令集:
以"_m128_"开头;以"p""s"或空结尾;中间是长度大于0的任意小写字母构成的串
_m128_(a|b|c|...|z)+(p|s|null)*
  1. 请画出过程活动记录AR应包含哪些内容?【8】(还有一种给出具体的程序让利用该理论分析具体的活动记录【3】)程序运行时,函数的活动记录是否最多只有一个?函数的活跃活动记录是否最多只有一个?【1】给出运行时动态空间的内存存储区划分和典型活动记录内容
  2. 请分别从语法分析能力和状态数上分析以下四种方法的关系:LR(0),SLR(1),LR(1),LALR(1)/分析四种方法的异同【3】
  3. 设计一个上下文无关文法G/2型文法,可以描述语言{1n0m1n|n,m>0}({aibickdjej|i>=0,j>=1,k>=2})【10】
  4. 设有文法如下,求句型(S,(a))的语法🌲以及所有短语、简单短语和句柄【11】
G[S]:S->(L)|aS|a
     L->L,S|S
  1. 简述语义分析与语法分析的区别,并列举三种语义错误/在进行语义分析时,当处理函数调用语句,都需要做哪些语义检查?【2】

  2. 举例说明乔姆斯基文法分类的依据,以及各类文法表示能力的区别

  3. 采用驻留法实现全局线性组织的符号表,给出扫描至下述程序段带下划线语句处时符号表的内容(还有加一个填写各项存储内容)【11】比较说明单表结构下的驻留法管理和多表结构下的scope栈辅助管理方法的异同

  4. 已知文法产生式,写出该文法的递归下降程序分析/对于下面的C语言程序,画出程序运行时第二次递归进入函数f后的运行时栈的内容是什么【7】

  5. 给定文法判断是否是二义性文法【6】

  6. 已知文法产生式,构造该文法的LR(0)状态机,并判断该文法是否是LR(0)文法,如果不是有几个状态出现什么类型的冲突/给出文法构造其LR(0)归约规范活前缀状态;判断SLR(1)方法能否解决这些冲突【8】

  7. 将下列语句翻译成4元式/给出该程序段四元式的中间代码/利用常表达节省、公共子表达式节省和循环不变式外提三种优化技术对四元式中间代码进行优化【2】,并给出优化后的四元式代码【12】

  8. 根据给定文法构造简单优先关系矩阵【2】

  9. 对于文法,提取其左公共因子,消除左递归。分析新产生的文法是否为LL(1)文件,并构造新产生文法的LL(1)分析表;给出一个新的符号串分析这个输入序列是否为该文法的句子/求题目中给定文法中每个产生式的predict集【11】

  10. 给出一个程序片段,给出程序点的层数和偏移。试写出各个程序点的层数和偏移的变化情况。【9】

  11. 给出一个文法产生式,画出LR(1)活前缀自动机【3】;填写LR(1)分析表,并判断该文法是否是LR(1)文法(判断给出的文法是哪一类文法);判断该文法是否是LALR(1)文法【3】,并说明理由;判断该文法是否是SLR(1)文法;【3】给出符号串(题目中任给的符号串)的分析过程【7】

  12. 高级语言程序设计可以分为嵌套式语言(如PASCAL语言)和并列式语言(例如C语言)两大类,请分析在编译过程中,对于嵌套式语言的处理和并列式语言的处理有哪些区别?

  13. 根据下面声明,写出类型标识符的内部表示【1】

  14. 在过/函信息表中有一项属性叫做size,用于存放该过程或函数活动的记录大小,问什么时候填写/修改/使用size的内容

  15. 在生成中间代码的时候,会产生大量的临时变量,请分析临时变量有哪些性质

  16. 我们学习过基于LL(1)语法分析的语法制导方法,把在语法规则中插入的程序称为语义程序,请问如果采用自顶向下语法分析方法,且语法分析的过程中有回溯的情况,将采用什么样的措施保证语义程序的正确执行。

  17. 给出某语言的文法写出一个语法制导方案;在移入-归约分析中采用如下的语法制导方式,当某一产生式归约时,立即执行括号中的操作,请问当分析器的输入为aacbb时,输出的字符串是什么;对句型采用自底向上的语法分析方法时,需要进行几次归约动作,每次归约的子串是什么【4】

  18. 给出一个类C语言程序,写出其中间代码【2】

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值