② 请给出该文法的终结符号集合 VT 和非终结符号集合 VN 。 ③ 找出句型 T+T*F+i 的所有短语、简单短语和句柄。
解:① 该文法的开始符号(识别符号)是E。 ②该文法的终结符号集合VT={+、-、*、/、(、)、i}。 非终结符号集合VN={E、T、F}。 ③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i; 简单短语为i、T*F、第一个T;句柄 为第一个T。
4. 构造正规式相应的 NFA : 1(0|1)*101
解1(0|1)*101对应的NFA为
5. 写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。
逆波兰表示: abc*+ab+/d-
三元式序列: ① (*,b,c) ② (+,a,①) ③ (+, a,b) ④ (/,②,③) ⑤ (-,④,d)
五.计算题(10分)
构造下述文法 G[S] 的自动机: S->A0 A->A0|S1|0
该自动机是确定的吗?若不确定,则对它确定化。
解:由于该文法的产生式S->A0,A->A0|S1中没有字符集VT的输入,所以不是确定的自 动机。 要将其他确定化,必须先用代入法得到它对应的正规式。把S?A0代入产生式A?S1 有:A=A0|A01|0=A(0|01)|0=0(0|01)*。 代入S->A0有该文法的正规式:0(0|01)*0,所以,改
写该文法为确定的自动机为:
由于状态A有3次输入0的重复输入,所以上图只是NFA,下面将它确定化: 下表由子集法将NFA转换为 DFA:
由上表可知DFA为:
《编译原理》模拟试题二
一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) 1.“ 用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行 ”这种说法。 (× )
2.若一个句型中出现了某产生式的右部,则此右部一定是该句型的句柄。(× )
3.一个句型的句柄一定是文法某产生式的右部。 (√)
4.在程序中标识符的出现仅为使用性的。 (× )
5.仅考虑一个基本块,不能确定一个赋值是否真是无用的。 (√ )
6.削减运算强度破坏了临时变量在一基本块内仅被定义一次的特性。 (√ )
7.在中间代码优化中循环上的优化主要有不变表达式外提和削减运算强度。 (× )
8.算符优先关系表不一定存在对应的优先函数。 (×)
9.数组元素的地址计算与数组的存储方式有关。 (×)
10.编译程序与具体的机器有关,与具体的语言无关。 (× )
二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共 40分)
1. 通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目 标代码生成等五个部分,还应包括_____。
A.( ) 模拟执行器 B.( ) 解释器
C.( ) 表格处理和出错处理 D.( ) 符号执行器
2. 文法 G[N]= ( {b} , {N , B} , N , {N→b│bB , B→bN} ),该文法所描述 的语言是
A.( ) L(G[N])={bi│i≥0} B.( ) L(G[N])={b2i│i≥0}
C.( ) L(G[N])={b2i+1│i≥0} D.( ) L(G[N])={b2i+1│i≥1}
3. 一个句型中的最左_____称为该句型的句柄。
A.( ) 短语 B.( ) 简单短语 C.( ) 素短语 D.( ) 终结符号
4. 设 G 是一个给定的文法, S 是文法的开始符号,如果 S->x( 其中 x∈V*), 则称 x 是 文法 G 的一个_____。
A.( ) 候选式 B.( ) 句型 C.( ) 单词 D.( ) 产生式
5. 文法 G[E] : E→T∣E + T T→F∣T ﹡ F F→a∣ ( E )
该文法句型 E + F ﹡ (E + T) 的简单短语是下列符号串中的_____。
① ( E + T ) ②E + T ③F ④ F ﹡ (E + T)
A.( ) ① 和 ③ B.( ) ② 和 ③ C.( ) ③ 和 ④ D.( ) ③
6. 若一个文法是递归的,则它所产生的语言的句子_____。
A.( ) 是无穷多个 B.( ) 是有穷多个 C.( ) 是可枚举的 D.( ) 个数是常量
7. 词法分析器用于识别_____。
A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式
8. 在语法分析处理中, FIRST 集合、 FOLLOW 集合、 SELECT 集合均是_____。
A. ( ) 非终极符集 B.( ) 终极符集 C.( ) 字母表 D. ( ) 状态集
9. 在自底向上的语法分析方法中,分析的关键是_____。
A.( ) 寻找句柄 B.( ) 寻找句型 C.( ) 消除递归 D.( ) 选择候选式
10. 在 LR 分析法中,分析栈中存放的状态是识别规范句型_____的 DFA 状态。
A.( )句柄 B.( ) 前缀 C.( )活前缀 D.( ) LR(0) 项目
三、填空题(每空1分,共10分)
1.设G是一个给定的文法,S是文法的开始符号,如果S->x( 其中 x∈VT*), 则称 x是文 法的一个__句子___。
2.递归下降法不允许任一非终极符是直接__左___递归的。
3.自顶向下的语法分析方法的基本思想是:从文法的__开始符号____开始,根据给定的输 入串并按照文法的产生式一步一步的向下进行__直接推导____,试图推导出文法的__句子 ____,使之与给定的输入串___匹配___。
4.自底向上的语法分析方法的基本思想是:从输入串入手,利用文法的产生式一步一步地 向上进行___直接归约__ ,力求归约到文法的__开始符号___。
5.常用的参数传递方式有___传地址__,传值和传名。
6.在使用高级语言编程时,首先可通过编译程序发现源程序的全部__语法___错误和语义部 分错误。
四、简答题(20分)
1. 已知文法 G[S] 为: S→dAB A→aA|a B→Bb|ε
G[S] 产生的语言是什么?
答:G[S]产生的语言是L(G[S])={danbm│n≥1,m≥0}。
2. 简述 DFA 与 NFA 有何区别 ?
答:DFA与NFA的区别表现为两个方面:一是NFA可以若干个开始状态,而DFA仅只一个 开始状态。 另一方面,DFA的映象M是从K×Σ到K,而NFA的映象M是从K×Σ到K的 子集, 即映象M将产生一个状态集合(可能为空集),而不是单个状态。
3. 构造正规式相应的 DFA : 1(1010 * | 1(010) * 1) * 0。
解:1(1010 * | 1(010) * 1) * 0对应的NFA为:
4. 已知文法G(S) S→a|∧|(T)
T→T,S|S