2.已知文法
AaAd|aAb|ε
分别构造LR(0)分析表和SLR(1)分析,并判断该文法是否是LR(0)文法,是否SLR(1)文法。
答案是:解:增加一个非终结符S/后,产生原文法的增广文法有:
S/A
AaAd|aAb|ε
下面构造它的LR(0)项目集规范族为:
a b d # A
I0:
S/•A
A•aAd
A•aAb
A• I2:
Aa•Ad
Aa•Ab
A•aAd
A•aAb
A• I1:
S/A•
I1:
S/A• acc
I2:
Aa•Ad
Aa•Ab
A•aAd
A•aAb
A• I2 I3:
AaA•d
AaA•b
I3:
AaA•d
AaA•b I4:
AaAb• I5:
AaAd•
I4:
AaAb•
I5:
AaAd•
从上表可看出,状态I0和I2存在移进-归约冲突,该文法不是LR(0)文法。
对于I0来说有
FOLLOW(A)∩{a}={b,d,#}∩{a}=Φ
所以在I0状态下面临输入符号为a时移进,为b,d,#时归约,为其他时报错。
对于I2来说有也有与I0完全相同的结论。
这就是说,以上的移进-归约冲突是可以解决的,因此该文法是SLR(1)文法。其他SLR(1)分析表为:
下面构造它的SLR(1)项目集规范族为:
文法的SLR(1)分析表
状态 ACTION GOTO
a b d # A
0 S2 r1 r2 r3 1
1 acc
2 S2 r1 r2 r3 3
3 S4 S5
4 r2 r2 r2 r2
5 r1 r1 r1 r1
对文法G[S]
Sa|∧|(T)
TT,S|S
(1)对文法G进行改写消去左递归,然后对每个非终结符写出不带回溯的递归子程序。
(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。
答案是:解:(1)由于有TT,S的产生式,所以消除该产生式的左递归,有新的文法G/[S]:
Sa|∧|(T)
TSU
U,SU|ε
(2)判断文法G/[S]是否为LL(1)文法。
各非终结符的FIRST集合如下:
FIRST(S)={a,∧,(}
FIRST(T)=FIRST(S)={a,∧,(}
FIRST(U)={,,ε}
各非终结符的FOLLOW集合如下:
FOLLOW(S)={#} ∪ FIRST(U) ∪ FOLLOW(T) ∪ FOLLOW(U)={#,,,)}
FOLLOW(T)={)}
FOLLOW(U)=FOLLOW(T)={)}
每个产生式的SELECT集合如下:
SELECT(Sa)={a}
SELECT(S∧)={∧}
SELECT(S(T))={(}
SELECT(TSU)=FIRST(S)={a,∧,(}
SELECT(U,SU)={,}
SELECT(Uε)=FOLLOW(U)={)}
可见,相同左部产生式的SELECT集的交集均为空,所以文法G/[S]是LL(1)文法。
文法G/[S]的预测分析表如下:
a ∧ ( ) , #
S a ∧ (T)
T SU SU SU
U ε ,SU
程序的执行方式主要有哪几种?请各举1例。
答案是:答:解释执行,如:Basic;
编译执行,如:C;
混合型,如:JAVA。
将下面的算术表达式翻译成四元式。
答案是:2+(3+(4+5))
(+,4,5,t1)
(+,3,t1,t2)
(+,2,t2,t3)
已知表达式文法G(E):
E → E+T|T
T → T*F | F
F → (E) | i
试设计属性文法计算表达式的值。(设值属性为val,i在词法分析的值存在其lexval属性中)
答案是:解:
语法规则 语义规则
E → E1+T E.val=E1.val+T.val
E → T E.val=T.val
T → T1*F T.val=T1.val+F.val
T → F T.val=F.val
F → (E) F.val=E.val
F → i F.val=i.lexval
编译程序的工作一般分为五个阶段:
答案是:(1)词法分析:对源程序字符流进行扫描和分解,识别出一个个单词符号。
(2)语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
(3)语义分析和中间代码产生:检查源程序的语义错误(如:变量是否定义、类型是否正确等),并收集代码生成阶段要用到的类型信息。对各类不同语法范畴按语言的语义进行初步翻译。
(4)优化:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
(5)目标代码产生:把中间代码变换成特定机器上的目标代码。
标识符的正则表达式为 。
答案是:letter(letter|digit)*
表达式-a+b*(c-d)对应的逆波兰式是 。
答案是:a-bcd*+
写出你所了解的两种中间语言表达: 和 。
答案是:三地址码
是编程语言结构的任意特性。其典型例子有:变量的数据类型和表达式的值。
答案是:属性
LR(0)文法不一定是SLR(1)文法。
答案是:对
. LL(1)文法都不是二义性的。
答案是:对
LEX是用来生成词法分析程序的程序。
答案是:对
可识别语言的一个上下文无关文法G(S):S->aSc|ε
答案是:错
简单算术表达式文法中值是继承属性。
答案是:错
连接编译器的前端和后端的接口是: ( )
A.TINY语言 B. 中间语言 C.上下文无关语言 D. 中间语言
答案是:B
高级语言编译程序常用的语法分析方法中,递归下降分析法属于_____ 分析方法。
可选项有;
A. 自左至右 B.自上而下 C.自下而上 D.自右向左
答案是:B
正则式的“|”读作______。
A.并且 B或者 C.连接 D.闭包
8、E->TE.
E.->+TE.|ε
T->FT.
T.->*FT.|ε
F-> (E)|id
FOLLOW(F)=______,FI
答案是:B
.在状态转换图中,结点代表____,用圆圈表示。
A.输入缓冲区 B.向前搜索 C.状态 D.字符串
答案是:C
一个句型的最左直接短语称为该句型的_______。
A.句型 B.短语 C.简单短语 D.句柄
答案是:D
设有文法G[S]:S::=S*S|S+S|(S)|a,该文法_______二义性文法。
A.是 B.不是 C.无法判断 D.可能
答案是:A
字母表是 {0, 1},写出以01 结尾的所有串的正规式是( )。
A. (0|1)*01 B.0*1*01 C.1*0*01 D. (01)*
答案是:A
一个语言的文法是_____。
A.惟一的 B.不惟一的 C.个数有限的
答案是:B
在使用高级语言编程时,首先可通过编译程序发现源程序的全部______错误和部分语义错误。
A.语法 B.语义 C. 语用 D.运行
答案是:A
规范归约是最 归约。
答案是:左
x+y>3可依次翻译成四元式( )和( )。
答案是:(+, x, y, t1) (>, t1, 3, t2)
. 自下而上语法分析方法的基本思想是:从 出发,不断进行 ,最终得到文法的开始符号。
答案是:输入串 归约
文法S->ibtSeS|ibtS|a不是二义性文法。
答案是:错
三地址码和DAG都是中间代码。
答案是:对
编译器所生成的目标代码都是直接可以在硬件上运行的机器语言。
答案是:错
在带进制数文法中,值属性val是继承属性。
答案是:错
可以描述一个语言的文法不是唯一的。
答案是:对
LL(1)分析中“移进-归约”中使用( )完成分析。
A.哈希表 B. 队列 C. 线性表 D. 显式栈
答案是:D
以下四个LR(0)项目中( )是一个移进项目。(A,B,S’是非终结符,S’是文法的开始符号,b是终结符)
A. S’α• B. Aα• C. Aα•bβ D. Aα•Bβ
答案是:C
表达式-a+b*(-c+d)的逆波兰式是( )。
A. ab+-cd+-* B. a-b+c-d*+ C.a-b+c-d+* D.a-bc-d+*+
答案是:D
把可重定位代码变成可执行代码的工作是由( )完成的。
A. 编译器 B. 预处理器 C.装配/连接器 D. 汇编器
答案是:C
综合属性的依赖关系在语法树表现为( )。
A. 从父节点向子节点 B. 从子节点向父节点
C.从左兄弟指向右兄弟 D. 从右兄弟指向左兄弟
答案是:B
以下说法中正确的是( )。
A.不是每个正则表达式e都有等价的NFA M,满足L(e)= L(M)。
B.对于任何一个NFA M,都存在一个DFA M’,满足L(M)= L(M’)。
C.DFA的弧上标记只含输入字母表中的
答案是:B
. LR(0)文法的充要条件是( )。
A. 对应的LR(0)项目DFA中每个项目都没有移进-归约冲突;
B. 对应的LR(0)项目DFA中每个项目都没有归约-归约冲突;
C.A和B
D.都不是
答案是:C
下面文法生成的语言是:( )
stmt-seq → stmt ; s t m t - s e q | s t m t
stmt → s
A.L(G) = { s, s;s, s;s;s, ...} B.L(G
答案是:A
文法AaB
Bb属于乔姆斯基层次的( )文法。
A.上下文有关 B. 上下文无关 C.正则 D.0型
答案是:C
编译器的( )阶段将记号流转换成语法树。
A. 语法分析 B. 语义分析 C. 代码生成 D. 词法分析
答案是:A
试将布尔表达式a
答案是:100: if a
.令文法G为:
ND| ND
D0|1|…|9
(1) 该文法的语言是什么?(2) 给出句子456的最左推导。
答案是:答:(1)该文法生成的语言是正整数。
(2)N=>ND=>NDD=>DDD=>4DD=>45D=>456
(10分)已知文法
E→(L)|a
L→L,E|E
1)构造该文法的LR(0)项目DFA;
2)构造其SLR(1)分析表,并判断该文法是否SLR(1)文法。
答案是:解:
(1)为这个文法构造LR(0)项目的DFA.
其扩充文法为:
E’→E
E→(L)|a
L→L,E|E
改文法LR(0)项的DFA是:
(2)构造SLR(1)分析表
First(E’)={ (,a ); Follow(E’)={ $ };
First(E)={ (,a ); Follow(E)={ $,),’,’ };
First(L)={ (,a ); Follow(L)={ ),’,’ };
则SLR(1)分析表如下:
状态 输入 GOTO
( ) , a $ E L
0 S2 S4 1
1 接受
2 S2 S4 8 3
3 S5 S6
4 R(E→a) R(E→a) R(E→a)
5 R(E→(L)) R(E→(L)) R(E→(L))
6 S2 S4 7
7 R(L→L,E) R(L→L,E)
8 R(L→E) R(L→E)
由于每个表项最多只有一个动作,所以该文法是SLR(1)文法。
(1)画出字符串abc的相关依赖图;
(2)假设S.u的初始值为5,属性计算完成后,S.v的值为多少?
答案是:答:a .语法树与相关图为:
属性等式的序列为:①③④①②①
b .等式完成后,S.v的值为18
1.(10分)计算文法G(E)的每个非终结符的FIRST和FOLLOW集合,并判断该文法是否是LL(1)的,请说明理由。
答案是:G(E):
E → E+T|T
T → T*F | F
F → (E) | i
FIRST(E)= FIRST(T) = FIRST(F)={(,i}
FOLLOW(E)={#,+, )}
FOLLOW(T)={#,+, ),*}
FOLLOW(F)={#,+, ),*}
因为FIRST(E+T)∩ FIRST(E+T)={ (,i }≠Φ,所以该文法不是LL(1)文法。
1.简述前端和后端,并说明为什么要区分前端和后端。
答案是:答:编译前端:与源语言有关,如词法分析,语法分析,语义分析与中间代码产生,与机器无关的优化。
编译后端:与目标机有关,与目标机有关的优化,目标代码产生。
区分前端和后端的目的是为了减少对内存容量的要求,使程序逻辑结构清晰; 优化更充分,有利于移植。
表达式a-b*(c+d)对应的逆波兰式是 。
答案是:abcd+*-
程序设计语言中名字的作用域一般遵循 的原则,即若有多个同名定义,该名字的引用应对应于与其引用最近的那个声明。
答案是:最近嵌套
自上而下语法分析方法的基本思想是:从文法的 出发,不断进行 ,最终得到输入串。
答案是:开始符号, 推导
若文法G的某个句子存在两棵以上的语法树,则称该文法是 文法。
答案是:二义性
存在这样的语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 ( )
答案是:错
三元式和四元式都是三地址码的实现形式。
答案是:对
在构造递归下降伪代码时,将非终结符A翻译为一个匹配过程match(A)
答案是:错
在类型声明文法中,类型属性type是继承属性。
答案是:对
一个LR(0)文法一定是SLR(1)文法。
答案是:对
文法A->aAb|ab生成的语言是( )。
A. {ab} B.{aAb} C. {anbn|n≥1} D.{anbn|n≥0}
答案是:C
编译程序中的语义分析器接受以( )为单位的输入,并产生信息供以后各阶段使用。
A. 语法树 B.子程序 C.单词 D.语句
答案是:A
正则式的“*”读作( )。
A. 并且 B.连接 C.正则闭包 D.闭包
答案是:D
乔姆斯基的2型文法是这样一种语言,其产生式限制为( )。
A. α->β B. P->β C. P->a或P->aβ D. αPγ->αβγ
答案是:B
合成属性的计算可以通过对语法树进行( )遍历进行。
A. 前序 B.中序 C.后序 D.任意
答案是:C
以下说法中正确的是( )。
A.任何语言都可以描述为一个正则表达式。
B.对于任何一个NFA M,都存在一个DFA M’,满足L(M)= L(M’)。
C.任何一个DFA只有一个终态。
D.NFA的弧上标记只含输入字母表
答案是:B
LL(1)文法的充要条件是( )。
A.对于文法中的每条产生式Uα1|α2|…|αn,要求FIRST(αi)∩FIRST(αj)=Φ(i≠j)
B.该文法对应的LL(1)分析表中每个项目最多只有一条产生式。
C.A和B
D.都不
答案是:B
某C语言源代码文件包含#include ,( )将对源代码进行处理,把文件stdio.h包含进去。
A.编译器 B.解释器 C.汇编器 D.预处理器
答案是:D
文法AaA | b属于正则文法,正则文法在乔姆斯基层次中对应于( )文法。
A. 1型 B. 2型 C. 3型 D. 0型
答案是:C
编译器的( )阶段可将源程序的字符流收集到若干记号中。
A. 语法分析 B. 语义分析 C. 代码生成 D. 词法分析
答案是:D
容错软件实现容错的一般方法有哪些?
答案是:(1)结构冗余
(2)信息冗余
(3)时间冗余
(4)冗余附加技术
UML的视图主要包括哪几种?
答案是:(1)用例视图
(2)逻辑视图
(3)并发视图
(4)组件视图
(5)部署视图
、为什么软件需要维护?简述软件维护的工作过程。
答案是:在软件开发完成交付用户使用后,为了保证软件在一个相当长的时期能够正常运行,就需要对软件进行维护。 软件维护的过程:
(1) 确认维护要求。
(2) 对于改正性维护申请,评价错误的严重性。对于严重的错误,立即安排人员,分析问题原因,进行"救火"性的紧急维护;对于不严重的错误,根据任务情况和轻重缓急进行统一安排; 对于适应性和完善性维护申请,需要确定申请的优先级,然后安排维护工作。并不是所有的完善性维护申请都必须承担,需要考虑商业需要、现有资源、未来发展方向等进行决定。
什么是计算机软件?
答案是:软件是计算机系统中与硬件相互依存的另一个部分,它是由程序、数据及其相关文档组成的完整集合。可以理解为:软件=程序+数据+文档。
、软件需求是指用户对目标软件系统在功能、性能、行为、设计约束等方面的期望
答案是:对
通过软件测试,可以发现软件中所有潜伏的错误
答案是:错
测试计划、测试用例、出错统计和有关的分析报告一般不用长期保存
答案是:错
当软件开发项目的进度有可能拖延时,可通过增加开发人员来加快进度。
答案是:错
好的测试用例应能证明软件是正确的。
答案是:错
模型是对现实的简化,建模是为了更好地理解所开发的系统
答案是:对
在需求分析中,分析员要从用户那里解决的最重要的问题是明确软件做什么。
答案是:对
在软件开发的过程中,若能推迟暴露其中的错误,则为修复和改正错误所花费的代价就会降低。
答案是:错
缺乏处理大型软件项目的经验。是产生软件危机的唯一原因
答案是:错
目前,软件项目的进度安排比较常用的方法包括程序评估与审查技术(PERT)和关键路径法(CPM)
答案是:对
在进行软件规模估算时,与代码行度量方式相比, 的估算结果更客观和合理。
答案是:功能点度量
自行车类与自行车车轮类之间是 关系。
答案是:聚集
UML的基本构造块包含:视图、图和 。
答案是:模型元素
在进行结构化分析时,对数据流图进行分层应注意父图和子图 。
答案是:平衡
任何复杂的程序流程图都只应该由5种基本控制结构组合或嵌套而成,这5中基本结构分别是顺序型、选择型、先判定型循环、 、多情况型选择。
答案是:后判定型循环
UML的扩展机制不包括()。
A) 构造型
B) 标记值
C) 注解
D) 约束
答案是:C
CMM提供了一个框架,将软件过程改进的进化步骤组织成5个成熟度等级。除第1级外,每一级都包含了实现这一级目标的若干关键过程域,每一个关键过程域又包含若干()。
A 关键实践
B 软件过程性能
C 软件过程能力
D 软
答案是:A
下列耦合中,模块独立性最好的是()。
A) 非直接耦合
B) 数据耦合
C) 外部耦合
D) 内容耦合
答案是:A
一个模块的()是指能直接调用(控制)该模块的模块数。
A. 扇出数
B. 扇入数
C. 宽度
D. 深度
答案是:B
下列不属于UML中的动态图的是()。
A) 状态图
B) 对象图
C) 协作图
D) 活动图
答案是:B
软件的发展经历了()个发展阶段。
A. 一
B. 二
C. 三
D. 四
答案是:D
4、下列不属于软件工程方法3要素的是()。
A) 方法
B) 工具
C) 过程
D) 人员
答案是:D
为适应软件运行环境的变化而修改软件的活动称为。
A. 纠错性维护
B. 适应性维护
C. 改善性维护
D. 预防性维护
答案是:(B)
当模块中包含复杂的条件组合,只有(能够清晰地表达出各种动作之间的对应关系。
A. 判定表和判定树
B. 盒图
C. 流程图
D. 关系图
答案是:A)
需求分析的任务不包括()。
A. 问题分析
B. 系统设计
C. 需求描述
D. 需求评审。
答案是:B
什么是条件覆盖?并为以下程序流程图设计条件覆盖测试用例并标明程序执行路径。
答案是:解:1)条件覆盖——条件覆盖是指设计足够的测试用例,使程序中每个判定表达式中的每个条件的每种可能值都至少执行一次。
设计如下两组测试用例,可以满足条件覆盖的标准:
x=2,y=0,z=3
(覆盖x>1,y=0,x=2,z>1,(T1, T2, T3, T4),通过路径abcde);
x=1,y=1,z=1
(覆盖x≤1,y≠0,x≠2,z≤1,(~T1, ~T2, ~T3, ~T4),通过路径ace)。
UML关系包括关联、聚合、泛化、实现、依赖等5种类型,请将合适的关系填写在下列描述的( )中。
答案是:(1) 在学校中,一个导师可以指导多个研究生,一个研究生可以由多个导师指导,那么导师和研究生之间是( )关系。
(2) 交通工具与卡车之间是( )关系。
(3) 公司与部门之间是( )关系。
(4) 图形与矩形之间是( )关系。
(5) 参数类及其实例类之间是( )关系。
(1)关联 (2)泛化 (3) 聚合 (4) 泛化 (5) 实现
软件工程的目标是什么?
答案是:软件工程的目标概括来说是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。
、什么叫软件生存周期?
答案是:软件产品从问题定义开始,经过开发、使用和维护,直到最终退役的全过程称为软件生存周期。概括来说,软件生产存周期由软件定义、软件开发和运行维护3个时期组成,每个时期又可进一步划分成若干个阶段。
IPO图是输入/过程/输出图的简称。
答案是:错
、在软件测试时,常把黑盒法和白盒法结合起来进行,成为灰盒法。
答案是:(对
系统规格说明是系统分析和定义阶段生成的一种文档。
答案是:(对)
内聚度标志一个模块内部各成分彼此结合的紧密程度,按其高低程度可分为七级,内聚度越低越好。
答案是:(错)
如果测试过程没有发现任何错误,则说明软件没有错误。
答案是:(错
类是对具有共同特征的对象的进一步抽象
答案是:(对)
为了充分发挥开发人员的潜力、缩短工期,软件工程项目的任务分解与安排应尽力挖掘可并行开发的部分
答案是:对)
只有质量差的软件产品才需要维护
答案是:错
一个成功的项目唯一提交的就是运行程序
答案是:(错)
软件错误可能出现在开发过程的早期,越早修改越好。
答案是:(对)
由于运用快速原型的目的和方式不同,可以将原型分为 和演化型。
答案是:废弃型
度量模块独立性的两个指标分别是:模块与模块之间的耦合性和模块内部的 。
答案是:内聚性
在面向对象技术中, 通常用来描述客观世界中某个具体的实体
答案是:对象
在结构化分析方法中,可以采用 来建立数据模型。
答案是:实体关系(ER)图
一个模块的 是指该模块直接控制的其他模块数。
答案是:扇出数
下列模块不属于系统结构图中的基本模块的是()。
A) 传入模块
B) 传出模块
C) 变换模块
D) 事务模块
答案是:D
下列符号不属于Warnier图的是()。
A) {
B) ()
C) ⊕
D) +
答案是:D
将软件组装成系统的一种测试技术叫(。
A. 集成测试
B. 单元测试
C. 集合测试
D. 系统测试
答案是:A)
判定表由四部分组成:左上部列出()。
A. 条件组合与动作之间的对应关系
B. 所有条件
C. 所有可能的动作
D. 可能的条件组合
答案是:B
在结构化分析方法中,()是表达系统内部数据运动的图形化技术。
A 数据字典
B 实体关系图
C 数据流图
D 状态转换图
答案是:C
目前为:
1/3
页
首页 上页 下页 尾页