2.2 语言处理程序基础

news2024/9/23 17:20:30

以编译方式翻译C/C++源程序的过程中,类型检查在( )阶段处理。
A. 词法分析
B. 语义分析
C. 语法分析
D. 目标代码生成

正确答案是 B。
解析
本题考查的是编译器工作过程。
A选项词法分析阶段处理的错误:非法字符、单词拼写错误等。与题意不符。
B选项静态语义分析阶段(即语义分析阶段)处理的错误:运算符与运算对象类型不合法等错误。本题选择B项语义错误。
C选项语法分析阶段处理的错误:标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。与题意不符。
D选项目标代码生成(执行阶段)处理的错误:动态语义错误,包括陷入死循环、变量取零时做除数、引用数组元素下标越界等错误。与题意不符。
综上所述,本题选B。

下图所示的二叉树表示的算术表达式是( )(其中的*、/、一表示乘、除、减运算)。
在这里插入图片描述

A. a*b/c- d
B. a*b/(c-d)
C. a*(b/c- d)
D. a*(b-c/d)

正确答案是 C。
解析
本题考查算术表达式相关问题。
算术表达式与树的中缀表达式类似,按照左根右的顺序,其中在算术表达式中符号位表示根。
根据该二叉树的表示,我们可以得知*为该树的总根,将左子树和右子树分隔开来。左边部分是a,右边部分是以-作为右子树的总根,左边是b/c,右边是d综合得出算术表达式应该为a*(b/c-d),答案选C。

某有限自动机的状态转换图如下图所示,该自动机可识别( )。
在这里插入图片描述

A. 1001
B. 1100
C. 1010
D. 0101

正确答案是 B。
解析
本题考查的是有限自动机相关知识。
A选项从s0出发,1001到达s1,没有到达终态s2,不能被自动机识别。
B选项从s0出发,1100成功到达终态s2,可以被自动机识别。本题选择B选项。
C选项从s0出发,1010到达s0,没有到达终态s2,不能被自动机识别。
D选项从s0出发,0101到达s1,没有到达终态s2,不能被自动机识别。

对于后缀表达式abc-+d*(其中,一、+、*表示二元算术运算减、加、乘),与该后缀式等价的语法树为( )。
在这里插入图片描述

正确答案是 B。
解析
本题考查程序语言相关知识。对题中ABCD4个二叉树进行后序遍历,得出结果与该后缀表达式一致的则为与其等价的语法树。答案为B。
A为:ab-c+d*
B为:abc-+d*
C为:ab+cd-*
D为:abcd-+*

下图所示为一个不确定有限自动机(NFA)的状态转换图。该NFA识别的字符串集合可用正规式( )描述。
在这里插入图片描述

A. ab*a
B. (ab)*a
C. a*ba
D. a(ba)*

正确答案是 A。
解析
本题考查有限自动机相关知识。根据图中展示,其正规式应以a开头,a结尾,b在中间可以出现0次或多次,所以是ab*a,答案为A。
B项是ab必须一起出现,C项b仅出现1次,D项是ba连续出现。都不符合。

语法指导翻译是一种( )方法。
A. 动态语义分析
B. 中间代码优化
C. 静态语义分析
D. 目标代码优化

正确答案是 C。
解析
本题考查程序语言基础知识。翻译的任务:首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。其基本思想是,根据翻译的需要设置文法符号的属性,以描述语法结构的语义。例如,一个变量的属性有类型,层次,存储地址等。表达式的属性有类型,值等。属性值的计算和产生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。
动态语义分析指运行期间的语义问题,如0作为除数进行运算。
所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。

下面二叉树表示的简单算术表达式为( )。
在这里插入图片描述

A. 10*20+30-40
B. 10* (20+30-40)
C. 10* (20+30) -40
D. 10*20+ (30-40)

正确答案是 C。
解析
本题考查程序语言基础-二叉树的相关知识。本题由二叉树可知,表达式最后计算的为一,其次为*,最先做的为+,只有C选项的表达式是先加法后乘法最后减法。
A是先乘再加最后减,B项先加法后减法最后乘法,D是先乘法和减法最后加法。
也可将A、B、C、D四个选项对应的二叉树全部画出,找出相符的选项。

在程序运行过程中,( )时涉及整型数据转换为浮点型数据的操作。
A. 将浮点型变量赋值给整型变量
B. 将整型常量赋值给整型变量
C. 将整型变量与浮点型变量相加
D. 将浮点型常量与浮点型变量相加

正确答案是 C。
解析
本题考查程序语言基础知识。本题A选项需要将浮点数转换为整型数;B选项和D选项同类型数据,不需要转换数据类型;C选项需要将整型数转换为浮点数再计算。因此本题选择C选项。

乔姆斯基(Chomsky)将文法分为4种类型,程序设计语言的大多数语法现象可用其中的( )描述。
A. 上下文有关文法
B. 上下文无关文法
C. 正规文法
D. 短语结构文法

正确答案是 B。
解析
上下文无关文法:形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。

在以阶段划分的编译过程中,判断程序语句的形式是否正确属于( )阶段的工作。
A. 词法分析
B. 语法分析
C. 语义分析
D. 代码生成

正确答案是 B。
解析
检查单个词是否正确,属于词法阶段的工作。而识别判断程序语句形式是否正确属于语法分析的工作。

"单选题
某确定的有限自动机(DFA)的状态转换图如下图所示(A是初态,D、E是终态),则该DFA能识别( )。
在这里插入图片描述

A. 00110
B. 10101
C. 11100
D. 11001

正确答案是 C。
解析
选项中,只有C选项的字符串能被DFA解析。解析路径为:ACEEBDD。

下图为一个表达式的语法树,该表达式的后缀形式为( )。
在这里插入图片描述

A. x 5 y + * a / b -
B. x 5 y a b * + /-
C. -/ * + × 5 y a b
D. x 5 + *y + a/b-

正确答案是 A。
解析
要得到题目中的表达式语法树后缀形式,只需要对树进行后序遍历即可,后序遍历的结果为:x5y+*a/b-。

编译过程中进行的语法分析主要是分析( )。
A. 源程序中的标识符是否合法
B. 程序语句的含义是否合法
C. 程序语句的结构是否合法
D. 表达式的类型是否合法

正确答案是 C。
解析
语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等。语法分析程序判断源程序在结构上是否正确。源程序的结构由上下文无关文法描述。

某确定的有限自动机(DFA)的状态转换图如下图所示(0是初态,4是终态),则该DFA能识别( )。
在这里插入图片描述

A. aaab
B. abab
C. bbba
D. abba

正确答案是 A。
解析
B项从0到1然后走不了了,C项在3状态结束,不对;D项也只到1状态。

将高级语言源程序翻译为可在计算机上执行的形式有多种不同的方式,其中( )。
A. 编译方式和解释方式都生成逻辑上与源程序等价的目标程序
B. 编译方式和解释方式都不生成逻辑上与源程序等价的目标程序
C. 编译方式生成逻辑上与源程序等价的目标程序,解释方式不生成
D. 解释方式生成逻辑上与源程序等价的目标程序,编译方式不生成

正确答案是 C。
解析
本题考查程序语言基础知识。编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。将某一种程序设计语言写的程序翻译成等价的另一种语言的程序,称之为编译程序。

由字符a、b构成的字符串中,若每个a后至少跟一个b,则该字符串集合可用正规式表示为( )。
A. (blab)*
B. (ab*)*
C. (a*b*)*
D. (alb)*

正确答案是 A。
解析
A的方式可以保证a后面必定是b。
对于B、C选项,当b的*取值为0时,a的后面不能保证会有b。
对于D选项,表示的是任意a和b组成的串,因此包括aaa,不满足a的后面必须有b。
本题只有A选项符合题意。

以下关于高级程序设计语言实现的编译和解释方式的叙述中,正确的是( )。
A. 编译程序不参与用户程序的运行控制,而解释程序则参与
B. 编译程序可以用高级语言编写,而解释程序只能用汇编语言编写
C. 编译方式处理源程序时不进行优化,而解释方式则进行优化
D. 编译方式不生成源程序的目标程序,而解释方式则生成

正确答案是 A。
解析
编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段。目标程序可以独立于源程序运行。
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它是直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。

以下关于脚本语言的叙述中,正确的是( )。
A. 脚本语言是通用的程序设计语言
B. 脚本语言更适合应用在系统级程序开发中
C. 脚本语言主要采用解释方式实现
D. 脚本语言中不能定义函数和调用函数

正确答案是 C。
解析
脚本语言(Script languages,scripting programming languages,scripting languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创
建的计算机编程语言。此命名起源于一个脚本“screen play”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。

将高级语言源程序先转化为一种中间代码是现代编译器的常见处理方式。常用的中间代码有后缀式、( )、树等。
A. 前缀码
B. 三地址码
C. 符号表
D. 补码和移码

正确答案是 B。
解析
中间代码的表达形式有语法树,后缀式,三地址代码。

某确定的有限自动机(DFA)的状态转换图如下图所示(A是初态,C是终态),则该DFA能识别( )。
在这里插入图片描述

A. aabb
B. abab
C. baba
D. abba

正确答案是 B。
解析
对于该有限自动机,A为初态,C为终态,因此能识别的串一定是a开始b结束的串,可以排除C、D选项。并且,对于该自动机能识别的串,经过初始a到达B状态后,只能识别b字符,因此A选项也错误。
本题只能选择B选项abab,识别顺序如下图所示:
在这里插入图片描述

移进-归约分析法是编译程序(或解释程序)对高级语言源程序进行语法分析的一种方法,属于( )的语法分析方法。
A. 自顶向下(或自上而下)
B. 自底向上(或自下而上)
C. 自左向右
D. 自右向左

正确答案是 B。
解析
归约分析是自底向上方法中的典型。先分析词,即词法分析。而分析词的组合,即语法分析。

某非确定的有限自动机(NFA)的状态转换图如下图所示(q0既是初态也是终态)。以下关于该NFA的叙述中,正确的是( )。
在这里插入图片描述

A. 其可识别的0、1序列的长度为偶数
B. 其可识别的0、1序列中0与1的个数相同
C. 其可识别的非空0、1序列中开头和结尾字符都是0
D. 其可识别的非空0、1序列中结尾字符是1

正确答案是 D。
解析
要证明一种说法有误只需要举一反例即可,所以做这类题时,举反例排除错误选择是一个不错的选择。
由于题目所述的NFA可以解析串“1”,所以可排除:A,B,C三个选项。

某程序运行时陷入死循环,则可能的原因是程序中存在( )。
A. 词法错误
B. 语法错误
C. 动态的语义错误
D. 静态的语义错误

正确答案是 C。
解析
死循环错误属于典型的语义错误,但静态的语义错误可被编译器发现,到程序真正陷入死循环说明编译器并未发现,所以属于动态语义错误。

对高级语言源程序进行编译或解释的过程可以分为多个阶段,解释方式不包含( )阶段。
A. 词法分析
B. 语法分析
C. 语义分析
D. 目标代码生成

正确答案是 D。
解析
本题考查程序语言基础知识。
用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。汇编语言源程序需要用一个汇编程序将其翻译成目标程序后才能执行。高级语言源程序则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。
解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行:而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程:而在解释方式下,
解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

某非确定的有限自动机(NFA)的状态转换图如下图所示(q0既是初态也是终态),与该NFA等价的确定的有限自动机(DFA)是( )。
在这里插入图片描述
在这里插入图片描述

正确答案是 A。
解析
本题使用代入法进行验证比较容易。
(1)代入aaa,选项B与C无法解析,故排除。
(2)代入ba,选项D无法解析,也要排除,此时可以确定正确答案为A。

递归下降分析方法是一种( )方法。
A. 自底向上的语法分析
B. 自上而下的语法分析
C. 自底向上的词法分析
D. 自上而下的词法分析

正确答案是 B。
解析
所谓递归下降法(recursive descent method),是指对文法的每一非终结符号,都根据相应产生式各候选式的结构,为其编写一个子程序(或函数),用来识别该非终结符号所表示的语法范畴。

编译器和解释器是两种基本的高级语言处理程序。编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等阶段,其中,(1)并不是每个编译器都必需的,与编译器相比,解释器(2)。
在这里插入图片描述

题目(1)
A. 词法分析和语法分析
B. 语义分析和中间代码生成
C. 中间代码生成和代码优化
D. 代码优化和目标代码生成
题目(2)
A. 不参与运行控制,程序执行的速度慢
B. 参与运行控制,程序执行的速度慢
C. 参与运行控制,程序执行的速度快
D. 不参与运行控制,程序执行的速度快

正确答案是 C B。
解析
在编译过程中:词法分析;语法分析;语义分析;目标代码生成是必须的,而代码优化和中间代码生成是可以不需要的。
编译与解释的区别在于:
编译直接生成目标代码,在机器上执行而编译器不需要参与执行,因此程序执行速度快;
解释则生成中间代码或其等价形式,程序执行时需要解释器的参与,并且由解释器控制程序的执行,因此执行速度慢。

表达式采用逆波兰式表示时,利用( )进行求值。
A. 栈
B. 队列
C. 符号表
D. 散列表

正确答案是 A。
解析
逆波兰使用栈的基本操作流程为:从左至右将数字入栈,当遇运算符时,出栈运算符所需数据进行操作,再将操作结果入栈,依此类推。

对高级语言源程序进行编译的过程可以分为多个阶段,分配寄存器的工作在( )阶段进行。
A. 词法分析
B. 语法分析
C. 语义分析
D. 目标代码生成

正确答案是 D。
解析
目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。

对于大多数通用程序设计语言,用( )描述其语法即可。
A. 正规文法
B. 上下文无关文法
C. 上下文有关文法
D. 短语结构文法

正确答案是 B。
解析
上下文无关文法:形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。

与算术表达式“(a+(b-c))*d”对应的树是( )。
在这里插入图片描述

正确答案是 B。
解析
本题考查的是表达式的树形表示,我们常见的表达式形式是树的中序遍历序列。
对算术表达式“(a+(b-c))*d”求值的运算处理顺序是:先进行b-c,然后与a相加,最后再与d相乘。只有选项B所示的二叉树与其相符。

编译程序对高级语言源程序进行编译的过程中,要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入( )中。
A. 符号表
B. 哈希表
C. 动态查找表
D. 栈和队列

正确答案是 A。
解析
符号表:符号表是一种用于语言翻译器(例如编译器和解释器)中的数据结构。在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。
哈希表:也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
动态查找表:动态查找表的表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。
栈和队列:基本的数据结构。栈的基本特点是“后进先出”,而队列的基本特点是“先进先出”。

在C/C++程序中,整型变量a的值为0且应用在表达式“c=b/a”中,则最可能发生的情形是( )。
A. 编译时报告有语法错误
B. 编译时报告有逻辑错误
C. 运行时报告有语法错误
D. 运行时产生异常

正确答案是 D。
解析
检查语法错误是在编译时,表达式“c=b/a”符合语法逻辑,编译时不会报语法错误;由于编译时a的值无法确定,需要到运行时,实际传入值时才能确定,因此在运行时,若分母为0,将产生异常。

算术表达式“(a-b)*(c+d)”的后缀式是( )。
A. ab-cd+*
B. abcd-*+
C. ab-+*cd
D. ab-c+d*

正确答案是 A。
解析
后缀表达式是从左到右算。把表达式加上括号,((a-b)*(c+d)),再把运算符加到括号外面ab-cd+*。答案为A。

将高级语言源程序翻译成机器语言程序的过程中,常引入中间代码。以下关于中间代码的叙述中,不正确的是( )。
A. 中间代码不依赖于具体的机器
B. 使用中间代码可提高编译程序的可移植性
C. 中间代码可以用树或图表示
D. 中间代码可以用栈和队列表示

正确答案是 D。
解析
本题考查程序语言基础知识。
从原理上讲,对源程序进行语义分析之后就可以直接生成目标代码,但由于源程序与目标代码的逻辑结构往往差别很大,特别是考虑到具体机器指令系统的特点,要使翻译一次到位很困难,而且用语法制导方式机械生成的目标代码往往是繁琐和低效的,因此有必要设计一种中间代码,将源程序首先翻译成中间代码表示形式,以利于进行与机器无关的优化处理。由于中间代码实际上也起着编译器前端和后端分水岭的作用,所以使用中间代码也有助于提高编译程序的可移植性。常用的中间代码有后缀式、三元式、四元式和树(图)等形式。

简单算术表达式的结构可以用下面的上下文无关文法进行描述(E为开始符号),( )是符合该文法的句子。
E→T∣E+T
T→F∣T*F
F→-F∣N
N→0∣1∣2∣3∣4∣5∣6∣7∣8∣9
A. 2–3*4
B. 2±3*4
C. (2+3)*4
D. 2*4-3

正确答案是 B。
解析
本题考查程序语言基础知识。一个上下文无关语法定义一个语言,其主要思想是从文法的开始符号出发,反复连续使用产生式,对非终结符进行替换和展开。
推出2±-3*4的过程如下:
E≥E+T≥T+T≥F+T≥2+T≥2+T*F≥2+F*F≥2±-F*F≥2±-3*F≥2±3*4;
文法中的二元运算只有加号和乘号,文法中也没有括号。所以ACD错误。

在仅由字符a、b构成的所有字符串中,其中以b结尾的字符串集合可用正规式表示为( )。
A. (blab)*b
B. (ab*)*b
C. a*b*b
D. (alb)*b

正确答案是 D。
解析
所有选项都是以b为结尾的,只有D可以包含以a、b字符串组成,并以b结尾的所有字符串。
在这里插入图片描述

编译器与解释器是程序语言翻译的两种基本形态,以下关于编译器工作方式及特点的叙述中,正确的是( )。
A. 边翻译边执行,用户程序运行效率低且可移植性差
B. 先翻译后执行,用户程序运行效率高且可移植性好
C. 边翻译边执行,用户程序运行效率低但可移植性好
D. 先翻译后执行,用户程序运行效率高但可移植性差

正确答案是 D。
解析
编译器把源程序先翻译,得到目标代码。
最后由机器直接执行。
整个过程运行效率高,但是只适合特定的机器,所以可移植性差。

对高级语言源程序进行编译或解释过程中需进行语法分析,递归子程序分析属于( )的分析法。
A. 自上而下
B. 自下而上
C. 从左至右
D. 从右至左

正确答案是 A。
解析
递归子程序法是一种确定的自顶向下语法分析方法,所有从递归两字可以知道,是从上到下的分析方式。

已知文法G:S→A0IB1,A→S1I1,B→S0I0,其中S是开始符号。从S出发可以推导出( )。
A. 所有由0构成的字符串
B. 所有由1构成的字符串
C. 某些0和1个数相等的字符串
D. 所有0和1个数不同的字符串

正确答案是 C。
解析
对于文法可推导出的字符串分析,考试一般可对文法举例,然后总结规律。
以本题文法为例,可以产生的字符串包括:
(1) 10
推导过程:S→A0;A→1。
(2) 01
推导过程:S→B1;B→0。
(3)1010
推导过程:S→A0;A→S1;S→A0,A→1。
至此,可以了解到,选项A、B、D的描述都是不正确的。

下图所示为一个非确定有限自动机(NFA),S0为初态,S3为终态。该NFA识别的字符串( )。
在这里插入图片描述

A. 不能包含连续的字符“0”
B. 不能包含连续的字符“1”
C. 必须以“101”开头
D. 必须以“101”结尾

正确答案是 D。
解析
本题考查NFA有限自动机相关问题。
针对这类问题,可以采取找出对应反例的形式表示。S0是初态,S3是终态,识别出从S0为初态到S3为终态的路径。
可以看到无论如何到达S3终态都需要经过S1-S2,即末尾必须存在”101“结尾的。D选项正确。
对于A和B选项不能包含连续字符的”0“和“1”,我们可
以看到在S0初态中,有1个字符串0和1自循环,是可以包含连续的”0“和”1“的,所以错误。
对于C选项必须以“101”开头,说法错误,可以任意10
的字符开头。综上所述,答案选D。

对高级程序语言进行编译的过程中,使用( )来记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。
A. 决策表
B. 符号表
C. 广义表
D. 索引表

正确答案是 B。
解析
考查分析语义分析阶段相关问题。
语义分析阶段主要是分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息提供给代码生成阶段使用。在确认源程序的语法和语义后,可以对其进行翻译并给出源程序的内部表示。对于声明语句,需要记录所遇到的符号的信息,所以应该进行符号表的填查工作,用来记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。B选项正确。
至于决策表是用于测试的,广义表是针对数据结构的表示,索引表是数据库中指示逻辑和物理记录对应的关系。A、C、D选项错误。
综上所述,答案选B。

以下关于下图所示有限自动机的叙述中,不正确的是( )。
在这里插入图片描述

A. 该自动机识别的字符串中a不能连续出现
B. 自动机识别的字符串中b不能连续出现
C. 该自动机识别的非空字符串必须以a结尾
D. 该自动机识别的字符串可以为空串

正确答案是 A。
解析
1既是初态也是终态,从图中可以看出a能连续出现,保持在状态1。

下图所示有限自动机(DFA)是( )。
在这里插入图片描述

A. 确定的有限自动机,它能识别以bab结尾的
B. 确定的有限自动机,他不能识别以bab结尾的
C. 非确定的有限自动机,他能识别以bab结尾的
D. 非确定的有限自动机,他不能识别以bab结尾的

正确答案是 D。
解析
根据有限自动机判断,从初始状态开始,接收字符a可能会保持原状态不变,也可能会转入下一个状态,是不确定的,所以是不确定的有限自动机。其次该自动机识别倒数第3个字符只有a,所以无法识别bab结尾的字符串,选择D选项。

用C/C++语言为某个应用编写的程序,经过( )后形成可执行程序。
A. 预处理、编译、汇编、链接
B. 编译、预处理、汇编、链接
C. 汇编、预处理、链接、编译
D. 链接、预处理、编译、汇编

正确答案是 A。
解析
本题考查汇编语言的执行过程。
对于编译型语言,处理过程为:预处理-编译-汇编-链接。
故正确答案选择A选项。

程序设计语言的大多数语法现象可以用CFG(上下文无关文法)表示。下面的CFG产生式集用于描述简单算术表达式,其中+、-、表示加、减、乘运算,id表示单个字母表示的变量,那么符合该文法的表达式为( )。
P:E→E+TIE-TIT
T→T
FIF
F→-Flid
A. a±b-c
B. a*(b+c)
C. a*-b+2
D. -a/b+c

正确答案是 A。
解析
本题考查文法推导树相关知识。
根据本题的语法推导式,可以发现,这里没有终结符"(“、”)“、”/“,因此选项B和D错误。
id表示单个字母表示的变量不能表示数字2,所以这里无法识别字符2,C选项错误。
也可以进行推导,在推导的过程中,会发现”*“只能通过T推导,此时必定经过了E+T或E-T,不可能出现数字2。因此C错误。
只有A能够被推导,推导过程如下:
(1)通过E→E-T,从起始符E得到E-T;
(2)通过E→E+T,将上面的E展开为E+T,得到E+T-T;
(3)通过E→T→F→id→单个字母a;
(4)通过T→F→-F→-id→单个字母-b;
(5)通过T→F→id→单个字母c。
综上,可以从起始符E得到a±b-c,即为A选项。

以编译方式翻译C/C++源程序的过程中,( )阶段的主要任务是对各条语句的结构进行合法性分析。
A. 词法分析
B. 语义分析
C. 语法分析
D. 目标代码生成

正确答案是 C。
解析
本题考查程序语言基础知识。
词法分析阶段依据语言的词法规则,对源程序进行逐个字符地扫描,从中识别出一个个“单词”符号,主要是针对词汇的检查。
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。语法规则就是各类语法单位的构成规则,主要是针对结构的检查。
语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要是针对句子含义的检查。目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。
本题描述的是语法分析。

在以阶段划分的编译器中,( )阶段的主要作用是分析程序中的句子结构是否正确。
A. 词法分析
B. 语法分析
C. 语义分析
D. 代码生成

正确答案是 B。
解析
本题考查程序语言基础知识。
词法分析:从左到右逐个扫描源程序中的字符,识别其中如关键字(或称保留字)、标识符、常数、运算符以及分隔符(标点符号和括号)等。
语法分析:根据语法规则将单词符号分解成各类语法单位,并分析源程序是否存在语法上的错误。包括:语言结构出错、if…end if不匹配,缺少分号、括号不匹配、表达式缺少操作数等。本题属于语法分析阶段的作用。
语义分析:进行类型分析和检查,主要检测源程序是否存在静态语义错误。包括:运算符和运算类型不符合,如取余时用浮点数。
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。

在以阶段划分的编译器中,( )阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。
A. 词法分析
B. 语法分析
C. 语义分析
D. 代码生成

正确答案是 A。
解析
本题考查程序语言基础知识。
在词法分析阶段,其任务是从左到右逐个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符组合在一起才表示某一含义。词法分析过程依据的是语言的词法规则,即描述“单词”分析构成程序的字符
及由字符按照构造规则构成的符号是否符合程序语言的规定”是对单词的检查。
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。语法规则就是各类语法单位的构成规则。
语义分析阶段分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。
中间代码生成是产生中间代码的过程。它的复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。

下图所示为一个不确定有限自动机(NFA)的状态转换图。该NFA可识别字符串( )。
在这里插入图片描述

A. 0110
B. 0101
C. 1100
D. 1010

正确答案是 A。
解析
本题考查程序语言基础知识。
因为是不确定的有限自动机,中间内容有多种可能,但由图可以看到,从初态0开始,首字符只能为0,到终态结束之前,尾字符也只能为0,只有A选项满足首字符和尾字符都为0。
BCD不符合。本题选A。

下图所示为一个不确定有限自动机(NFA)的状态转换图,与该NFA等价的DFA是( )。
在这里插入图片描述

在这里插入图片描述

正确答案是 C。
解析
本题考查程序语言-自动机相关知识。
本题可以直接以实例方式排除错误选项。本题给出的NFA,能够识别字符串000,010等,以这两个字符串为例进行分析。
与之等价的DFA,也必须能够识别这样的串。A选项不能识别000,B选项不能识别010,D选项不能识别010。只有C选项能够同时识别这2个串,因此本题选择C选项。

将编译器的工作过程划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成时,语法分析阶段的输入是(1)。若程序中的括号不配对,则会在(2)阶段检查出该错误。
题目(1)
A. 记号流
B. 字符流
C. 源程序
D. 分析树
题目(2)
A. 词法分析
B. 语法分析
C. 语义分析
D. 目标代码生成

正确答案是 A B。
解析
本题考查程序语言基础知识。
A选项记号流,词法分析的输出是记号流,也就是语法分析的输入,第一空选择A选项。
B选项字符流,在Java中,根据处理的数据单位不同,分为字节流和字符流。字符流是由字符组成的,例如File Reader、File Writer、Buffered Reader、Buffered Writer、 Input Stream Reader、 Output Stream Writer 等。与本题无关。
C选项源程序,词法分析的任务是把源程序的字符串转换成单词符号序列。
D选项分析树,如果没有语法错误,语法分析后就能正确的构造出其语法树。
括号不匹配是典型的语法错误,会在语法分析阶段检测出来。
词法分析器的任务就是读入源程序,对其进行一定的切分,得到记号流。
语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。
编译器需要将源代码转换为目标机器的指令集,这个过程叫作目标代码生成。

计算机执行程序时,内存分为静态数据区、代码区、栈区和堆区。其中(1)一般在进行函数调用和返回时由系统进行控制和管理,(2)由用户在程序中根据需要申请和释放。
题目(1)
A. 静态数据区
B. 代码区
C. 栈区
D. 堆区
题目(2)
A. 静态数据区
B. 代码区
C. 栈区
D. 堆区

正确答案是 C D。
解析
本题考查程序语言基础知识。
程序在不同的系统中运行时,虽然对其代码和数据所占用的内存空间会有不同的布局和安排,但是一般都包括正文段(包含代码和只读数据)、数据区、堆和栈等。例如,在Linux系统中进程的内存布局示意图如下图所示。
栈是局部变量以及每次函数调用时所需保存的信息的存储区域,其空间的分配和释放由操作系统进行管理。每次函数调用时,其返回地址以及调用者的环境信息(例如某些寄存器)都存放在栈中。然后,在栈中为新被调用的函数的自动和临时变量分配存储空间。栈空间向低地址方向增长。
堆是一块动态存储区域,由程序员在程序中进行分配和释放,若程序语句没有释放,则程序结束时由操作系统回收。堆空间地址的增长方向是从低地址向高地址。在C程序中,通过调用标准库函数malloc/calloc/realloc等向系统动态地申请堆存储空间来存储相应规模的数据,之后用free函数释放所申请到的存储空间。

某有限自动机的状态转换图如下图所示,与该自动机等价的正规式是( )。
在这里插入图片描述

A. (0∣1)*
B. (0∣10)*
C. 0*(10)*
D. 0*(1∣0)*

正确答案是 B。
解析
本题考查程序语言基础知识。
从题中的自动机可分析出,初态q0同时是终态,从q0到q0的弧(标记0)表明该自动机识别零个或多个0构成的串,路径q0→q1→ q0的循环表明“10”的多次重复,因此该自动机识别的字符串是“0∣10”的无穷多次,表示为(0∣10)*。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《王者荣耀》游戏玩法与部分机制分析

目录 游戏机制 MOBA核心玩法 匹配机制 游戏模式 隐藏分机制 游戏规则 总结 王者荣耀的ELO匹配机制是如何具体工作的? 王者荣耀中隐藏分机制的详细规则是什么?(难绷!) 王者荣耀边境突围和五军对决模式的具体玩…

解释:有序树是什么意思?

目录 有序树的特性: 例子: 总结 🌟 嗨,我是命运之光! 🌍 2024,每日百字,记录时光,感谢有你一路同行。 🚀 携手启航,探索未知,激发…

STM32基于HAL库使用串口+DMA 不定长接收数据 学习记录

我这些博客都只是记录一下自己学习的内容,以及记录一些思考过的问题和疑惑的东西 这里的代码借鉴了一位博主的博客 地址:[] 这里cubemx串口基础配置部分参考这一篇博客 (只配置了串口中断接收和printf重定向) 这一篇博客我们需要开…

C++编程:理解左值(lvalue)和右值(rvalue)

C 值的分类(Value Categories) 目录 1 概述 2 主要分类 1.1 左值(lvalue) 1.1.1 左值详情 1.1.2 左值属性 1.2 纯右值(prvalue) 1.2.1 纯右值详情 1.2.2 纯右值属性 1.3 将逝值(xvalue) 1.3.1 将逝值详情 1.3.2 将逝值属性 3 混合分类 3.1 泛型左值…

Day51 | 117. 软件构建(拓扑排序)47. 参加科学大会 dijkstra(朴素版)

语言 117. 软件构建 117. 软件构建 题目 题目描述 某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依赖于文件 B,则必须在处理…

【STM32】通用定时器TIM(时钟源选择与更新中断)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 通用定时器简介 定时器时钟使能 选择时基单元时钟源 内部时钟源 外部时钟源 时基单元初始化 更新中断使能 定时器使能 定时器中断代码 Timer.h Timer.c 获取计数值 TIM(Time…

【王树森】RNN模型与NLP应用(7/9):机器翻译与Seq2Seq模型(个人向笔记)

Machine Translation Data 做机器学习任务的第一步都是处理数据,我们首先需要准备机器翻译的数据。由于我们是学习用途,因此拿一个小规模数据集即可:http://www.manythings.org/anki/下面的数据集中:一个英语句子对应多个德语句子…

Spring MVC执行流程

整体流程: 用户向前端控制器发送请求前端控制器接收到请求后调用处理映射器处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器,再一起返回给前端控制器然后前端控制器调用处理器适配器处理器适配器调用具体的处理器处理器适配器…

element plus el-upload上传组件,自动上传,记录解决:本地报404,文件找不到问题

问题&#xff1a; 解决问题&#xff1a; 重点是&#xff1a;加入action"#"和:http-request"uploadHttpRequest" <el-uploadv-loading"isLoading"ref"upload"v-model"fileList":multiple"multiple"action&quo…

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(1)

前言中曾提到&#xff1a;本章重点介绍PCI Express总线的数据链路层与物理层。 PCIe总线的数据链路层处于事务层和物理层之间&#xff0c;主要功能是保证来自事务层的TLP在PCIe链路中的正确传递&#xff0c;为此数据链路层定义了一系列数据链路层报文&#xff0c;即DLLP。数据链…

AI实践与学习8-AI Agent Workflow助力解题和验证答案置信度

背景 之前在试着提高解题正确率&#xff0c;目标100%&#xff0c;发现外部知识不足仅依靠大模型的话比较困难。而试题人工生产成本巨大。 本质因为大模型生成内容会有幻觉特点&#xff0c;也就是说解答的试题正确性不太好评判&#xff0c;直接解答试题生产场景不太可控。 后…

市场纷乱中,沃尔沃坚守长期主义之道,用“P1+P4”解决用户痛点3A品质,插混王者——沃尔沃插混让性能成为插混必要条件

“造车就像西天取经&#xff0c;明确的方向、实现目标的能力&#xff0c;内心的坚持缺一不可”,本届成都国际车展上&#xff0c;来自沃尔沃汽车集团全球高级副总裁袁小林的一句话可谓是振聋发聩&#xff0c;向沉迷玩转“流量密码”的车企&#xff0c;向因各种噱头而迷茫的用户发…

RISC-V全志D1sCVBS套件

此开发板的任何问题都可以在我们的论坛交流讨论 https://forums.100ask.net/c/10-category/75-category/75 硬件简述 D1s主板 主板如下&#xff1a; D1s板载功能 板载功能有 XR829 WIFI蓝牙模组芯片&#xff0c;Bluetooth支持标准蓝牙与 低功耗蓝牙&#xff0c;Wifi 支持…

论被动元数据的弊端,以及主动元数据的技术优势

元数据是企业数据生态系统中不可或缺的组成部分&#xff0c;核心在于为数据本身提供完整的描述性信息&#xff0c;包括数据来源、数据结构、语义含义、物理位置、所有权归属、创建时间、流转路径等关键要素&#xff0c;是企业理解、开发、消费和应用数据的基石。 元数据管理&a…

毕设创新点之一:基于GD32/STM32的AI模型部署-github库

将AI模型成功部署到边缘MCU中&#xff0c;常常受限于MCU的计算峰值和内存峰值的限制&#xff0c;部署较为困难&#xff0c;目前有一个将AI算法MCU部署到GD32系列MCU中的宝藏的开源库。 项目网址&#xff1a;HomiKetalys/gd32ai-modelzoo: Provide deployable deep learning mo…

springweb获取请求数据、spring中拦截器

SpringWeb获取请求数据 springWeb支持多种类型的请求参数进行封装 1、使用HttpServletRequest对象接收 PostMapping(path "/login")//post请求//spring自动注入public String login(HttpServletRequest request){ System.out.println(request.getParameter("…

若依脚手架 创建一个系统 his医院信息管理系统

一、创建his-medicine模块 0) 在创建好的若依后端项目中创建一个maven模块his-medicine 1&#xff09;his模块的整合步骤 ①&#xff09;his的依赖 这个是若依项目所有系统模块都需要添加的依赖&#xff0c;domain和controller继承的类就在这里面。 <!-- 通用工具--><…

【位置编码】【Positional Encoding】直观理解位置编码!把位置编码想象成秒针!

【位置编码】【Positional Encoding】直观理解位置编码&#xff01;把位置编码想象成秒针&#xff01; 你们有没有好奇过为啥位置编码非得长成这样&#xff1a; P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i 1 ) c o s ( p o s 1000 …

基于yolov8的手势识别0-9检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的手势识别0-9检测系统是一个利用深度学习技术&#xff0c;特别是YOLOv8算法&#xff0c;实现对手势&#xff08;0至9的数字手势&#xff09;进行快速、准确识别的系统。YOLOv8以其高效的性能和准确性&#xff0c;在实时性要求较高的手势识别领域表现出…

ant-design-vue v-decorator用法

笔者一直在做后端&#xff0c;最近公司要求&#xff0c;帮助前端同时写一下前端页面。这里也记录下一些新学的知识&#xff0c;帮助大家避坑 在ant-design中&#xff0c;v-decorator可以实现双向绑定与表单验证。即如果你使用v-decorator 你可以不用使用v-model。 <a-form…