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

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

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

A、是否进行语法分析

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

C、是否进行语义分析

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

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

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

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

故该题目的正确答案为D

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


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日

作者:昊洋讲师

版权所有,侵权必究

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容