当前位置: 首页 > news >正文

【编译原理】期末简答题

目录

简述典型的编译程序包括了哪些部分?

什么是属性文法,什么是语法制导的翻译模式?

谈一谈编译技术都有哪些应用,学习编译原理课程你有哪些收获

简述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)

S\rightarrow aAc|bAb \\ A\rightarrow bA' \\ A'\rightarrow aA'|\varepsilon

(3)

FIRST(S) = {a, b}

FIRST(A) = {b}

FIRST(A') = {a, ε}

FOLLOW(S) = {#}

FOLLOW(A) = {b, c}

FOLLOW(A') = {b, c}

(4)

  1. 无左递归:已消除(满足)

  2. 同一非终结符的各产生式 FIRST 不相交:

    • SFIRST(aAc)={a}FIRST(bAb)={b} → 不相交

    • A:只有一个产生式 → 满足

    • A'FIRST(aA')={a}FIRST(ε)={ε} → 不相交

  3. 若某产生式 FIRST 含 ε,则 FIRST ∩ FOLLOW = ∅:

        FIRST(A') ∩ FOLLOW(A') = {a} ∩ {b,c} = ∅ → 满足

∴ 改造后的文法是 LL(1) 文法。

(5)

非终结符abc#
SS→aAcS→bAb
AA→bA'
A'A'→aA'A'→εA'→ε

2.对于\sum =\left \{ a,b \right \}上的正规式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开头

SABC | C

BBE | 

E0|1|2|3|4|5|6|7|8|9

C1|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

SrD

DiD'

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)文法

ri,#
SSrD
DDiD'
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表)

http://www.dtcms.com/a/263151.html

相关文章:

  • ruv200 ext4文件系统调试总结
  • python包管理工具uv VS pip
  • 多重性校正:临床试验统计的关键防线
  • vue3 + luckysheet 实现在线编辑Excel
  • C 语言安装使用教程
  • 高效数据采集:Python与Rust完美结合
  • docker搭建minio和python使用minio
  • C++之AVL树的介绍以及AVL树自我实现
  • 计算机网络第一章——计算机网络体系结构
  • Junit_注解_枚举
  • K8S初始化master节点不成功kubelet.service failed(cgroup driver配置问题)
  • 基于vue+View UI的组织机构选择
  • 【计算机网络架构】总线型架构简介
  • 基于MATLAB的SVM支持向量机的乳腺癌分类方法应用
  • docker安装RabbitMQ,创建RabbitMQ容器
  • 选择排序算法详解
  • 云原生微服务架构搭建与部署全流程及样例
  • Blender设置物体绕轴环绕
  • 小白excel中使用VBA
  • Excel Report
  • 深度学习03 人工神经网络ANN
  • 07-three.js Debug UI
  • 商品类目一览
  • VBA代码解决方案第二十六讲:如何新建EXCEL工作簿文件
  • 【桶排序介绍】
  • 京东币链科技严正声明:澄清稳定币及合作虚假信息,暂未设立相关社区
  • 【Python基础】10 第三方库的力量:从数据处理到应用开发的全景实践
  • conda 常用指令
  • Reactor 瞬态错误
  • NLP文本数据增强