6汇编、编译、解释系统 软设刷题

一、知识点

1-5

1!!
词法分析阶段依据语言的词法规则,对源程序进行逐个字符地扫描,从中识别出一个个“单词”符号,主要是针对词汇的检查。
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。语法规则就是各类语法单位的构成规则,主要是针对语法或句子结构的检查
语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要针对句子含义的检查。

2
符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。

3
编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。将某一种程序设计语言写的程序翻译成等价的另一种语言的程序的程序,称之为编译程序。

4
中间代码的作用是可使程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。中间代码有多种形式,常见的有逆波兰记号(后缀式)、语法树、四元式和三元式(三地址码),它们的共同特点是与具体的机器无关,不依赖于具体的计算机,可跨平台编译。

5
编译过程一般分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成,以及出错处理和符号表管理。其中,语法分析是在词法分析的基础上分析短语(表达式)、句子(语句)的结构是否正确。

6-10

6
程序语言中的词(符号)的构成规则可由正规式描述,词法分析的基本任务就是识别出源程序中的每个词。
语法分析是分析语句及程序的结构是否符合语言定义的规范,对于语法正确的语句。
语义分析是判断语句的含义是否正确,因此判断语句的形式是否正确是语法分析阶段的工作。

7
解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

8
语法分析方法分为两类:自上而下(自顶向下)分析法和自下而上(自底向上)分析法,递归下降分析法预测分析法属于自上而下分析法,移进-归约分析法属于自下而上(自底向上)分析法。

9
程序已经开始运行,说明编译时无错误,因此不是语法错误和词法错误,编译时发现的语义错误称为静态的语义错误运行陷入死循环属于动态语义错误

10
在解释方式下,翻译源程序时不生成独立的目标程序(不生成目标代码生成),而编译器则将源程序翻译成独立保存的目标程序。

11-15

11
请添加图片描述编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言)。目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。因此在目标代码生成阶段分配寄存器

12
解释器翻译源程序时不产生独立的目标程序,而编译器则需要将源程序翻译成独立的目标程序

13
“中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关,此时所作的优化一般建立在对程序的控制流和数据流分析的基础之上,与具体的机器无关。无法简化语法和语义,有利于进行与机器无关的优化处理

14
编译过程中为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址

15
对于声明语句,需要记录所遇到的符号的信息,因此应进行符号表的填查工作。对于可执行语句,需要翻译成中间代码或目标代码。

15-20

16
语言处理程序主要分为汇编程序、编译程序和解释程序三种基本类型。
解释程序也称为解释器,它可以直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行;
编译程序(编译器)则首先将源程序翻译成目标语言程序,然后在计算机上运行目标程序。
汇编程序的功能是将汇编语言所编写的源程序翻译成机器指令程序。
链接程序将各目标程序连接形成为可执行程序。

17
语法错误是指由于编程中输入不符合语法规则而产生的,例如:表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不匹配等。通常,编译器对程序进行编译的过程中,会把检测到的语法错误以提示的方式列举出来,又称为编译错误。语法错误的调试,则可以由集成开发环境提供的调试功能来实现,在程序进行编译时,编译器会对程序中的语法错误进行诊断。编译正确的程序必然不包含语法错误

18
程序的翻译通常有两种基本方式:一种是编译方式,另一种是解释方式。
在编译方式下,首先将源程序翻译为等价的目标程序,源程序的翻译和目标程序的运行是完全独立的两个阶段;而解释方式下,对源程序的翻译和运行是结合在一起进行的,并不生成目标代码。
编译过程基本上可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,其中,中间代码生成和代码优化不是必须的。在词法、语法、语义分析方面,编译方式和解释方式没有区别。

19
编译程序是一种将高级语言程序翻译成目标程序的系统软件,它对源程序的翻译过程分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成,以及符号表管理和出错处理。
源程序可以被看成是一个字符串。词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号。语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”、“程序”等。语义分析阶段主要检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码。

20
汇编语言也称符号语言,是一种面向机器的程序设计语言,使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序。因此本题的答案选B。

21-25

21
这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序
解释器翻译源程序时不产生独立的目标程序,而编译器需将源程序翻译成独立的目标程序

22
中间代码”是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码。由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。与机器语言代码在指令上结构不一定一致

23
源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误。
语法错误是指语言结构上的使用错误,是指编译时所发现的程序错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误,语义分析阶段不一定发现所有程序中的语义错误

24
编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高级语言源代码,只能转换成功能上等价的汇编程序

25
记号流,词法分析的输出是记号流,也就是语法分析的输入。
字符流,在Java中,根据处理的数据单位不同,分为字节流和字符流。字符流是由字符组成的,例如 FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter 等。与本题无关。
源程序,词法分析的任务是把源程序的字符串转换成单词符号序列。
分析树,如果没有语法错误,语法分析后就能正确的构造出其语法树。
括号不匹配是典型的语法错误,会在语法分析阶段检测出来。

二、刷题

1-5

5-10

11-15

15-20

21-25

25-30

31-35

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值