编译原理(A卷)答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖北第二师范学院2014-2015学年度第二学期
《编译原理》课程考试答案(A卷) 院系:计算机学院专业班级:
学生姓名:学号:
考试方式:闭卷………………………………………………………………………………………………………………
一、填空题(每空1分,共10分)
1.词法分析程序是逐个识别(字符),形成单词级别的(字符)串,词法分析程序输出
的数据是(2 )个,它们分别是(种别编码
)和(自身值)。

2.语法分析程序是逐个识别(单词),形成语句级别的(单词)串。

3.一遍扫描的编译方法,是以语法分析程序为主,调用(词法分析)程序、语义分析程序,再由语义程序调用中间代码生成、中间代码优化等。

4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。

二、综合题(共90分)
1.(5分)将下面文法改写成3型文法:
G=({S,A,B},{a,b,c,d,e},P,S)
其中:P={S→abcA|edB,A→beB,B→d}
答案:改写后的3型文法是(5分)
G=({S,A,B,C,D,E,F},{a,b,c,d,e},P,S)
其中:P={S→aC|eF, C→bD,D→cA,A→bE,E→eB,F→dB,B→d}
2.(5分)给出下面表达式的四元式形式:
a*b+(c-d)/e
答案:四元式形式(5分)
(*,a,b,t1)
(-,c,d,t2)
(/,t2,e,t3)
(+,t1,t3,t4)
3.(30分)给定文法 G[E] :
E → E+T | E-T | T
T → T*F | T/F | F
F → (E) | i
该文法是 LL(1) 文法吗?为什么?不是的能否改造为LL(1)文法,如果能够改造,给出改造后的文法,并给出改造后文法是LL(1)文法的证明过程。

无论改造前还是改造后的文法,如果是LL(1)文法,则给出(i+i)*i的分析过程(要求给出详细过程,并给出LL(1)的分析表)答案:(1)该文法不是LL(1)文法,因为文法的产生式含有左递归(2分)(2)该文法可改造为LL(1)文法,即消除左递归,改造后的文法是(3分)
E → TE’
E’→ +TE’ | -TE’ | ε
T → FT’
T’→ *FT’ | /FT’ |ε
F → (E) | i
证明改造后的文法是LL(1)文法的过程
A.求可达ε的非终结符(1分)
可达的是E’,T’
B.求每个非终结符的First集合(3分)
First(E)={ (,i}
First(E’)={+,-}
First(T)={ (,i}
First(T’)={*,/}
First(F)={ (,i}
C.求每个产生式右部字符串的First集合(3分)
First(TE’)={ (,i}
First(+TE’)={+}
First(-TE’)={-}
First(FT’)={ (,i}
First(*FT’)={*}
First(/FT’)={/}
First((E))={ ( }
First(i)={ i }
First(ε)={ ε}
D.求每个非终结符的Follow集合(3分)
Follow(E)={$,)}
Follow(E’)= Follow(E)={$,)}
Follow(T)=First(E’) ∪ Follow(E)={$,+,-,)}
Follow(T’)= Follow(T)={$,+,-,)}
Follow(F)= First(T’) ∪ Follow(T)={$,+,-, *,/,)}
E.求每个非终结符的Select集合(5分)
Select(E → TE’)=First(TE’)={ (,i }
Select(E’→ +TE’)=First(+TE’)={ + }
Select(E’→ -TE’)=First(-TE’)={ - }
Select(E’→ε)=First(ε)-{ ε} ∪ Follow(E’)={ $,) }
Select(T → FT’)=First(FT’)={ (,i }
Select(T’→ *FT’)=First(*FT’)={ * }
Select(T’→ /FT’)=First(/FT’)={ / }
Select(T’→ε)=First(ε)-{ ε} ∪ Follow(T’)={ $,+,-,) }
Select(F → (E))=First((E))={ ( }
Select(F → i)=First(TE’)={ i }
F.求有多个产生式的非终结符Select集合的交集(2分)
显然有
Select(E’→ +TE’)∩Select(E’→ -TE’) ∩Select(E’→ε)=ΦSelect(T’→ *FT’) ∩Select(T’→ /FT’) ∩Select(T’→ε)= ΦSelect(F → (E))= ∩Select(F → i)= Φ
所以改造后的文法是LL(1)文法
4.(10分)对下面的NFA进行确定化
答题:第1
第2
5.(15分)给定文法 G[E] :
E → E+T | E-T | T
T → T*F | T/F | F
该文法是算符优先文法吗?是,则构造该文法的算符优先关系矩阵,并给出(i+i)*i的分析过程(要求给出详细过程)
答案:(1)该文法是算符优先文法(1分)
(2)构造该文法的算符优先矩阵
A.求各非终结符的FirstVT集合(3分)
FirstVT(E)={+,-,*,/,(,i}
FirstVT(T)={*,/,(,i}
FirstVT(F)={(,i}
B.求各非终结符的LasttVT集合(3分)
LastVT(E)={ +,-,*,/,),i }
LastVT(T)={ *,/,),i }
LastVT(F)={ ),i }
C.构造优先关系表(4分)
6.(25分)给定文法 G[E] :
T → T*F | F
F → (E) | i
该文法是LR(0)文法吗?是,则构造该文法的LR(0)分析表,并给出(i+i)*i的分析过程,不是的,是SLR(1)文法吗,是,则构造该文法的SLR(1)分析表,并给出(i+i)*i的分析过程。

(要求给出详细过程)
答案:(1)拓广文法(2分)
0、E’→ E
1、E → E+T
2、E → T
3、T → T*F
4、T → F
5、F → (E)
6、F → i
(2)构造LR(0)项目集规范簇(10分)
(3)在下图的DFA中,I1、I2、I9均发生了规约——移进冲突,所以该文法不是LR(0)文法。

(2分)
(4)在I1规范项目集中规约项目E’→E. 的Follow(E’)={$},而移进项目的移进符号集={+},Follow(E)∩{+}= Φ
在I2规范项目集中规约项目E→T. 的Follow(E)={$,+,)},而移进项目的移进符号集={*},Follow(E)∩{*}= Φ
在I9规范项目集中规约项目E→E+T. 的Follow(E)={$,+,)},而移进项目的移进符号集={*},Follow(E)∩{*}= Φ
所以,在3个发生冲突的项目集中可解决冲突,因此该文法是SLR(1)文法(5分)
(5)根据上面的DFA建立SLR(1)的分析表(4分)。

相关文档
最新文档