编译原理习题汇总Word文档格式.docx
《编译原理习题汇总Word文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理习题汇总Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
从语法树的角度讲,自上而下分析进程是以开始符号为根节点,试图向下构造一颗语法树,使其结尾节点符号串正好与输入符号串相同。
2.LL
(1)文法
P73
(1)文法不含左递归;
(2)文法中每一个非终结符A的各个产生式的候选首符集两两不相交
即:
假设Aα1|α2|…|αn
则first(αi)∩first(αj)=Φ(i≠j)
(3)对文法中每一个非终结符A,假设它存在某个候选首符集包括ℇ,那么first(A)∩follow(A)=Φ
重点:
左递归的排除
计算FIRST和FOLLOW集合
3.LL
(1)预测分析表的构造
1.自上而下分析会碰到的要紧问题有——左递归——和——回溯——。
2.语法分析经常使用的方式是__自上而下__和__自下而上__
第5章自下而上分析
1.大体思想:
从待输入的符号串开始,利用文法的规那么步步向上规约,试图规约到文法的开始符号。
从语法树的角度看,自下而上分析的进程是以输入符号串作为结尾节点符号串,向着根节点的方向往上构造语法树,使识别符号正好是该语法树的根节点。
若是最终根节点是识别符号,那么输入符号串被识别出是相应语言的一个句子;
不然不是。
2.自下而上分析进程:
边输入单词符号,边归约。
核心问题:
识别可归约串
“算符优先分析”中:
“最左素短语”——“可归约串”
“标准归约分析”中:
“句柄”——“可归约串”
3。
算符优先分析
不是一种标准归约法,是一种自下而上的语法分析法,关键在于规定算符(即终结符)之间的优先顺序和结合性质,借助这种优先关系寻觅“可归约串”进行归约。
特点:
有利于表达式分析,宜于手工实现。
4.算符优先文法:
若是一个算符文法G中的任何终结符对(a,b)最多只知足下述三关系之一:
a≖b,a⋖b,a⋗b
那么称G是一个算符优先文法。
5.FIRSTVT和LASTVT集合
构造集合FIRSTVT(P):
按概念,咱们用以下两条规那么构造集合FIRSTVT(P):
(1)假设有产生式Pa…或PQa…,则a∈FIRSTVT(P);
(2)若a∈FIRSTVT(Q),且有产生式PQ…,则a∈FIRSTVT(P)。
构造集合LASTVT(P):
按概念,咱们用以下两条规那么构造集合LASTVT(P):
(1)假设有产生式P…a或P…aQ,则a∈LASTVT(P);
(2)若a∈LASTVT(Q),且有产生式P…Q,则a∈LASTVT(P)。
算符优先分析举例:
i+i*i↑iP90
算符优先分析法每次都是对——最左素短语——进行规约
LR(K)文法————
A都是无二义性的B都是二义性的C一部份是二义性的
第5章附加
1.文法:
E→E+T|T
T→T*F|F
F→(E)|i
证明E+T*F是它的一个句型,并指出该句型所有短语、直接短语和句柄。
解:
E+T*F是它的一个句型,因为存在下面语法树:
短语:
T*F,E+T*F
直接短语:
T*F
句柄:
2.文法:
S→a|^|(T)
T→T,S|S
(1)给出(a,(a,a))和(((a,a),^,(a)),a)的最左和最右推导;
(2)指出(((a,a),^,(a)),a)的标准归约和每一步的句柄,依照那个标准归约,给出“移进-归约”进程,并给出它的语法树自下而上构造进程。
(1)略
(2)①标准句型及每一步的句柄(用下划线标示):
②“移进-规约”进程:
步骤分析栈输入串动作
(1)#(((a,a),^,(a)),a)#预备
(2)#(((a,a),^,(a)),a)#移进
(3)#(((a,a),^,(a)),a)#移进
(4)#(((a,a),^,(a)),a)#移进
(5)#(((a,a),^,(a)),a)#移进
(6)#(((S,a),^,(a)),a)#归约
(7)#(((T,a),^,(a)),a)#归约
(8)#(((T,a),^,(a)),a)#移进
(9)#(((T,a),^,(a)),a)#移进
(10)#(((T,S),^,(a)),a)#归约
(11)#(((T),^,(a)),a)#归约
(12)#(((T),^,(a)),a)#移进
(13)#((S,^,(a)),a)#归约
(14)#((T,^,(a)),a)#归约
(15)#((T,^,(a)),a)#移进
(16)#((T,^,(a)),a)#移进
(17)#((T,S,(a)),a)#归约
(18)#((T,(a)),a)#归约
(19)#((T,(a)),a)#移进
(20)#((T,(a)),a)#移进
(21)#((T,(a)),a)#移进
(22)#((T,(S)),a)#归约
(23)#((T,(T)),a)#归约
(24)#((T,(T)),a)#移进
(25)#((T,S),a)#归约
(26)#((T),a)#归约
(27)#((T),a)#移进
(28)#(S,a)#归约
(29)#(T,a)#归约
(30)#(T,a)#移进
(31)#(T,a)#移进
(32)#(T,S)#归约
(33)#(T)#归约
(34)#(T)#移进
(35)#S#归约
(36)#S#同意
③语法树的自下而上的构造进程:
3.
(1)计算练习2文法G2的FIRSTVT和LASTVT;
(2)计算G2的优先关系,G2是一个算符优先文法吗?
(3)给出输入串(a,(a,a))的算符优先分析进程。
(1)
FIRSTVT
LASTVT
S
{a,^,(}
{a,^,)}
T
{,,a,^,(}
{,,a,^,)}
(2)优先关系表如下:
a
^
(
)
#
>
<
=
因为:
1)该文法不含ε产生式;
2)该文法是算符文法;
3)由优先关系表能够看出,任何终结符之间的优先关系最多知足一种优先关系;
因此该文法是算符优先文法。
(3)
步骤分析栈输入串动作缘故
0#(a,(a,a))#预备
1#(a,(a,a))#移进#<
2#(a,(a,a))#移进(<
3#(S,(a,a))#归约a>
4#(S,(a,a))#移进(>
5#(S,(a,a))#移进,<
6#(S,(a,a))#移进(<
7#(S,(S,a))#归约a>
8#(S,(S,a))#移进(<
9#(S,(S,a))#移进,<
10#(S,(S,S))#归约,>
11#(S,(T))#归约,>
12#(S,(T))#移进(=)
13#(S,S)#归约)>
14#(T)#归约,>
15#(T)#移进(=)
16#S#归约)>
17#S#分析成功
5.考虑文法:
S→AS|b
A→SA|a
(1)列出那个文法所有的LR(0)项目;
(2)构造那个文法的LR(0)项目集标准族和识别活前缀的DFA;
(3)那个文法是SLR的吗?
假设是,构造分析表;
(4)那个文法是LALR或LR
(1)的吗?
拓广文法如下:
S’→S
(1)所有LR(0)项目如下:
1)S’→.S2)S’→S.3)S→.AS4)S→A.S5)S→AS.6)S→.b
7)S→b.8)A→.SA9)A→S.A10)A→SA.11)A→.a12)A→a.
(2)该文法的LR(0)项目集标准族如下:
DFA略。
(3)FIRST(S)={b,a}FIRST(A)={a,b}
FOLLOW(S)={#,a,b}FOLLOW(A)={a,b}
在LR(0)项目集标准族中,同时存在“移进-归约”和“归约-归约”项目的项目集有I1,I5和I7;
其中I1中“归约”项目是“同意”项目,面临#时同意,移进项目要求面临a和b时移进,不存在冲突;
I5中归约项目面临FOLLOW(A)中元素a,b时归约,“移进”项目面临a,b时移进,存在冲突;
同理,I7也存在冲突。
因此该文法不是SLR的。
(或:
构造出SLR分析表,指出存在多重入口)
(4)构造LR
(1)项目集标准族:
I5,I8,I9中存在“移进-归约”冲突,因此该文法不是LR
(1)的,更不是LALR的。
(!
此题另解:
该文法是二义文法,故不是任何LR文法。
本章补充作业:
1.文法G[S],构造LR
(1)分析表:
S→aAd|bAc|aec|bed
A→e
(1)拓广文法如下:
0)S’→S
1)S→aAd
2)S→bAc
3)S→aec
4)S→bed
5)A→e
(2)LR
(1)项目集标准族构造如下:
(3)LR
(1)分析表如下:
2.文法G[S]:
S→AB
A→aBa|ε
B→bAb|ε
(1)该文法是SLR的吗?
(2)假设是,请构造它的分析表;
(3)给出输入串baab#的分析进程。
对文法拓广:
(0)S’→S
(1)S→AB
(2)A→aBa
(3)A→ε
(4)B→bAb
(5)B→ε
(1)构造LR(0)项目集标准族如下:
FOLLOW(S)={#}FOLLOW(A)={b,#}FOLLOW(B)={a,#}
I0面临FOLLOW(A)中元素时归约,面临a时移进,不存在冲突;
同理,I2,I3,I5中的冲突也能够用SLR方式解决,因此该文法是SLR的。
(2)SLR分析表如下:
步骤状态栈符号栈输入串
00#baab#
102#Abaab#
2025#Abaab#
30253#Abaab#
402536#AbaBab#
5025368#AbaBab#
60257#AbAb#
702579#AbAb#
8024#AB#
901#S#
3.假设有文法G[S]:
S→S;
M|M
M→MbD|D
D→D(S)|ε
(1)证明G[S]是SLR文法,并构造它的分析表;
(2)给出G[S]的LR
(1)项目集标准族中的I0。
(1)拓广文法为:
1)S→S;
M
2)S→M
3)M→MbD
4)M→D
5)D→D(S)
6)D→ε
LR(0)项目集标准族如下:
FOLLOW(S)={#,;
)}
FOLLOW(M)={#,;
),b}
FOLLOW(D)={#,;
),b,c}
SLR分析表如下:
分析表入口唯一,因此是SLR的。
(2)LR
(1)项目集标准族中的I0:
S’→.S,#
S→.S;
M,#/;
S→.M,#/;
M→.MbD,#/;
/b
M→.D,#/;
D→.D(S),#/;
/b/(
D→.,#/;
第6章
1。
关于某个上下文无关文法,当把每一个文法符号联系于一组属性,且让该文法的产生式规那么附加以属性计算时,称该文法为属性文法。
2.文法符号的属性有两种,一种称为综合属性,另一种成为继承属性
3.一个文法符号的继承属性是通过语法树中它的父结点和/或兄弟结点的相应文法符号的属性值来计算的,而综合属性是通过语法树中它的子结点的属性值来计算的
4.语法制导的编译程序能同时进行语法分析和语义分析