文章目录
2.程序语言
2.1 程序设计语言概述
2.1.1程序设计语言的基本概念
1.低级语言和高级语言
2.编译程序和解释程序
3.程序设计语言的定义
4.程序设计语言的分类
1)程序设计语言发展概述
2)程序设计语言分类
(1)命令式和结构化程序设计语言。
(2)面向对象的程序设计语言。
(3)函数式程序设计语言。
(4)逻辑型程序设计语言。
2.1.2程序设计语言的基本成分
2.1.2.1程序设计语言的数据成分
- 1)常量和变量
- 2)全局量和局部量
- 3)数据类型
按照数据组织形式的不同可将数据分为基本类型、用户定义类型、构造类型及其他类型。C(C++)的数据类型如下。
(1)基本类型:整型(int)、字符型(char)、实型(float、double)和布尔类型(bool)。(2)特殊类型:空类型(void)。
(3)用户定义类型:枚举类型(enum)。
(4)构造类型:数组、结构、联合。
(5)指针类型:type*。
(6)抽象数据类型:类类型。
其中,布尔类型和类类型由C+语言提供。
2.1.2.2 程序设计语言的运算成分
2.1.2.3 程序设计语言的控制成分
顺序结构、选择结构、循环结构
2.1.2.4 程序设计语言的传输成分
程序设计语言的传输成分指明语言允许的数据传输方式,如赋值处理、数据的输入和输出等。
2.1.2.5 函数
2.2语言处理程序基础
2.2.1 汇编程序基本原理
2.2.2编译程序基本原理
2.2.3 解释程序基本原理
未归类
1与
等价的逻辑表达式是(B )。(⊕表示逻辑异或,+表示逻辑加)
解析:
头顶加个圈圈不是天使,是取反,true变false
2.包含8个成员的开发小组的沟通路径最多有(A )条。
A 28
B 32
C 56
D 64
解析:
软件开发小组的沟通路径受到小组组织形式和规模的影响。若任意小组成员之间均可能有沟通路径,则可用完全连通图来对开发小组的沟通路径建模,最多的沟通路径为完全连通图的边数,即n个成员的开发小组的沟通路径是n(n-1)/2,因此8个成员的开发小组的沟通路径有28条。
3.10个成员组成的开发小组,若任意两人之间都有沟通路径,则一共有(D )条沟通路径。
A 100
B 90
C 50
D 45
4.函数调用时,基本的参数传递方式有传值与传地址两种,( )。
A在传值方式下,形参将值传给实参
B在传值方式下,实参不能是数组元素
C在传地址方式下,形参和实参间可以实现数据的双向传递
D在传地址方式下,实参可以是任意的变量和表达式
解析:
函数调用时基本的参数传递方式有传值与传地址两种,
- 在传值方式下是将实参的值传递给形参,因此实参可以是表达式(或常量),也可以是变量(或数组元素),这种信息传递是单方向的,形参不能再将值传回给实参。
- 在传地址方式下,需要将实参的地址传递给形参,因此,实参必须是变量(数组名或数组元素),不能是表达式(或常量)。
这种方式下,被调用函数中对表达式参数的修改实际上就是对实际参数的修改,因此客观上可以实现数据的双向传递。
5.许多程序设计语言规定,程序中的数据都必须具有类型,其作用不包括(C )。
A 便于为数据合理分配存储单元
B 便于对参与表达式计算的数据对象进行检查
C 便于定义动态数据结构
D 便于规定数据对象的取值范围及能够进行的运算
6.以下关于变量和常量的叙述中,错误的是(B )。
A 变量的取值在程序运行过程中可以改变,常量则不行
B 变量具有类型属性,常量则没有
C 变量具有对应的存储单元,常量则没有
D 可以对变量赋值,不能对常量赋值
7.若C程序的表达式中引用了未赋初值的变量,则(D )。
A 编译时一定会报告错误信息,该程序不能运行
B 可以通过编译并运行,但运行时一定会报告异常
C 可以通过编译,但链接时一定会报告错误信息而不能运行
D 可以通过编译并运行,但运行结果不一定是期望的结果
解析:
在编写C/C++源程序时,为所定义的变量赋初始值是良好的编程习惯,而赋初值不是强制的要求,因此编译程序不检查变量是否赋初值。如果表达式中引用的变量从定义到使用始终没有赋值,则该变量中的值表现为一个随机数,这样对表达式的求值结果就是不确定的了。
8.可用于编写独立程序和快速脚本的语言是( )。
Python
Prolog
Java
C#
解析:
脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,通常以文本(如 ASCII)保存,只在被调用时进行解释或编译。Python是一种脚本语言。
9.程序运行过程中常使用参数在函数(过程)间传递信息,引用调用传递的是实参的(A )。
A地址
B类型
C名称
D值
10.以下关于程序设计语言的叙述中,错误的是( )。
A程序设计语言的基本成分包括数据、运算、控制和传输等
B高级程序设计语言不依赖于具体的机器硬件
C程序中局部变量的值在运行时不能改变
D程序中常量的值在运行时不能改变
解析:
程序设计语言的基本成分包括数据、运算、控制和传输等涉及程序语言的一般概念,程序设计语言的基本成分包括数据、运算、控制和传输等。
高级程序设计语言不依赖于具体的机器硬件考查高级语言和低级语言的概念。对于程序设计语言高级语言和低级语言是指其相对于运行程序的机器的抽象程度。
低级语言在形式上更接近机器指令,汇编语 言就是与机器指令一一对应的。高级语言对底层操作进行了抽象和封装,其一条语句对应多条机器指令,使编写程序的过程更符合人类的思维习惯,并且极大简化了人力劳动。 高级语言不依赖于具体的机器硬件。 程序中局部变量的值在运行时不能改变考查局部变量的概念,凡是在函数内部定义的变量都是局部变量(也称作内部变量),包括在函数内部复合语句中定义的变量和函数形参表中说明的形式参数。局部变量只能在函数内部使用,其作用域是从定义位置起至函数体或复合语句体结束为止。 局部变量的值通常在其生存期内是变化的。 程序中常量的值在运行时不能改变考查常量的概念,程序中常量的值在运行时是不能改变的。
11.将编译器的工作过程划分为词法分析,语义分析,中间代码生成,代码优化和目标代码生成时,语法分析阶段的输入是(A )若程序中的括号不配对,则会在(/)阶段检查出错误。
A记号流
B字符流
C源程序
D分析树
解析:
记号流,词法分析的输出是记号流,也就是语法分析的输入。
字符流,在Java中,根据处理的数据单位不同,分为字节流和字符流。字符流是由字符组成的,例如 FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter 等。与本题无关。
源程序,词法分析的任务是把源程序的字符串转换成单词符号序列。
分析树,如果没有语法错误,语法分析后就能正确的构造出其语法树。
括号不匹配是典型的语法错误,会在语法分析阶段检测出来。
12.已知某高级语言源程序A经编译后得到机器C上的目标程序B,则(A )。
A 对B进行反编译,不能还原出源程序A
B 对B进行反汇编,不能得到与源程序A等价的汇编程序代码
C 对B进行反编译,得到的是源程序A的变量声明和算法流程
D 对A和B进行交叉编译,可以产生在机器C上运行的动态链接库
解析:
编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高级语言源代码,只能转换成功能上等价的汇编程序。
13.逻辑表达式“a∧b∨c∧(b∨x>0)”的后缀式为(D )。(其中∧、∨分别表示逻辑与、逻辑或,>表示关系运算大于,对逻辑表达式进行短路求值)
abcbx0>∨∧∧∨
ab∧c∨b∧x0>V
ab∧cb∧x>0∨∨
ab∧cbx0> ∨∧∨
解析:
“逻辑与运算”的优先级高于“逻辑或运算”。 “逻辑与运算”表达式“x∧Y”的短路求值逻辑是:若x为假,则可知“x∧Y”的值为假,无需 再对y求值,因此只有在x为真时继续对y求值。 “逻辑或运算”表达式“x∨y”的短路求值逻辑是:若x为真,则可知“x∨y”的值为真,无需再对y求值,因此只有在x为假时继续对y求值。 对于逻辑表达式“a∧b∨c∧(b ∨ x>0)”,从运算符的优先级方面考虑需先对“a∧b”求值,然后对“c∧(b∨ x>0)”求值,最后进行“∨”运算,因此后缀式为“ab∧cbx0>∨∧∨”。
14.语言L={ambn|m≥0,n≥1}的正规表达式是(B )
A aa*bb*
B a*bb*
C aa*b*
D ab
解析:
aabb表示的字符串特点是:若干个a之后跟若干个b,a和b都至少出现1次。 abb表示的字符串特点是:若干个a之后跟若干个b,a可以不出现,b至少出现1次。aab表示的字符串特点是:若干个a之后跟若干个b,a至少出现1次,b可以不出现。ab表示的字符串特点是:若干个a之后跟若干个b,a和b都可以不出现。语言L={ambn|m≥0,n≥1} 中,若干个a之后跟若干个b,a可以不出现,b至少出现1次。
15.在引用调用方式下进行函数调用是将 (A ) 。
A 实参的值传递给形参
B 实参的地址传递给形参
C 形参的值传递给实参
D 形参的地址传递给实参
解析:
要注意,实参是作用域内的值
形参是方法的签名参数
值调用和引用调用是实现函数调用时传递参数的两种基本方式。在值调用方式下,是将实参的值传给形参,在引用调用方式下,是将实参的地址传递给形参。
16.与算术表达式“(a+(b-c))*d“ 对应的树是(A )。
解析:
17.好题:
18.(A )是一种函数式编程语言。
A Lisp
B Prolog
C Python
D Java/C++
解析:
LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。
LISP作为因应人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。
19.以编译方式翻译C/C++源程序的过程中,(C )阶段的主要任务是对各条语句的结构进行合法性分析。
A 词法分析
B 语义分析
C 语法分析
D 目标代码生成
解析:
词法分析阶段依据语言的词法规则,对源程序进行逐个字符地扫描,从中识别出一个个“单词”符号,主要是针对词汇的检查。 语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。语法规则就是各类语法单位的构成规则,主要是针对结构的检查。 语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要针对句子含义的检查。 本题描述的是语法分析。
20.下面关于程序语言的叙述,错误的是( )。
A 脚本语言属动态语言,其程序结构可以在运行中改变
B 脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序
C php、JavaScript属于静态语言,其所有成分可在编译时确定
D C语言属于静态语言,其所有成分可在编译时确定
解析:
动态语言是指程序在运行时可以改变其结构,例如新的函数可以被引进、己有的函数可以被删除等在结构上的变化等。动态语言的类型检查是在运行时进行的,其优点是方便阅读,不需要写非常多的与类型相关的代码;缺点是不方便调试,命名不规范时会读不懂、不利于理解等。 脚本语言代表一套与系统程序设计语言不同的协定。它们牺牲执行速度和与系统程序设计语言相关的类型长度而提供更高的编程创作能力和软件重用。脚本语言更适合在联系复杂的应用程序中进行胶着(粘合)。为了简化连接组件的工作,脚本语言被设计为无类型的,脚本语言一般是面向字符的,因为字符为许多不同的事物提供了一致的描述。 事实上,脚本语言都是动态语言,而动态语言都是解释型语言,不管它们是否是面向对象的语言。
21.将高级语言源程序翻译为机器语言程序的过程中常引入中间代码。以下关于中间代码的叙述中,错误的是(D )。
A 不同的高级程序语言可以产生同一种中间代码
B 使用中间代码有利于进行与机器无关的优化处理
C 使用中间代码有利于提高编译程序的可移植性
D 中间代码与机器语言代码在指令结构上必须一致
解析:
“中间代码”是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码。由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。
22.好题
23.好题
24.编译程序对高级语言源程序进行编译的过程中,要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入 (A ) 中。
A 符号表
B 哈希表
C 动态查找表
D 栈和队列
解析:
编译是实现高级程序设计语言的一种方式,编译过程可分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段,还需要进行出错处理和符号表管理。
符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地査找、插入、修改和删除等操作符号表的建立可以始于词法分析阶段,也可以放到语法分析和语义分析阶段,但符号表的使用有时会延续到目标代码的运行阶段。
25.将高级语言源程序翻译成机器语言程序的过程中,常引入中间代码。以下关于中间代码的叙述中,不正确的是()。
A 中间代码不依赖于具体的机器
B 使用中间代码可提高编译程序的可移植性
C 中间代码可以用树或图表示
D 中间代码可以用栈和队列表示
解析:
中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,使用中间代码可提高编译程序的可移植性,常见的有逆波兰记号、四元式、三元式和树。
26.C程序中全局变量的存储空间在(B )分配。
A 代码区
B 静态数据区
C 栈区
D 堆区
解析:
程序运行时的用户内存空间一般划分为代码区、静态数据区、栈区和堆区,其中栈区和堆区也称为动态数据区。全局变量的存储空间在静态数据区。
27.表达式采用逆波兰式表示时,利用(A )进行求值。
A 栈
B 队列
C 符号表
D 散列表
解析:
后缀式(逆波兰式)是波兰逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。 借助栈可以方便地对后缀式进行求值。方法为:先创建一个初始为空的栈,用来存放运算数。对后缀表达式求值时,从左至右扫描表达式,若遇到运算数,就将其入栈,若遇到运算符,就从栈顶弹出需要的运算数并进行运算,然后将结果压入栈顶,如此重复,直到表达式结束。若表达式无错误,则最后的运算结果就存放在找顶并且是栈中唯一的元素。
28.将高级语言源程序先转化为一种中间代码是现代编译器的常见处理方式。常用的中间代码有后缀式、(B )、语法树等。
A 前缀码
B 三地址码
C 符号表
D 补码和移码
解析:
“中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关。最常用的一种中间代码是与汇编语言的指令非常相似的三地址码,其实现方式常采用四元式,另外还有后缀式、树等形式的中间代码。
29.将高级语言源程序通过编译或解释方式进行翻译时,可以先生成与源程序等价的某种中间代码。以下关于中间代码的叙途中,正确的是(B )。
A 中间代码常采用符号表来表示
B 后缀式和三地址码是常用的中间代码
C 对中间代码进行优化要依据运行程序的机器特性
D 中间代码不能跨平台
解析:
中间代码的作用是可使程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。中间代码有多种形式,常见的有逆波兰记号(后缀式)、四元式和三元式,它们的共同特点是与具体的机器无关,不依赖于具体的计算机。
30.在对高级语言源程序进行编译或解释处理的过程中,需要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入(B )中。
A 哈希表
B 符号表
C 堆栈
D 队列
解析:
符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。
31.(A )绑定是指在运行时把过程调用和响应调用所需要执行的代码加以结合。
A 动态
B 过载
C 静态
D 参数
解析:
运行时结合是动态绑定,编译时结合是静态绑定。
32.
解析:
词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号。语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
语义分析阶段主要检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码。目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。 源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误。语法错误是指语言结构上的使用错误,是指编译时所发现的程序错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
33.
解析:
非确定有限状态自动机与确定有限状态自动机的最大区别是它们的转移函数不同。确定有限状态自动机对每一个可能的输入只有一个状态的转移。非确定有限状态自动机对每一个可能的输入可以有多个状态转移,接受到输入时从这多个状态转移中非确定地选择一个。在本题中给出的图M1中,我们可以看到当在状态A输入0时,它可以转移到它自己,也可以转移到状态B,所以M1是非确定的。而M2中不存在这样的情况,因此是确定的有限自动机。
34.
解析:
被有限自动机所识别是指从初态开始到终态结束,所输入的字符串能够按顺序地执行下去,若到某个状态不能往下走得到下一个字符,则认为不能识别。在本题中,选项A能被识别。从初态A出发,不管经过多少个1和0之后,只能是处在A、B、C三种状态中的一种,所以在(0|1)*后,只能是处在A、B、C三种状态中的一种,不管是在那个状态,输入0后,都会处在状态B,然后输入1,都会转换到状态C,因此选项A能被该有限自动机所识别。同样的道理,我们可以知道其它选项的正规式不能被识别。
35.以下关于语言L={anbn|n>=1}的叙述中,正确的是(D )。
A 可用正规式“aa*bb*”描述,但不能通过有限自动机识别
B 可用正规式“ambm”表示,但可用有限自动机识别
C 不能用正规式表示,但可用有限自动机识别
D 不能用正规式表示,也不能通过有限自动机识别
解析:
L = {anbn|n>=l}中的字符串特点是a的个数与b的个数相同,且所有的a都在b之前,该集合不是正规集,不能用正规式表示。 正规集可用正规式描述,用有限自动机识别。
36.移进—归约分析法是编译程序(或解释程序)对高级语言源程序进行语法分析的一种方法,属于(B )的语法分析方法。
A 自顶向下(或自上而下)
B 自底向上(或自下而上)
C 自左向右
D 自右向左
解析:
语法分析方法分为两类:自上而下(自顶向下)分析法和自下而上(自底向上)分析法,递归下降分析法和预测分析法属于自上而下分析法,移进-归约分析法属于自下而上(自底向上)分析法。
37.若一个程序语言可以提供链表的定义和运算,则其运行时的( B ) 。
A 数据空间适合采用静态存储分配策略
B 数据空间必须采用堆存储分配策略
C 指令空间需要采用栈结构
D 指令代码必须放入堆区
解析:
链表中的结点空间需要程序员根据需要申请和释放,因此,数据空间应采用堆存储分配策略。
HTML (Hypertext Marked Language,超文本标记语言),用于互联网的信息表示。用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX,Windows等)。HTML文档是纯文本文档,可以使用记事本、写字板等编辑工具来编写HTML文件,其文件(文档)的扩展名是.html或.htm,它们需要通过WWW浏览器进行解释并显示出效果。
XML (Extensible Markup Language,可扩展的标记语言)1.0 标准于1998年2月10日发布,被认为是继HTML和Java编程语言之后的又一个里程碑式的Internet技术。XML 丰富了HTML的描述功能,可以描述非常复杂的Web页面,如复杂的数字表达式、化学方程式等。XML的特点是结构化、自描述、可扩展和浏览器自适应等。
用于WAP的标记语言就是WML (Wireless Markup Language ),其语法跟XML 一样,是XML的子集。
PHP (Hypertext Preprocessor)是一种在服务器端执行的、嵌入HTML文档的脚本语言,其语言风格类似于C语言,被网站编程人员广泛运用。
39.在对程序语言进行翻译的过程中,常采用一些与之等价的中间代码表示形式。常用的中间代码表示不包括(D ) 。
A树
B后缀式
C四元式
D正则式
解析:
从原理上讲,对源程序进行语义分析之后就可以直接生成目标代码,但由于源程序与目标代码的逻辑结构往往差别很大,特别是考虑到具体机器指令系统的特点,要使翻译一次到位很困难,而且用语法制导方式机械生成的目标代码往往是繁琐和低效的,因此有必要采用一种中间代码,将源程序首先翻译成中间代码表示形式,以利于进行与机器无关的优化处理。由于中间代码实际上也起着编译器前端和后端分水岭的作用,所以使用中间代码也有助于提高编译程序的可移植性。常用的中间代码有后缀式、三元式、四元式和树等形式。
40.编译过程中,对高级语言程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将所需要的信息正确地填入合理组织的(A )中;对可执行语句,则是 (/)。
A符号表
B栈
C队列
D树
解析:
符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地査找、插入、修改和删除等操作。 符号表的建立可以始于词法分析阶段,也可以放到语法分析和语义分析阶段,但符号表的使用有时会延续到目标代码的运行阶段。 编译过程中,在确认源程序的语法和语义之后,就可对其进行翻译,同时改变源程序的内部表示。对于声明语句,需要记录所遇到的符号的信息,因此应进行符号表的填查工作。对于可执行语句,需要翻译成中间代码或目标代码。
41.对高级语言源程序进行编译的过程中,有限自动机(NFA或DFA)是进行(A )的适当工具。
A词法分析
B语法分析
C语义分析
D出错处理
解析:
语言中具有独立含义的最小语法单位是符号(单词),如标识符、无符号常数与界限符等。词法分析的任务是把构成源程序的字符串转换成单词符号序列。 有限自动机是一种识别装置的抽象概念,它能准确地识别正规集。有限自动机分为两类:确定的有限自动机(DFA)和不确定的有限自动机(NFA)。
42.大多数程序设计语言的语法规则用 (B ) 描述即可。
A正规文法
B上下文无关文法
C上下文有关文法
D短语结构文法
解析:
形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。上下文无关文法拥有足够强的表达力来表示大多数程序设计语言的语法。另一方面,上下文无关文法又足够简单,使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的。
44.
解析:
对高级语言源程序进行编译(或解释)方式的翻译过程中,,词法分析采用有限自动机作为计算模型。有限自动机分为确定的有限自动机(DFA)和不确定的有限自动机 (NFA)。可将一个从NFA转换为等价的最小化DFA。 题中的NFA的功能是识别空串以及b不能连续出现(即每个b后至少含有1个a.) 的a、b字符串,若是非空串,则以a结尾。 选项A识别的是空串以及每个b后至少含有1个a的a、b字符串,若是非空串, 则以a结尾。 选项B识别空串以及b不能连续出现且以b结尾的a、b字符串。 选项C识别b不能连续出现且以b结尾的a、b字符串,不能识别空串。 选项D识别b不能连续出现且以a结尾的a、b字符串,不能识别空串。
45.
46.
本题给出的NFA,能够识别字符串000,010等,以这两个字符串为例进行分析。 与之等价的DFA,也必须能够识别这样的串。A选项不能识别000,B选项不能识别010,D选项不能识别010。只有C选项能够同时识别这2个串。
47.
解析:
一个文法的语言是该文法能产生的句子的集合。一个文法产生的句子是从文法开始符号出发推导出的所有终结符号串。
48.由某上下文无关文法M[S]推导出某句子的分析树如下图所示,则错误的叙述是 (A )。
A 该文法推导出的句子必须以“a”开头
B acabcbdcc是该文法推导出的一个句子
C “S->aAcB”是该文法的一个产生式
D a、b、c、d属于该文法的终结符号集
解析:
推导就是从文法的开始符号S出发,反复使用产生式,将产生式左部的非终结符替换为右部的文法符号序列(展开产生式用=>表示),直到产生一个终结符的序列时为止。从题中给出的分析树可得到如下的一个最左推导过程 S=>aAcB=>aAaBcB=>acaBcB =>acabcB=>acabcbScA=>acabcbBdcA=>acabcbdcA=>acabcbdcc,因此,acabcbdcc是该方法推导出的一个句子。其中用到的产生式如下: S->aAcB S->Bd A->AaB A->c B->bScA B->b B->ε从起始符号S出发也可以如下推导:S=>Bd=>εd=>d,即该文法推导出的句子也可以为d,因此选项A错误。
50.
51.编译过程中,对高级语言程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将所需要的信息正确地填入合理组织的(/)中;对可执行语句,则是 (C )。
A 翻译成机器代码并加以执行
B 转换成语法树
C 翻译成中间代码或目标代码
D 转换成有限自动机
解析:
符兮表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地査找、插入、修改和删除等操作。 符号表的建立可以始于词法分析阶段,也可以放到语法分析和语义分析阶段,但符号表的使用有时会延续到目标代码的运行阶段。 编译过程中,在确认源程序的语法和语义之后,就可对其进行翻译,同时改变源程序的内部表示。对于声明语句,需要记录所遇到的符号的信息,因此应进行符号表的填查工作。对于可执行语句,需要翻译成中间代码或目标代码
52.递归下降分析方法是一种(B )方法。
A自底向上的语法分析
B自上而下的语法分析
C自底向上的词法分析
D自上而下的词法分析
解析:
对高级语言源程序进行编译(或解释)方式的翻译过程中,语法分析的任务是根据语言的语法规则,分析单词串是否构成短语和句子,即表达式、语句和程序等基本语言结构,同时检查和处理程序中的语法错误。程序设计语言的绝大多数语法规则可以采用上下文无关文法进行描述。语法分析方法有多种,根据产生语法树的方向,可分为自底向上和自顶向下两类。递归下降分析法和预测分析法是常用的自顶向下分析法。算符优先分析法和LR分析法属于自底向上的语法分析方法。
54.
55.语法制导翻译是一种( )方法。
A动态语义分析
B中间代码优化
C静态语义分析
D目标代码优化
解析:
程序设计语言的语义分为静态语义和动态语义,其中静态语义分析方法是语法制导翻译,其基本思想是将语言结构的语义以属性的形式赋予代表此结构的文法符号,而属性的计算以语义规则的形式赋予文法的产生式。
57.
解析:
KMP模式匹配算法通俗点说就是一种在一个字符串中定位另一个串的高效算法。其实我们在做这个题目时,也可以不需要知道KMP模式匹配算法,可以根据题目给出的定义式来求解。当j=1时,很显然next[1]=0。当j=2时,由于1<k<j,因此k无法取到合适值,因此next[2]=1。当j=3时,k的取值为2,那么等号左边的‘P1P2…PK-1’字符串就是P1,为字符串中的第一个字符 a,而右边就是P2,即字符串中的第二个字符b,显然,它们不相等,因此next[3]=1。当j=4时,k可以取值2或者3,取值为2时,等号左边为第一个字符a,而等号右边为 P3,也是字符a,因此相等,但这个时候我们还要判定当k取值为3时,等号左边为第一与第二个字符,即‘ab’,而右边为‘ba’,显然不相等,因此next[4]=2。同理我们可以求得当j=5,j=6的结果,故本题答案为B。
58.
59.