程序语言基础知识--存档

2.2 程序语言基础知识

2.2.1 主要知识点

了解程序语言的种类、特点和适用范围,掌握汇编、编译、解释系统的基本原理,以及程序语言的数据结构和控制结构。特别是编译系统形式的基础知识,应当下功夫掌握。

2.2.1.1 程序语言概述

低级语言又称面向机器语言,它是特定的计算机系统所固有的语言。用机器语言编制出来的,程序可读性很差,程序员难以修改和维护,于是人们考虑改用助记符号来表示机器指令中操作码和操作数,这就是汇编语言。汇编语言仍然是一种和计算机的机器语言十分接近的语言,它的书写格式在很大程度上取决于特定计算机的机器指令。它是一种低级语言,这对于人们抽象思维和交流十分不便。在这个基础上,高级语言就发展起来了。目前已有许多流行较广的高级语言,如FortraCobolPascalC、和C++等。这类语言与人们的自然语言比较接近,大大提高了程序设计的效率,便于人们进行交流。

计算机只能理解和执行机器语言。程序语言要在计算机上运行,必须有一个程序,使机器能够理解用程序语言书写的用户程序,这就是所谓的语言处理程序。它可以分为两大类:解释程序和翻译程序。

2.2.1.2 程序语言基础知识

程序语言种类繁多,在应用上各有不同的侧重面。

Fortran是第一个被广泛用于科学计算的高级语言。

Algol是另一个早期研制出来的高级语言。它有严格的文法规则,用巴科斯范式BNF来描述语言的文法。Algol是一个分程序结构的语言。

Cobal是一种面向事务处理的高级语言。

Pascal语言提供的为数不多而又相当紧凑的机制使得这个语言具有相当强的表达能力。

C是一种通用程序设计语言。C作为一种较低级的语言,提供了指针和地址操作的功能。C提供书写结构良好的程序所需的控制结构。CUNIX操作系统紧密相关,UNIX操作系统及其上的许多软件都是C编写的。

还有几种特殊而又重要的程序语言:

(1)面向对象的C++
C++
是在C语言的基础上发展起来的与C兼容的语言。主要增加了类功能,成为面向对象的程序设计语言。面向对象程序语言至少包含以下几个重要概念:

①对象是人们要进行研究的任何事物,它包括状态(用数据来描述)和操作(用来改变对象的状态)两方面。面对对象语言把状态和操作封装于对象体之中,并提供一种访问机制,使对象状态的具体表示和操作的具体实现都是隐蔽的。

②类是面向对象语言必需提供的用户定义的数据的类型,它将具有相同状态、操作和访问机制的多个对象抽象成一个对象类。在定义了类以后,属于这种类的一个对象叫作类实例或类对象。

③继承是面向对象语言的另一个必备要素。类与类之间可以组成继承层次,一个类的定义(称为子类)可以定义在另一个已定义类(称为父类)的基础上。子类可以继在父类中的属性和
操作,也可以定义自己的属性和操作。

(2)逻辑型语言Prolog

逻辑型语言是一类以形式逻辑为基础的语言。Prolog是这类语言的代表。Prolog建立在关系理论和一阶谓词理论基础上,具有和传统的命令型程序设计完全不同的风格。Prolog程序由一些称为事实和规则的Horn子句组成。具有很强的推理功能,适用于书写自动定理证明、专家系统、自然语言理解等问题的程序。

(3)函数型语言LISP
函数型程序语言是一类以
γ演算为基础的语言。LISP是典型的函数型程序语言。函数是一种对应规则(映射),它使其定义域中每一个值和值域中唯一的值相对应。

函数型程序设计语言的优点之一是对表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值。由于用函数程序设计语言书写的程序是利用自变量的值来计算函数的值的,它没有副作用。这些特点有助于程序模块化的实现。

2.2.1.3 程序语言的数据类型

不同程序语言所提供的数据类型不尽相同。数据是程序操作的对象,具有名称、类型、存储类、作用域和生存期等属性,使用时要为它分配内存空间。数据名称由用户可通过标识符命名:类型说明数据占用内存的大小和存放形式,存储类说明数据在内存中的位置和生存期;作用域说明数据可以使用的范围;生存期说明数据占用内存的时间。

数据从不同角度可分成不同的类别。按数据的作用域大小,可分为全局量和局部量;按生存期可分为自动生存期、静态生存期和动态生成期;按程序运行时数据的值是否能改变可分为常量和变量。

数据按类型可分为4种:Void、标量(Scalar)、函数和聚合(Aggregate)。标量又可分为算术、枚举和指针;聚合类型可分为数组、结构体和共用体。
数据按其构造方式又可分为基本类型和派生类型。

2.2.1.4 程序语言的控制结构

程序语言中控制结构为将数据和数据上的运算组合成程序提供了基本框架。可计算问题的程序都可用顺序、选择和循环这3种控制结构来描述。

2.2.1.5 汇编程序基础知识

汇编语言是为特定的计算机中计算机系统设计的面向机器的语言。汇编语言中的语句可分成两大类:一类是与机器指令相对应的可执行汇编语句;另一类汇编语句称为汇编控制语句(亦称伪指令)。用汇编语言编写的源程序,要通过汇编程序将它民机器语言程序,才能被计算机理解执行。经过汇编程序的工作,可执行汇编语句被转化成对应的机器指令;而伪指令并不翻译成机器指令,它们的作用是控制汇编程序工作。伪指令主要用来告诉汇编程序做一些除了翻译机器指令外必须做的工作。

汇编程序的功能是将汇编语言所编写的源程序翻译成由机器指令和其他信息组成的目标程序。汇编程序的基本工作包括两项:一是将每一条可执行汇编语句转换成对应的机器指令;二是处理源程序中出现的伪指令。

2.2.1.6 解释程序基础知识

解释程序是一种语言处理程序,它直接执行源程序或源程序的内部形成。它并不产生目标程序,它是它和编译程序的主要区别。

高级语言实现语言处理4种方案:

1种,源程序被直接解释执行。

2种,先将源程序翻译成高级中间代码,然后再扫描高级中间代码,对高级中间代码进行解释执行。

3种,也是一种解释程序的实现方案,与第2种方案的解释程序不同点在于,首先将源程序转化成和机器代码十分接近的低级中间代码,然后再解释执行这种低纸中间代码。这类系统具有良好的可移植性。

4种,是普通的编译程序。在编译程序方案下,高级语言编写的源程序被最终翻译成机器语言表示的目标程序。这类系统的目标执行效率最高。

一般说来,建立在翻译基础上的系统在执行速度上都优于建立在解释执行基础上的系统。翻译系统的缺点是其复杂性,这使得它的开发和维护费用都大。相反,解释系统比较简单,可称植性较好,适合于以交互方式执行程序,其缺点是执行速度慢。

解释系统的结构可分成两部分。第1部分包括通常用的词法分析程序以及语法和语义分析程序,它的作用仍是把源翻译成中间代码,中间代码的设计常采用逆波兰表示形式。第2部分是解释部分,用来对第1部分所产生的中间代码进行解释执行,完成真正的解释工作。

2.2.1.7 编译程序基础知识

编译程序的功能是把某高级语言书写的源程序翻译成与之等价的低级语言(汇编语言或机器语言)的目标程序。其过程很复杂,可分成6个阶段;

①词法分析阶段是编译过程的第1个阶段。词法分析所依据的是语言的词法规则,即描述单词结构的规则。词法规则可用3型文法(正规文法)或正规式来描述,有限自动机能识别正规文法所定义的语言和正规式所表示的集合。

②语法分析阶段。在词法分析的基础上将单词符合序列分解成各类语法单位。语法分析所依据的是语言的语法规则,即描述程序结构的规则。
词法分析和语法分析本质上都是对源程序的结构进行分析。

③语义分析阶段是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象。

④中间代码生成阶段。在进行了上述的语法分析和语义分析阶段工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓"中间代码"是一种简单、含义明确的记号系统。

语义分析和中间代码生成所依据的是语言的语义规则。一般采用语法指导翻译规则和中间代码生成规则。

⑤代码优化阶段是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高级,即省时间和省空间。

⑥目标代码生成阶段。是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与硬件系统的结构和指令的含义有关。

编译过程的6个阶段的任务,再加上表格管理和出错处理的工作可分别由几个模块或程序完成,它们分别称作词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序和出错处理程序。

2.2.2 试题分析

从历年试题统计(见表2-2)来看,程序语言基础试题是每年必考的知识点,考查的重点是形式语言基础、语法和词法分析方法、程序控制结构。复习中还应注意补充有关程序语言最新发展方面的知识。

试题1 (2000年试题3)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

假设某程序语言的文法如下:

S→a|b|(T)

T→TdS|S

其中:Vt={a,b,d,(,)},Nn={S,T}S是开始符号。

考查该文法,称句型(Sd(T)db)S的一个A其中B是句柄;C是素短语;D是该句型的直接短词;E是短语。

供选择的答案

A:①最左推导 ②最右推导 ③规范推导 ④推导

B:①S b (T) Sd(T)

C:①S b (T) Sd(T)

D:①S S(T)b
S(T)TdSb (Sd(T)db)

E:①(Sd(T)db) d(T) Td Sd(T)d

【解析】

解答本题要搞清楚基本概念,下面具体分析各个问题。

先来看问题A最左()推导:任何一步推导过程σ→β(其中σβ是句型)都是对σ中的最左(最右)非终结符进行替换,这种推导为最左(最右)推导。在形式语言中,最右推导常被称为规范推导。

题中的句型(Sd(T)db)的第一步肯定是由S→(T)→(TdS)得出的。按照最左推导的规则(Tds)→(TdSdS)→(SdSdS),最终不可能推出原来的句型。

按照最右推导的规则(Tds)→(Tdb)→(Td(T)db),最终不可能推出原先的句型。

最后可以看出句型(Sd(T)db)是由一般推导推出的,步骤如下:

S→(T)→(Tds)→(Tdb)→(Td(T)db)→(Sd(T)db)

所以正确答案是④。

再来看问题BE。来文法,S是文法的开始符号,αβδ是文法G的一个句型。如果有S→αAδ,且A→β,则称β是句型αβδ相对于非终符A的短语。特别是如有Aβ,则称β是句型αβδ相对于规则A→β的直接短语。一个句型的最左直接短语称为该句型的句柄。

本文法推导树如下:



所以,S是句型相对于规则T→S的直接短语,也是最左直接短语(句柄)(T)是句型相对于规则S→(T)的直接短语,对于问题B,选择①是正确的。

素短语是一个短语,它至少包含一个终结符,并除自身外不包含其他的素短语。所以,问题C的答案③正确。

d是句型相对于规则S→d的直接短语,则问题D的答案②正确。

由推导树可知,无论如何,无法由S推导出d(T)TdSd(T)d,所以问题E的答案①正确。

【答案】: A:④ B:① C:③ D:② E:①

试题2 (1999年试题)3

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷扔对应栏内。

假设某程序语言的文法如下:

S→SaT|T

T→TbR|R

R→PdR|P

P→fSg|e

其中Vr{a,b,d,e,f,g};Vn={S,T,R,P};S是开始符号,那么,此文法是A文法。这种文法的语法分析通常采用优先短阵。优先短阵给出了该文法中各个终结符之间的优先关系(大于、小于、等于和无关系)。在上述文法中,某些终结符之间的优先关系如下:

b{B}a; f{C}g; a{D}a;d{E}d

供选择的答案

A:①五则文法 ②算符文法 ③二义文法 ④属性文法

B:①大于 ②小于 ③等于 ④无关系

C:①大于 ②小于 ③等于 ④无关系

D:①大于 ②小于 ③等于 ④无关系

E:①大于 ②小于 ③等于 ④无关系

【解析】

所谓算符文法,可以作如下的描述:如果在一个文法G中,不含有形如"U→…AB…"的产生式,其中A,B∈Vn,则G为算符文法。也就是说,如果G是一算符文法,那么G的任何产生式的右部都不会出现两个非终结符号相邻的情况,而且,对算符文法而言,也不会含有两个非终对符号相邻出现的句型。这种性质意味着,如果把终对符号看作广义运算符,而把非终结符号看作广义运算的对象,则在算符文法的任何句型中,两相邻运算符之间的运算对象至多只有一个,而不会出现其间运算对象个数不确定的情况,这样就使得广义运算总是按照中缀形式出现,对语法分析工作非常有益。

对于给定的文法G,可以逐个检查G的各产生式,查看它们的右部是否含有相邻出现的非终结符号,以确定G是否为一算符文法,然后再构造相应的优先矩阵。若此矩阵中无多重定义的元素(即各运算符对之间至多只有一种优先关系),同则可确认理一算符优先文法。

在算符文法中,一般按照如下规则判断终结符之间的优先关系:

当且仅当G中有形如"U→…ab…"或者"U→…aBb…"的产生时,a=b

当且仅当G中有形如"U→…aA…"的产生式,且有或者"A=+=b…"或者"A=+=…aB"时,ab

当且仅当G中有形如"U→…Ab…"的产生式,且有或者"A=+=a…"或者"A=+=…aB"时,ab


如果算符文法G的任何一对终结符号之间,至多只有3种算符优先关系:等于、大于或者小于成立,则称G为算符优先文法。

【答案】:A:② B:① C:③ D:① E:②

试题3 (1998年试题4)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

语法分析方法大体上可分成自上而下和自下而上的两种。自下而上分析法,是从输入符号串开始逐步进行A,直至A成文法的起始符号。自上而下分析法,则是从文法的起始符号开始反复使用产生式进行B直至B出输入符号串。

符符优先文法是一种自下而上分析方法,其文法的特点是文法产生式中C。自下而下的分析方法,通常要求文法的产生式D,如E文法就是一种可以自上而下分析的文法。

供选择的答案

AB:①递归 ②综合 ③回归 ④推导 ⑤分解 ⑥归约

C:①不含两个相邻的非终结符 ②不含两个相邻的终结符
③不含 产生式 ④不含长度为1的产生式

D:①不以非终结符开头 ②不以终结符开头
③不含左递归 ④不含右递归

E:①LR(1) LL(1) SLR(1) LALR(1)

【解析】

语法分析的程序以词法分析程序所输出的用内部编码表示的单词序列为输入,其任务是分析源程序的结构,差别它是否是相应程序设计语言的一个合法程序。为了完成这个任务,通常由语法分析程序尝试着为其构造一棵完整的语法树。若尝试成功,则表明输入的符号串在结构上是一个合乎语法的程序,否则,源程序中必然存在的错误。

就产生语法树的方向而言,可大致把它们分为自顶向下和自底向上两大类。所谓自顶向下的分析是对给定的符号串,试图自上而下地为其构造出一棵语法树,或者说从文法的开始符号出发,为其构造一个最左推导。所谓自底向上的分析是给定的符号串,试图自下而上地为其构造出一棵语法树,或者说从给定的符号串本身出发,试图将其归约为文法的开始符号。

算符优先文法属于自下而上的分析法,它利用各个算符间的优先关系和结合规则来进行语法分析,特别适用于分析各种表达式。算符优先文法的任何产生式的右部都还会出现两个非终结符相领的情况,且其任何一对终对符之间至多只有3种算符关系""">和"="之一成立。自顶向下的文法中不能有左递归,否则自顶和下的分析过程进入死循环,不能正常进行。EIL(1)为自顶向下的文法外,其他均为自底向上的文法。

【答案】:A:⑥ B:④ C:① D:③ E:②

试题4 (1998年试题6)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的答案,把相应编号写在答卷的对应栏内。

在高级程序设计语言中,使用参数是子程序之间传递信息的一种手段。子程序说明中的参数称为形式参数,调用语句中的参数称为实在参数。调用时,实在参数的个数、类型和顺序要和形式参数保持一致。

知道一种语言(或编译器)使用哪种参数传递方法是很重要的,因为程序的运行依赖于所用的方法。参数传递方法有传值调用(Call by value)、引用调用(Call by reference)、传名调用(Call by name)和宏扩展(Macro expansion)

传值调用是把实在参数的A传递给相应的形式参数,子程序通过这种传值形参B;引用调用是指把实在参数的C传给相应的形式参数,此时子程序对形式参数的一次引用或赋值被处理成对形式参数的D访问。

C语言中的函数,以E方式进行参数传递。

供选择的答案

AC:①地址 ②名 ③值 ④地址和值
⑤值和名 ⑥名和地址

B:①可传回结果的值 ②可传回存放结果的地址
③可传回结果的值和存放结果的地址 ④不可传回任何结果(值或地址)

D:①直接 ②间接 ③变址 ④引用或赋值

E:①传值调用 ②引用调用 ③传名调用 ④宏扩展

【解析】

传值调用是指把实在参数的值传递给相应的形式参数,子程序不能通过这种方式传回任何结果。引用调用是指把实在参数的地址传递给相应的形式参数,此时子程序对形式参数的一次引用或赋值都是对形式参数的间接访问。

C语言规定,实参变量对形式参数的数据传递是"值传递",即单向传递,只能由实参传给形参,而不能由形参传给实参。所以说,C语言中函数是传值调用的。

【答案】A:③ B:④ C:① D:② E:①

试题5 (1997年试题1)

从供选择的答案中,选出应填入下面叙述中 内的最确切的答案,把相应编号写在答卷的对应栏内。

一种最早用于科学计算的程序设计语言是A;一种提供指针和指针操作且不存在布尔类型的、应用广泛的系统程序设计语言是B;一种适合在互联网上编写程序可供不同平台上运行的面向对象程序设计语言是C;一种在解决人工智能问题上使用最多的、有较强的表处理功能的函数程序设计语言是D;一种以谓词逻辑为基础的、核心是事实、规则和推理机制的实用逻辑程序设计语言E

供选择的答案

AE:①Pascal Ada Smalltalk Snobol C
Alogo 68 Java Lisp Prologo Fortran

【解析】

程序设计语言从机器语言、汇编语言到今的高级语言,其发展越来越快,功能越来越强,同时,其可理解性也越来越接爱人类的思维方式。

Fortran是第一种被用于进行科学计算的高级语言,它出现于50年代中期,其设计目的主要暖和于科学计算,它在程序设计语言的发展史上起着突出的作用。

Alogo 68是另一种早期研制出来的高级语言,虽然没有被广泛使用,但对后来的程序设计语言的发展有着重大影响。

C语言是目前应用最广泛的系统程序设计语言,它提供了指针与指针操作,且不存在布尔类型,对数据的访问灵活广泛,C语言还可提供很多底层系统调用,与硬件结合紧密,易用性强。

Java是适应Internet发展的需要而产生的通用网络程序设计语言,它提供了更好的网络安全性和平台无关性,并且采用了面向对象的原理,便于扩展,适合在互联网上编写可供不同平台上运行的面向对象程序设计语言。

Prolog语言在人工智能领域应用较广泛,是一种以谓词逻辑为基础,借助于推理规则从已有事实推出新的事实的实用的逻辑程序设计语言。

Adasmalltalk两种语言引入了一定的封装机制,实现了信息隐藏。Ada的主要封装机制为程序包;Smalltalk是一种纯面向对象程序设计语言,它侧重于动态链接,不进行任何类型检查,并且类和对象之间没有明显区别。

Snobol1962年由贝尔实验室开发,它主要的操作为字符串操作。该语言一般不作为通用语言使用,而是作为一种研究工具,用于对文艺作品、音乐等进行分析。

Lisp是一种在解决人工智能问题上使用最多的、有强的表处理功能的函数程序设计语言。

【答案】A:⑩: B:⑤ C:⑦ D:⑧ E:⑨

试题6 (1997)年试题7

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的答案,把相应编号写在答卷的对应栏内。

用高级语言编写程序时,子程序调用语句中的实在参数必须与子程序说明中的形式参数在A上保持一致。在允许子程序递归调用的高级语言环境中,需用动态存储管理方法,它通常使用一个B存放子程序的调用记录,调用记录可包括(1)全局量存储区域的C(2)调用点所在子程序的D(3)调用点的E(4)形式参数和实在参数的通信区域;(5)返回值;(6)本子程序的局部量和临时变量存储区域等。

供选择的答案

A:①个数、类型 ②个数、顺序
③个数、格式、顺序 ④个数、类型、顺序

B:①线性表 ②队列 ③堆 ④下推栈

CE:①子程序首地址 ②调用记录首地址
③参数地址 ④寄存器地址
⑤返回地址 ⑥开始地址

【解析】

除少数程序语言之外,形式参数和实在参数之间的对应关系通常按位置来确定。子程序定义中有形式参数表,而子程序调用是用实在参数法表。进入子程序时,第一个形式参数就和第一个实在参数所表示的数据或其他信息相关联,依奖对应。这样,子程序调用语句中的实在参数必须与子程序说明中的形式参数在个数、类型和顺序上保持一致,否则就不能在主程序和子程序之间正确地传递信息。

对于允许子程序递归调用的程序语言,一般采用动态存储管理方法,用下堆栈来实现。由于某一子程序可能被调用了若干次,但只有最近一次调用正处于执行状态,而其余各次调用正等待下次调用的返回。这样,前几次该子程序调用的属于该子程序的局部变量存储区中的内容必须保存起来,以便下次调用返回时再继续使用。子程序执行需要一个用来存放有关信息的区域,这个区域为过程的调用记录,一般包含以下几部分:

·全局变量存储区域的开始地址;

·调用点所在子程序的调用记录的地址;

·调用点机器状态,如返回地址和寄存器当时值;

·形式参数和实在参数的通信区域;

·返回值;

·本子程序的局部量和临时变量存储区。

【答案】:A:④ B:④ C:⑥ D:② E:⑤

试题7 (1996年试题5)

从供选择的答案中,选出应填入下面叙述中 内的最确切的解答,把相应编号写在答卷的对应栏内。

有限状态自动机可用五元组(VTQδq0Qf)来描述,它可对应于A。设有一有限状态自动机M 的定义如下:

VT={01} Q={q0,q1,q2}

δ定义为:

δ(q0,0)=q1,δ(q1,0)=q2

δ(q2,1)=q2,δ(q2,0)=q2

Qf={q2}

M是一个B有限状态自动机,它所对应的状态转换图为C,它所能接受的语言可以用正则表达式表示为D,其含义为E

供选择的答案

A:①0型文法 ②1型文法 ③2型文法 ④3型文法

B:①歧义的 ②非歧义的 ③确定的 ④非确定的

D:①(0|1)* 00(0|1) (0|1)*00 0(0|1)*0

E:①由01所组成的符号串的集合。

②以0为头符号和尾符号、由01所组成的符号串的集合。

③以两个0为结束的、由01所组成的符号串的集合。

④以两个0为开始的、由01所组成的符号串的集合。

【解析】

先来看一下地分类表2-3

一个有限状态自动机M5元组(VTQδq0Qf)来表示,其中VT={01}是一个有穷字母表,它的每个元素称为一个输入字符:Q=(q0,q1,q2)是一个有限集,它的每个元素称为一个状态;δ定义为δ(q0,0)=q1,δ(q1,0)=q2,δ(q2,1)=q2,δ(q2,0)=q2是一个从VT×QQ上的(单值)部分映射;q0为初态;Qf={q2}为终态集。

有限自动机分为确定的有限自动机和非确定的有限自动机。确定的有限自动机的确定性表现在映射δ:VT×Q→Q是一个单值函数,即对任何状态qQ和输入字符aVT,映射δ(q,a)唯一确定下一个状态。由分析可知本题给出的是一个确定的有限自动机,它的状态转换如图2-7所示。
它所能接受的语言可以用正则表达式表示为00(0|1)*,其含义为由两个0开始的后跟任意个(包含0个或多个)01组成的符号串的集号。

【答案】:A:④ B:③ C/ D/ E/

(注:原题中C的供选择答案有印刷错误,故CDE的任何解答均作正确处理。)

试题8 (1995年试题15)

从供选择的答案中,选出应填入下面叙述中{ }内的正确答案,把编号写在答卷的对应栏内。

编译技术涉及语言和自动机理论,形式语言可由短语结构文法G生成(记为L(G))G可分成0型、1型、2型、3型和4种类型,与之相对应的自动机分别为图灵机、ABC。一个命题的可判定性是指:存在一种算法能给出该命题成立与否的结论。给定文法G,只有当GD时,命题"L(G)是空集,有限集或无限集"才是可判定的,当给出二个不同文法G1G2,只有当G1G2都是E时命题"L(G1)=L(G2)"才是可判定的。

供选择的答案

AC:①自动机 ②下推自动机 ③双向自动机
④线性界限自动机 ⑤有限状态自动机 ⑥非线性自动机

DE:①1型 ②2型 ③3型 ④0
2型或3型 ⑥1型或2型或3型 ⑦0型或1型或2型或3

【解析】

用计算机对自然语言进行完全自动处理是一件十分困难的事情。这是因为自然语言歧义性哟,用形式化的语法描述起来很困难。为了便于计算机的自动处理,语言的形式化描述便显得十分重要。现有算法语言在形式上都是形式语言。

形式语言可由短语结构文法来生成。一个短语结构文法G是一个4元组:G=(VT,VN,P,S)。其中VT是终止符的非空有限集,VN是非终止符的变量的非空有限集,S为起始符,P是产生式集。P中的每个产生式又称重写规则,其一般形式是α→β,其中α、β均为字符串。由起始符开始,不断使用P中产生式,可能得到终止符组成的字符串。这种终止符串的全体就是文法G生成的语言,记为L(G)

按照对产生式中α和β的不同限制,文法G可分成0型、1型、2型、34类,又分别称图灵文法、上下文有关文法、上下文无关文法、正则文法。由文法所生成的语言也相应分成这4类。自动机是能由文法G产生出G所生成的语言L(G)的一种装置,它可用一个5元组表示。自动机也可分好多种,其中有限状态自动机是能由正则文法产生正则语言的自动机,即它对应于3型语言;下推自动机则对应于上下文无关语言(2);线性界限自动机则对应于上下文有关语言(1)型;图灵机则对应于0型语言。

文法G是任意给出的,有可能出现这样的情况:给定某个文法G,对VT中的终止符所组成的任何字符串都无法识别出它能由G生成,即L(G)是个空集。也可能有某个给定的文法G,其L(G)是无限制。由于VT的终止符可重复出现,字符串长度无限制,因此不可能用列举终止字符串进行句法分析,以判断给定的G,其L(G)是无限集还是有限集,或是空集。

我们期望能有一种算法,可直接从G出发,通过有限步运算给出L(G)是空集、有限集或无限集的结论。若存在这样的算法,就是可判定的,否则就不是可判定的。研究中发现可否判定L(G)是空集、有限集或无限集与文法G有关的,可以证明,当文法G2型或3型时,是可判定的。类似的,对二个文法G1G2是否等价即是否有L(G1)=L(G2),只有当G1G2都是3型文法时,才是可判定的。

【答案】A:④ B:② C:⑤ D:⑤ E:③

试题9 (1994年试题2)

从供选择的答案中,选出应填入{ }内的正确答案,把编号写在答卷的对应栏内。

在下列程序中:

Program test (input, output)

Var i, j: integer

Procedure calc (pl, p2: integer)

Begin p2:=p2*p2; pl:=p1-p2:=p2-p1;end{calc}

Begin{main}i:=2,j:=3

Calc(i,j);write(j);

End{main}

当参数传递采用引用方式(Call by reference)时,所得结果j=A

当参数传递采用换名方式(Call by name)时,所得结果j=B

当参数传递采用赋值方式(Call by value)时,所得结果j=C

递归是程序设计中很重要的一种控制结构,通常实现递归时,采用的数据结构是D

对那些既可以用递归方式,也可以用循环方式求解的问题,就执行效率而言E

供选择的答案

AC:①0 3 5 6
10 16 20 28

D:①数组 ②栈 ③队列 ④循环链表

E:①数组 ②两者相同 ③循环优于递归 ④递归优于循环

【解析】

一个过程的过程体若包含对其自身的调用,则称此过程是直接递归的。若一个过程的过程体调用某过程,而该过程又调用原过程或经一系列调用后又回到对原过程的调用,则称此原过程是间接递归的。通常实现递归时采用的数据结构是栈,这是因为栈有先进后出的特性,可以保存调用时的"现场",并在调用结束时恢复"现场",栈是实现递归的简单途径。对于既可用递归方式求解,也可用循环方式求解的问题,就执行效率和资源而言,显然是循环优于递归,因为递归的开销大。

当用户在调用点调用一个过程时,会通过参数传送信息,一个过程的形式参数用来向过程传送信息的标识符,实在参数用来在调用点向被调用过程传送信息。形式参数和实在参数之间的关系通常按位置来标定,不同程序语言所规定的参数信息传送方式不同。

当采用引用方式(Call by reference)或换名方式(Call by name)时,在过程中对形式参数的调用本质上是对实在参数单元的引用。先是给形式参数赋初值,而后,在过程中对该形式参数的赋值最终引起调用程序中实在参数值的改变。在本题中形式参数为p1p2。实在参数初值为i=2j=3,通过引用方式调用这两个参数,将执行以下计算过程:

p1=2,p2=3p2:=p2*p2=9p1:=p1-p2=2-3=-7p2:=p2-p1=9-(-7)=16

所得结果为j=16

参数传送采用赋值方式时,从调用点向被调用过程传送的是实在参数的值。这一值成为过程中相应位置上形式参数的初值,此后该形式参数在过程中实际是局部变量,其结果无需返回给实在参数。本题中实在参数j=3,在过程中仅起向形式参数p2赋初值的作用。过程中关于p2的运算对j不再起作用,因而过程调用结束后j的值仍为3

【答案】A:⑥ B:⑥ C: ②D: ②E:③

试题10 (1994年试题16)

从供选择的答案中,选出应填入下面有关形式语言叙述中{ }内的正确答案,把编号写在答卷的对应栏内。

文法G=(VT,VN,P,S)的类型由G中的A决定。若G0=({a,b},{S,X,Y},P,S)P中的产生式及其序号如下:

1S→XaaY

2X→YY|b

3Y→XbX|a

G0为型文法,对应于C,由G0推导出句子aaaabaabbb时,所用产生式序号组成的序列分别为DE

供选择的答案:

A:①:VT VN P S

B:①0 1 2 3

C:①图灵机 ②下推自动机 ③有限状态自动机 ④其他自动机

DE:①13133 12312 12322 12333

【解析】

形式语言的文法是一个4元组G=(VTVNPS),其中VT是非空有限集,称为终端符集,VN也是非空有限集,称为变量集;P为产生式集;S为起始符,S∈Vn。形式语言的文法按P的特性可分成正则文法、上下文无关文法、上下文有关文法和图灵文法4种类型,又分别称为3型、2型、1型和0型文法。所对应的可实现的自动机分别为有限状态自动机、下推自动机、线性有界自动机和图灵机。

本题中给出的文法、生产式左部均是单个变量,因此是上下文无文法。由此文法导出句子aaaaa的产生式号的序列及推导过程如下:

S → XaaY 1

→ YYaaY 2

→ aYaaY 3

→ aaaaY 3

→ aaaaa 3

句子baabbb的推导过程为:

S → XaaY 1

→ baaY 2

→ baaXbx 3

→ baabbx 2

→ baabbb 2

因而产生式号的序列是1233312322

【答案】:A:③ B:③ C:② D:④ E:③

试题11 (1993年试题7)

从供选择的答案中,选出应填入{ }内的正确答案,把编号写在答卷的对应栏内。

根据乔姆斯基50年代建立的形式语言的理论体系,语言的文法被分成4种类型,即0(短语文法)Ⅰ(上下文有关文法)(上下文无关文法)(正规文法)。其中型文法与A等价,所以有足够的能力描述多数现今程序设计语言的语法缃结构。一个非确定的有限自动机必存在一个与之等价的B。从文法描述语言的能力来说C最强,D最弱。由4类文法的定义可知E必是型文法。

供选择的答案

AB:①确定的有限自动机 ②图灵机
③非确定的下推自动机 ④非确定的有限自动机
⑤有限自动机 ⑥线性有界自动机

CE:①0型文法 ②Ⅰ型文法 ③Ⅱ型文法 ④Ⅲ型文法

【解析】

型文法与非确定的下推自动机等价,所以有足够的能力描述现在大多数程序设计语言的语法结构。一个非确定的有限自动机必存在一个与之等价的有限自动机。从文法描述语言的能力来说,0型文法最强,Ⅲ型文法最弱。

语言的文法是一个4元组(VtVnPS),其中Vt是终结符号的非空有限集,Vn是非终结符号的非空有限集,S是一个特殊的非终对符号,P是产生式的有限集,由Ⅲ型文法的定义:一个文法G型文法,如果G型文法,并且G的每个产生式为A→σBA→σ,其中A∈Vt*AB∈Vn,可知,型文法必是型文法。

【答案】A:③ B:① C:① D:④ E:④

试题12 (1992年试题2)

从供选择的答案中选出应填入{ }的正确答案,把编号写在答卷的对应栏内。

最早体现结构化程序设计思想的程序设计语言是A,最早使用BNF文法定义程序设计语言语法的语言是B。最早提出类(CLASS)的概念语言是C,了早完备地体现面向对象并提出继承概念的程序设计语言是D,最早的人工智能语言是E

供选择的答案:

AE:①Ada Pascal Algol 68 Algol 60 Simula Lisp Prolog Smalltalk 80 C C++

【解析】

50年代末和60年代初,由国际委员会设计了Algol语言,P.Naur在随后的修改报告中用严格的BNF(Backus-Naur Form)形式化方法定义了Algol语言的文法。

LISP语言是由麻省理工学院的John McCarthy和他的研究小组最初约在1960年设计实现的。结构化程序设计思想是由EW.DijkstraC.A.R.Hoare等在近60年代末提出的。N.Wirth提出的Pascal语言是第一个较系统地体现结构化程序设计思想的程序设计语言。

最早提出类(CLASS)概念的语言是Simula;最早完备地体现面向对象并提出继承概念的程序设计语言是Smalltalk 80Lisp是一种计算机的表处理语言,是最早也是应用最广泛的人工
智能语言。

【答案】A:② B:④ C:⑤ D:⑧ E:⑥

试题13 (1991年试题7)

从供选择的答案中选出应填入列下叙述中 内的正确答案,把编号写在答卷的对应栏内。编译程序中语法分析器接受以A为单位的输入,并产生有关信息供以后各阶段使用。BLR分析法和C是几种常见的语法分析技术,其中BLR分析法属于自下而上分析法,而C属于自上而下分析法。LR分析法主要有SLR(1)LR(0)LR(1)LALR(1)4种,其中D的分析能力最强,E的分析能力最弱。

供选择的答案

A:①:表达式 ②单词 ③产生式 ④语句

BC:①递归下降法 ②算符优先法 ③语法制导翻译法
④数据流分类法 ⑤自动机分析法

DE:①SLR(1) LR(0) LR(1) LALR(1)

【解析】

编译程序中语法分析器接受以单元为单位的输入,并产生有关信息供以后各阶段使用。算符优先法、LR分析法和递归下降法是几种常见的语法分析技术,其中算符优先法和LR分析法属于自下而上分析法,而递归下降法属于自下而下分析法。LR分析法主要有SLR(1)LR(0)LR(1)LALR(1)4种,其中LR(1)的分析能力最强,LR(0)的分析能力最弱。

【答案】A:② B:② C:① D:③ E:②

 

 

 

 

 

 

 

 

 

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值