加密软件漏洞评测系统_软件评测师写作专栏之编译系统、解释系统和程序语言基础知识13...

本文介绍了编译系统、解释系统和程序语言的基础知识,通过例题详细讲解了编译和解释的区别,以及非确定有限自动机在程序设计语言中的应用。同时提供了巩固练习题帮助读者加深理解。
摘要由CSDN通过智能技术生成

各位学员大家好,大家在学习程序设计语言的时候,总是担心自己学不好,一想到程序设计就想到开发、算法等“高大上”的存在,其实理解了原理都不难,我们首先从底层和基础开始学起,先看一下编译系统、解释系统和程序语言基础知识。为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!

例题1:编译和解释是实现高级程序设计语言的两种方式,其区别主要在于(  )。

A、是否进行语法分析

B、是否生成中间代码文件

C、是否进行语义分析

D、是否生成目标程序文件

【昊洋详解】:本题考查程序设计语言中编译和解释的基础知识。

计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行。这种"翻译"通常有两种方式,即编译方式和解释方式。

编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。所以编译和解释区别在于是否生成目标程序文件。

故该题目的正确答案为D。

例题2:下图所示的非确定有限自动机 (S0为初态,S3为终态)可识别字符串(  )。

f8a2c6914662a4c2ac42684feff33554.png

A、bbaa

B、aabb

C、abab

D、baba

【昊洋详解】:本题考查程序设计语言中非确定有限自动机的知识。

有限自动机由两位神经物理学家MeCuloch和Pitts于1948年首先提出,是对一类处理系统建立的数学模型。这类系统具有一系列离散的输入输出信息和有穷数目的内部状态(概括了对过去输入信息处理的状况)。系统只需要根据当前所处的状态和当前面临的输入信息就可以决定系统的后继行为。每当系统处理了当前的输入后,系统的内部状态也将发生改变。

在上图中,从左到右看,从一个箭头开始,后面是节点和带有标记的有向边,终止状态用双圈表示,也就是S3。对于S0来说,输入任意的a都可以,也可以输入任意的b,但必须有一个a才能到达状态S1, 同理,从S1到S2,S2到S3必须都是一个b,也就是最后的三个字符必须是abb。从四个选项来看,只有B选项符合要求。

故该题目的正确答案为:B。

巩固练习题

(1)以下叙述中,正确的是 ( ) 。

A、编译正确的程序不包含语义错误

B、编译正确的程序不包含语法错误

C、除数为0的情况可以在语义分析阶段检查出来

D、除数为0的情况可以在语法分析阶段检查出来

(2)已知文法G:S->A0|B1, A->S1|1,B->S0|0,其中S是开始符号。从S出发可以推导出()?

A、所有由0构成的字符串    

B、所有由1构成的字符串

C、某些0和1相等的字符串  

D、所有0和1个数不同的字符串

(3)将高级语言程序翻译为机器语言程序的过程中,常引入中间代码,其好处是()?

A、有利于进行反编译处理 

B、有利于进行与机器无关的优化处理

C、尽早发现语法错误

D、可以简化语法和语义分析

练习题参考答案

(1)解析:编译程序把使用某程序设计语言书写的程序翻译为等价的机器语言程序,所谓等价是指目标程序执行源程序的任何预定功能。

一般来说,编译程序分为:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、符号表管理和出错处理。

词法分析程序是编译程序的第一个部分,它的输入是源程序中由字符组成的符号。词法分析从左到右逐字符读入源程序,识别出一个个单词符号,常见的词法错误有输入的关键字错误等。

语法分析是在词法分析的基础上将单词符号序列分解成各类,诸如“程序”、“语句”、“表达式”等语法单位。

语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息,这个阶段常见的错误有死循环和除数为0。只有语法和语义都正确的源程序才能被翻译成为正确的目标代码。

中间代码生成:作为代码生成程序的输入,由代码生成程序生成特定的计算机系统下的机器代码。中间代码是一种简单且含义明确的记号系统,可以有若干种形式,他们的共同特征是与具体的机器无关,此时所做的优化一般建立在对程序的控制流和数据流分析的基础之上,与具体的机器无关。

代码优化:为了提高目标代码的运行效率和减小目标代码大小,也可以在语法语义分析程序与代码生成程序之间插入代码优化程序。代码优化程序在不改变代码所完成的工作的前提下对中间代码进行改动,使其变成一种更有效的形式。

目标代码生成:是编译程序的最后一个阶段,它将程序的中间代码表示作为输入,并产生等价的目标代码作为输出。

符号表管理和出错管理是从词法分析到目标代码生成,始终贯穿全部过程的。符号表管理在符号表中登记了源程序中出现的每一个标识符及其属性。在整个编译过程中,各部分程序都可以访问某标识符的属性,包括标识符被说明的类型、数组维数、所需存储单元数,以及所分配的内存、元地址等。出错管理程序是在分析程序发现源程序有错误而无法继续工作时进行工作的,其任务是记录并向用户报告错误及其类型和位置,或者尝试进行某种恢复工作。

其中词法错误和语法错误都可以在编译程序时,检查出,而语义错误却无法在编译程序时检查出,而要等到程序执行时,才能发现。

故该题目的正确答案为:B。

(2)解析:用文法表示语言的语法规则时,推导是产生语言句子的基本方式。文法G:S->A0|B1, A->S1|1,B->S0|0,S是开始符号。表明该文法首先从S开始,可以推导出A0或者B1,A又可以推导出S1或者1,B又可以推导出S0或者0,以题目中的文法为例,有如下推导:

1010:S->A0->S10->A010->1010;          

0110:S->A0->S10->B110->0110;

然而0000,1111,1100,0011则推导不出来。因为由S先推出A0以后再去推导A则必然产生一个与0相邻(在0左边)的1,而由S先推导出B1,则下一步必然要推导出一个与1相邻(在1左边)的0。这保证了当1出现的时候,马上就会出现0,或者反之,并且0和1的距离很近。分析更多类似的例子发现,只有C选项最符合题干的结论。

故该题目的正确答案为:C

(3)解析:本题考察编译系统中的中间代码生成的基础知识。

编译程序把使用某程序设计语言书写的程序翻译为等价的机器语言程序,所谓等价是指目标程序执行源程序的任何预定功能。一般来说,编译程序分为:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、符号表管理和出错处理。

其中中间代码作为代码生成程序的输入,由代码生成程序生成特定的计算机系统下的机器代码。中间代码是一种简单且含义明确的记号系统,可以有若干种形式,他们的共同特征是与具体的机器无关,此时所做的优化一般建立在对程序的控制流和数据流分析的基础之上,与具体的机器无关。

故该题目的正确答案为:B

作者唯一官方个人微信公众号(昊洋与你一起成长):HYJY20180101

写于2020年8月28日

作者:昊洋讲师

版权所有,侵权必究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值