编译原理第4章测试卷

时间:2022-11-22 17:01:35 作者:壹号 字数:4002字

编译原理

2014—2015学年第二学期第四单元测试试卷

(闭卷考试) 时间:45分钟 满分:100分

姓名 班级 出题人 班级 软件12-4

题目 一 二 三 四 五 总分 得分 一、选择题(5*2分)(每题1分,共10分)

1. 下列文法中,_______是LL(1)文法。

A. S→aSb|ab B. S→ab|Sab C. S→aS|b D. S→aS|a

2. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于 分析法。

A. 自左至右 B. 自顶向下 C. 自底向上 D. 自右向左

3. 自上而下分析面临的四个问题中,不包括 。

A. 需消除左递归;B. 存在回朔;C. 虚假匹配;D. 寻找可归约串

4. 语法分析器接收以________为单位的输入,并产生有关信息供以后各阶段使用。

A. 表达式;B. 产生式; C 单词;D. 语句;

5. 自上而下分析的主旨是,对任何单词符号串,试图用一切可能的办法,从文法开始符号(根结点)出发,________。

A. 为输入串寻找最右推导; B. 为输入串寻找最左直接子树;

C. 为输入串建立最右直接子树;D. 为输入串寻找最左推导;

二、简答题(2*10分)(每题10分,共20分)

6. 词法分析和语法分析都是对字符串进行识别的,二者有何区别?

7. 为什么要消除回溯?

三、分析题(4题共70分)

8.设有文法G[S]:

S→AB A→bB|Aa B→Sb|a

试消除该文法的左递归。(15分)

9.已知文法G[E]:

G[E]:E→E+T|T

T→T*F|F F→i|(E)

请按递归子程序法为其构造语法分析程序。(20分)

10.文法G[M]是否是LL(1)文法,说明理由。(G[M]:M→TB

T→Ba|ε B→Db|eT|ε D→d|ε

15分)

11. 已知文法G[S]: S → uBDz B → Br | w D → EF E → y | ? F → x | ?

(1) 求每个非终结符的FIRST和Follow集。 (2) 构造这个文法的LL(1)分析表 (3) 说明这个文法不是LL(1)的;

(3) 尽可能少地修改此文法,使其成为能产生相同语言的LL(1)文法.(20分)

第四章答案

1-5

B D D C D

6. 答:词法分析的输入符号串是一个单词,而语法分析的输入符号串是一个句子。词法分析的一个输入符号串是由单个符号组成的单词;语法分析的输入符号串是由词法分析得来的单词组成的句子。

7. 假定当前轮到非终结符A去执行匹配任务,A共有n个候选?1、?2、???n,这时候该用哪一个候选去替换A,原始的办法是采用对所有候选采取“试探”的方法。如果某个候选不成功就需要“回退”。这个回退的过程会导致前次匹配的许多工作推到重来,效率低。而且,最终匹配不成功的时候,难以直到输入串中出错的确切位置。

8.解:本题考查消除左递归的方法。

应用消除文法左递归的算法对文法G[S]消除左递归的过程如下:

(1) 将非终结符排序为:U1=S,U2=A,U3=B (2) 进入算法排序:

i=1时,对文法无影响

i=2,j=1时:A→Aa有直接左递归,消去该直接左递归,得

A→bBA’ A’→aA’|ε

i=3,j=1时:改写文法,有

B→ABb|a

j=2时:改写文法,有 B→bBA’Bb|a无左递归。

(3) 所以文法G[S]消除左递归后变为:

G’[S]:S→AB

A→bBA’ A’→aA’|ε B→bBA’Bb|a

9.解:本题考查递归子程序的构造方法。

…… 此处隐藏0字 ……

本题所给文法存在左递归,不满足递归子程序法对文法的要求,必须首先消除文法左递归,然后再构造分析程序。

因为文法只有左递归,采用扩充的BNF范式消除文法左递归得到:

G[E]:E→T{+T}

T→F{*F} F→i|(E)

然后再应用书中介绍的方法即可求解。

假定用“ADVANCE;”表示对读取下一个单词的过程的调用。 相应的递归子程序为: PROCEDURE P(E); BEGIN P(T);

WHILE SYM=’+’ DO BEGIN