【编译原理】期末简答题
目录
简述典型的编译程序包括了哪些部分?
什么是属性文法,什么是语法制导的翻译模式?
谈一谈编译技术都有哪些应用,学习编译原理课程你有哪些收获
简述LR分析器的工作原理
综合
根据描述,写文法、正规式
正规式、NFA、DFA、最小化
消除左递归、LL(1)文法、FIRST、FOLLOW、预测分析表
语句的翻译(while、if、数组)四元式
活动记录、display
后缀式、抽象语法树
简述典型的编译程序包括了哪些部分?
词法分析
从左到右一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描和分解,从而识别出一个个单词
语法分析
在词法分析基础上将单词序列分解成各类语法短语,如程序、语句、表达式等
语义分析与中间代码生成
审查有无语义错误,并为代码生成收集类型信息(类型检查、变量是否声明、类型是否一致、变量是否已有值等)
将源程序变成一种内部表示形式(中间代码)
代码优化
可在不同的编译阶段进行,其中对中间代码的优化尤其重要
目标代码生成
把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码
表格管理
作为进行语法的合法性检查的依据,作为目标代码生成阶段地址分配的依据
出错处理
错误检测处理与符号表管理工作一样,贯穿整个编译过程
什么是属性文法,什么是语法制导的翻译模式?
将语义以“属性”的形式附加到各文法符号上,再根据产生式所蕴含的语义,给出每个文法符号的属性的求值规则,从而形成一种带有语义属性的上下文无关文法
根据文法中每个产生式所蕴含的语义,为其配备一个(或多个)语法或子程序,对所要完成的功能进行描述,在语法分析过程中,当分析器使用该产生式进行语法分析时(无论是推导还是归约),除完成语法分析动作之外,还将调用为其配备的语义子程序,进行相应地语义处理,完成语义翻译工作
谈一谈编译技术都有哪些应用,学习编译原理课程你有哪些收获
简述LR分析器的工作原理
【编译原理】第五章 自下而上语法分析-CSDN博客
在规范归约过程中,一方面记住以移进和归约出的整个符号串,即记住“历史”,另一方面根据所用的产生式推测未来可能碰到的输入符号,即对于未来进行“展望”
( 当一串貌似句柄的符号串呈现分析栈的顶端时,根据所记载的“历史”和“展望”以及“现实”的输入符号等三方面的材料,来确定栈顶的符号串是否构成相对某一产生式的句柄)
请阅读以下资料,简要叙述里面设计的编译知识
2020年9月30日,毕昇(BiSheng)编译器1.0在鲲鹏社区正式发布上线并下载使用。毕昇编译器是华为提供的针对鲲鹏硬件平台进行了深度优化的一款提供高性能、高可信及易扩展的编译器工具链。毕昇编译器引入了多种编译技术,基于开源LLVM开发,支持C/C++/Fortran编译语言,可将C/C++/Fortran的源程序编译为LLVM中间表示的IR。此外,对高性能编译算法、加速指令集、AI迭代调优等方面进行了增强,使得鲲鹏平台的强劲算力能够较大限度地得到释放
综合
根据描述,写文法、正规式
正规式、NFA、DFA、最小化
消除左递归、LL(1)文法、FIRST、FOLLOW、预测分析表
语句的翻译(while、if、数组)四元式
活动记录、display
后缀式、抽象语法树
1.能被5整除的,且不以0开头的十进制整数集
(1)文法
(2)正规表达式
(1)
S-->ABC|5
A-->1|2|3|4|5|6|7|8|9
B-->EB|ε
E-->0|1|2|3|4|5|6|7|8|9
C-->0|5
(2)
5|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(0|5)
2.对赋值语句x:=-a*(b+c*d)完成以下代码转换
(1)转换为后缀式
(2)转换为抽象语法树
(1)
x a - b c d * + * :=
(2)
(:=)/ \(x) (*)/ \(-) (+)/ / \(a) (b) (*)/ \(c) (d)
1.令文法G[S]为:
S-->aAc|bAb
A-->Aa|b
(1)证明aAaac是该文法的句型,给出该句型的句柄
(2)消除该文法的左递归
(3)消除左递归后,求出改造后文法非终结符的FIRST、FOLLOW集
(4)判断改造后的文法是否是LL(1)文法,说明理由
(5)若是,构造LL(1)分析表
(1)
S → aAc → aAac → aAaac
S/ | \a A c|\A a|\A a
句柄A
(2)
(2)
(3)
FIRST(S)
= {a, b}
FIRST(A)
= {b}
FIRST(A')
= {a, ε}
FOLLOW(S)
= {#}
FOLLOW(A)
= {b, c}
FOLLOW(A')
= {b, c}(4)
无左递归:已消除(满足)
同一非终结符的各产生式 FIRST 不相交:
S
:FIRST(aAc)={a}
,FIRST(bAb)={b}
→ 不相交
A
:只有一个产生式 → 满足
A'
:FIRST(aA')={a}
,FIRST(ε)={ε}
→ 不相交若某产生式 FIRST 含 ε,则 FIRST ∩ FOLLOW = ∅:
FIRST(A') ∩ FOLLOW(A') = {a} ∩ {b,c} = ∅
→ 满足∴ 改造后的文法是 LL(1) 文法。
(5)
非终结符 a b c # S S→aAc S→bAb A A→bA' A' A'→aA' A'→ε A'→ε
2.对于上的正规式ba(a|b)*a
(1)为该正规式构造一个与之等价的NFA
(2)将此NFA确定化得到与之等价的DFA
(3)将此DFA最小化
3.请把下面的语句翻译成四元式序列
if x<a then
begin
while i>m and i<n do
i:=i+10*i;
y:=i/m;
end
else y:m+n;
if x<a goto E.true
goto E.false
E.true: LE: if i>m goto L1
goto F.false
L1: if i<n goto F.true
goto F.false
F.true: i=i+10*i
goto LE
F.false: y=i/m
goto E.next
E.false: y=m+n
E.next:
100(j<,x,a,102)
101(j,_,_,113)
102(j>,i,m,104)
103(j,_,_,110)
104(j<,i,n,106)
105(j,_,_,110)
106(*,10,i,T1)
107(+,i,T1,T2)
108(=,T2,_,i)
109(j,_,_,102)
110(/,i,m,T3)
111(=,T3,_,y)
112(j,_,_,115)
113(+,m,n,T4)
114(=,T4,_,y)
115
1.设有条件语句的文法G[S]为:S->iSeS | iS | i
文法G[S]是二义性的吗?请证明
2.写一个文法使其语言为奇数集,且每个奇数不以0开头
S
ABC | C
B
BE |
E
0|1|2|3|4|5|6|7|8|9
C
1|3|5|7|9
正规式
(1|3|5|7|9)|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(1|3|5|7|9)
3.文法G[E]:
EE+T|T
TT*F|F
F(E)|i
(1)证明串E+F*i是该文法的句型
(2)给出该句型的所有短语、简单短语、句柄
1.已知上的正规式:(0|1)*001
(1)为该正规式构造一个与之等价的NFA
(2)将此NFA确定化得到与之等价的DFA
(3)将此DFA最小化
2.现有文法G[S]:
SrD
DD,i|i
(1)消除该文法的左递归
(2)对消除左递归后的文法,给出每个非终结符的FIRST和FOLLOW集
(3)判断改造后文法是否是LL(1)文法,如果是请为其构造LL(1)分析表
(1)
P=D
=,i
=i
S
rD
D
iD'
D'
,iD'|
(2)
FIRST(S)={r}
FIRST(D)={i}
FIRST(D')={,,
}
FOLLOW(S)={#}
FOLLOW(D)=FOLLOW(S)={#}
FOLLOW(D')=FOLLOW(D)={#}
(3)
不含左递归
每一个非终结符的各个产生式的候选首符集(FIRST集)两两不相交
对于非终结符D',FIRST集包含
,FIRST(D')
FOLLOW(D')=
是LL(1)文法
r i , # S S rD
D D iD'
D' D' ,iD'
D'
3.请把下面的语句翻译成四元式序列
while x<a do
if i<m and j<n then x:=A[i,j]
else x=i+j
其中A是一个10*20的数组,并设数组元素域宽w=4,且各维下标的下界是1
LE: if x<a goto E.true
goro E.false
E.true: if(i<m) goto L1
goto F.false
L1: if(j<n) goto F.true
goto F.false
F.true: T1=i*20
T1=T1+j
T2=A-84
T3=T1*4
x=T2[T3]
goto F.next
F.false: x=i+j
goto F.next
F.next: goto LE
E.false:
100(j<,x,a,102)
101(j,_,_,115)
102(j<,i,m,104)
103(j,_,_,112)
104(j<,j,n,106)
105(j,_,_,112)
106(*,i,20,T1)
107(+,T1,j,T1)
108(-,A,84,T2)
109(*,T1,4,T3)
110(=[ ],T2,T3,x)
111(j,_,_,114)
112(+,i,j,x)
113(j,_,_,114)
114(j,_,_,100)
115
4.活动记录结构如下图所示:
Program P0(input,output);VAR a:integer;procedure P1(x:integer)Begina:=x+2;endbegin...P1(2);...end
临时单元 内情向量 简单变量 |
display |
形参单元 |
参数个数 |
全局Display |
返回地址 |
老sp(动态链) |
画出P0调用P1前、后的栈顶活动记录(含Display表)