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

编译原理的部分概念

解释程序:边解释边执行:不断读取源程序的语句,解释语句,读取此语句需要的数据,根据执行结果读取下一条语句,继续解释执行,直到返回结果。

编译程序:将源程序完整地转换成机器语言程序或汇编语言程序,然后再处理、执行的翻译程序
 高级语言程序→汇编/机器语言程序  类似于自然语言翻译的通篇笔译

1.前端后端分别由哪些阶段组成?
前端:与源程序有关、与目标机无关的部分。词法分析、语法分析、语义分析与中间代码生成、与机器无关的代码优化
后端:与目标机有关的部分,与机器有关的代码优化、目标代码生成

2.解释器和编译器有什么区别?
解释器:边解释边执行:不断读取源程序的语句,解释语句,读取此语句需要的数据,根据执行结果读取下一条语句,继续解释执行,直到返回结果,类似于自然语言翻译的同声传译
编译器:将源程序完整地转换成机器语言程序或汇编语言程序,然后再处理、执行的翻译程序,高级语言程序→汇编/机器语言程序,类似于自然语言翻译的通篇笔译

3.文法的形式化定义?
文法G为一个四元组:G = (V,T,P,S)
V:非终结符(Variable )集
T:终结符(Terminal)集
S:开始符号(Start Symbol)
P:产生式(Product)集合
α→β,被称为产生式,α为左部,β为右部

4.五种常见的代码优化方法?
无用代码删除,代码外提,强度削弱,归纳变量删除,复制传播 公共子表达式删除

5.局部性原理的概念?
程序中的大部分运行时间都花费在较少的一部分代码中,而且只是涉及到一小部分数据。时间局部性:如果某个程序访问的内存位置有可能在很短的时间内被再次访问空间局部性:如果被访问过的内存位置的邻近位置有可能在很短的时间内被再次访问

6.C语言的活动记录格式?
在这里插入图片描述

  1. 编译程序与解释程序有何区别?
    答:二者的工作方法不同,后者是边解释边执行,解释所得的代码并不保存;前者是先将高级语言翻译感情上标代码,将其保存到指定的空间中,待需要时再执行之,甚至可以在案一个机器上编译,而在另一台机器上执行。
  2. 何谓素短语?
    答:素短语是满足下述条件的短语:(1)它至少含有一个终结符号(2)满足条件(1)的“最小”短语
  3. 过程调用时,主调程序与被调程序之间的信息传递有哪些方式?
    答:形式参数与实在参数结合方式传递(简称参数传递)、返回值传递、共享数据区传递。
  4. 何谓语法制导翻译?
    答:语法制导翻译是对前后文无关文法的扩充,即对文法中的每个产生式都附加一个语义动作或语义子程序,且在语法分析过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序,完成相应的语义分析和翻译工作。
  5. 何谓算符文法?
    答:当一个文法的所有产生式的右部均不出现两个非终结符号相邻的情况时,该就被称为算符文法。

划分程序的基本块时,确定基本块的入口语句的条件是什么?
解答:
(1)程序第一个语句,或
(2)能由条件转移语句或无条件转移语句转移到的语句,或
(3)紧跟在条件转移语句后面的语句。

1、编译方式与解释方式的根本区别在于( 是否生成目标代码 )。
2、对编译程序而言,输入数据是( 源程序 ),输出结果是( 目标程序 )。
3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段 )和( 运行阶段 )。
4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:( 编译阶段)、(汇编阶段)和(运行阶段)。
5、自顶向下语法分析方法会遇到的主要问题有( 回溯 )和( (左递归带来的)无限循环 )。
6、LL(k)分析法中,第一个L的含义是( 从左到右进行分析 ),第二个L的含义是( 每次进行最左推导 ),“k”的含义是(向输入串中查看K个输入符号 )。
7、LL(1)分析法中,第一个L的含义是(从左到右进行分析 ),第二个L的含义是(每次进行最左推导 ),“1”的含义是(向输入串中查看1个输入符号 )。
8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立( 直接推导 ),试图构造一个推导序列,最终由它推导出与输入符号相同的( 符号串 )。

9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的( 识别符号|开始符号 )。
10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是( 采用最右推导的逆过程—最左归约 ),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。
11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程—最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。
12、SLR(1)分析法的名字中,“S”的含义是(简单的 ),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程—最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。
13、在编译过程中,常见的中间语言形式有(逆波兰表示 )、(三元式 )、(四元式)和(树形表示)。
14、在编译程序中安排中间代码生成的目的是(便于代码优化)和(便于目标程序的移植 )。
15、表达式-a+b*(-c+d)的逆波兰表示为( a-bc-d++ )。
16、表达式a+b
(c+d/e)的逆波兰表示为(abcde/++ )。
17、表达式a:=a+b
c↑(d/e)/f的逆波兰表示为( aabcde/↑f/+:= )。
18、文法符号的属性有( 继承属性 )和( 综合属性 )两种。
19、一个文法符号的继承属性是通过语法树中它的(兄弟结点与父 )结点的相应文法符号的属性来计算的。
20、一个文法符号的综合属性是通过语法树中它的(子 )结点的属性来计算的。
21、语法制导的编译程序能同时进行( 语法 )分析和( 语义 )分析。
22、编译过程中扫描器所完成的任务是从( 源程序 )中识别出一个个具有( 独立语法意义的单词 )。
23、确定的有穷自动机是一个( 五元组 ),通常表示为( DFA=(K,∑,M,S,Z))。
24、已知文法G(E):
E->T|E+T|E-T
T->F|T
F|T/F
F->(E)|i
该文法的开始符号是( E ),终结符号集合VT是( { +,-,./,(,),i } ),非终结符号集合VN是( { E,T,F } ),句型T+TF+i的短语有( T+TF+I ,TF第一个T,i)。
25、已知文法G(E):
E->T|E+T|E-T
T->F|T*F|T/F
F->(E)|i
改写该文法以消除直接左递归,改写后的文法为:E->(+TE‘|-TE‘|ε ),T->( FT‘ ),(T‘-> *FT‘|ε),F->( (E)| i )。
26、已知文法G(Z):
Z->U0|V1
U->Z1|1
V->Z0|0
请写出全部由此文法描述的只含四个符号的句子:( 0101,1010,1001,0110 )。 该文法是Chomsky( 3 )型文法。
27、Chomsky定义的四种形式语言文法分别为:( 0型)文法–又称(短语文法 )文法,(1型)文法–又称(上下文有关)文法,(2型 )文法–又称(上下文无关 )文法,(3型)文法–又称(正则)文法。
28、文法G(S):
S->AB
A->aAb|ab
B->Bc|ε
其描述的语言L(G[S])=( anbncm,n≥1,m≥0 )。
29、文法G(S):
S->SAS|b|c
A->aaA|a
其描述的语言L(G[S])=(b,C,或者是以b开头、以c结尾的、中间是任意个由b或c间隔开的奇数个a组成的符号串)。
30、过程与过程引用中信息交换的方法是(全局变量的使用)和(参数传递 )。
31、形式参数和实在参数之间的对应关系通常按(它们在源程序中的位置)来确定。
32、按传结果的方式进行形实参数结合,是一种把(传地址 )和(传值)的特点相结合的参数传递方式。
33、在PASCAL中,由于允许用户动态申请与释放内存空间,所以必须采用( 堆 )存储分配方式。
34、编译程序进行数据流分析的目的是( 为了进行全局优化 )。
35、根据所涉及程序的范围,优化可分为( 局部优化 )、( 循环优化 )和( 全局优化 )三种。
36、局部优化是局限于一个( 基本块 )范围内的一种优化。
37、词法分析阶段的错误主要是( 拼写错误 ),可通过( 最小距离匹配 )的办法去纠正错误。
38、对错误的处理方法一般有( 校正法 )和( 局部优化法 )。
39、源程序中的错误一般有( 词法错误 )、( 语法错误 )、( 语义错误 )和( 违反环境限制的错误 )四种。
40、翻译程序是这样一种程序,它能够将( 用甲语言书写的程序 )转换成与其等价的( 用乙语言书写的程序 )。
41、编译程序的工作过程一般可以划分成( 词法分析、语法分析、语义分析、中间代码生成、代码优化 )等五个基本阶段。
42、编译程序的工作过程还会伴有( 表格处理 )和( 出错处理 )。

解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行
B.( ) 先将源程序转化为中间代码 , 再解释执行
C.( ) 先将源程序解释转化为目标程序 , 再执行
D.( ) 以上方法都可以

通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目 标代码生成等五个部分,还应包括_C____。
A.( ) 模拟执行器 B .( ) 解释器
C.( ) 表格处理和出错处理 D.( ) 符号执行器

一个文法所描述的语言是__A___。
A.( ) 唯一的 B.( ) 不唯一的
C.( ) 可能唯一,好可能不唯一 D.( ) 都不对
__B___和代码优化部分不是每个编译程序都必需的。
A.( ) 语法分析 B .( ) 中间代码生成
C.( ) 词法分析 D.( ) 目标代码生成
_B____是两类程序语言处理程序。
A.( ) 高级语言程序和低级语言程序 B .( ) 解释程序和编译程序
C.( ) 编译程序和操作系统 D.( ) 系统程序和应用程序

1.不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。
2.规范规约是最(3)规约。
3.编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为 (7) 。
5.文法符号的属性有综合属性和 (8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1…15,1…20]某个元素a[i,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。

(1)栈式动态存储分配
(2)堆式动态存储分配
(3)左
(4)语法分析
(5)目标代码生成
(6)表格管理
(7)xyz*ab+/+
(8)继承属性
(9)a+(i-1)*20+j-1
(10)基本块

http://www.xdnf.cn/news/7717.html

相关文章:

  • docker常用指令总结
  • A1-A2 英语学习系列 第四集 中国版
  • HarmonyOS5云服务技术分享--ArkTS开发Node环境
  • 不同消息队列保证高可用实现方案
  • C#入门系列【基础类型大冒险】从0到1,解锁编程世界的“元素周期表”
  • 50个Java+SpringBoot+Vue毕业设计选题(含技术栈+核心功能)
  • sqli-labs第十三关——’)POST报错注入
  • go.mod:5: unknown directive: toolchain
  • MySQL高频面试八连问(附场景化解析)
  • 解决方案:新建spring项目的时候出现java版本不匹配的问题
  • EtherCAT转CANopen网关:破解垃圾处理场工业通信难题
  • Redis中SETNX、Lua 脚本和 Redis事务的对比
  • 10.17 LangChain v0.3核心机制解析:从工具调用到生产级优化的实战全指南
  • 丝杆支撑座:机床生命周期的精度与效能
  • 【Python装饰器深度解析】从语法糖到元编程实战
  • 【iOS】类结构分析
  • Nginx详细配置说明
  • CSS-5.1 Transition 过渡
  • Dify 快速上手 MCP!Java 搭建 MCP Server 接入 Dify详细实战攻略
  • vue中列表filter方法的作用
  • 深入探讨redis:哨兵模式
  • linux下jenkins部署安装使用
  • 上肢康复机器人设计与临床应用研究
  • 达梦数据库线上体验:高度兼容Oracle语法
  • 家电行业数字化实践案例 | 易趋携手某知名家电集团打造数字化项目管理系统
  • 如何看待镍钯金PCB在当代工业制造中的地位和应用?
  • Python 数据库编程
  • Java 04 API
  • 【信息系统项目管理师】第12章:项目质量管理 - 26个经典题目及详解
  • Agent_Attention线性注意力推导