编译原理5、6、7章解题小结_编译原理心得体会

2020-02-28 其他工作总结 下载本文

编译原理5、6、7章解题小结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“编译原理心得体会”。

第5、6、7章小结

几种语法分析方法

• 自上而下

– 递归下降分析法

– 预测(LL(1))分析法

• 自下而上

– 算符优先分析法

– LR分析法:LR(0)、SLR(1)、LR(1)、LALR(1)

一、自上而下的语法分析方法

1.不带回溯确定的自上而下分析法

2.对文法的要求:

1)文法非左递归

2)LL(1)文法

i.LL(1)文法的定义:

 LL分析表不含多重元素

 对AVT,A->|

• FIRST() FIRST()=

• 与至多只有一个为 

• 若* ,则FIRST() FOLLOW(A)=

ii.LL(1)文法的两个性质

 LL(1)文法不含左递归

 LL(1)文法无二义

i.将方法G改写成LL(1)文法的方法:

 消去直接左递归

 提公共左因子

3.根据文法规则构造

1)递归下降分析程序的方法

2)预测分析表的方法

EX1:已知文法G:

S->aAbDe | d

A->BSD | e

B->Sac | cD | 

D->Se | 

求:1)每个非终结符的FIRST,FOLLOW集

2)判定是否为LL(1)文法。

解:FIRST(S)={a,e};

FIRST(B)={a,d,c,};

FIRST(D)={a,d,};

FIRST(A)={a,d,c,,e};

FOLLOW(S)={a,e,d,b,#};

FOLLOW(B)={a,e};

FOLLOW(D)={a,e,b};

FOLLOW(A)={b};

FIRST()

EX2:已知 ={a,b},用高级语言编写一个能够识别集合L={ anbn | n0}的程序。

提示:

1、求文法G:S->aSb | 

2、判定文法G能用何种方法做。

二、自下而上的语法分析方法

(一)、算符优先分析法

1.算符优先分析法的定义

2.最左素左语

3.确定优先关系,构造优先关系表

EX3:已知文法G:

S->S;D | D

D->D(T)| H

T->T+S | S

H->a |(S)

求:1)求优先关系表

2)判定是否为OG、OPG文法。

3)根据文法和表分析句子(a+a)# 是否为该文法的句子。(答案:不是)

解: FIRSTVT(H)={a,(}

FIRSTVT(T)={+,a,(}

FIRSTVT(D)={a.(}

FIRSTVT(B)={;,a,(}

LASTVT(H)={a,}

LASTVT(T)={+,a,(}

LASTVT(D)={a.(}

LASTVT(B)={;,}

(二)、LR分析技术

1.所有无二义的上下文无关文法都可以用LR分析法

2.过程:

上下文无关文法->识别文法活前缀的DFA->LR

LR(0)

SLR(1)

LR(1)

LALR(1)

1.四类文法的判别方法

1.任何二义性文法都不是LR文法

2.根据项目集中是否含有冲突的项目:

1.LR(0)文法:所有LR(0)项目集中不含任何冲突

2.SLR(1)文法:LR(0)项目集中的冲突能用SLR规则解决。

3.LR(1)文法:若不能解决,则继续求搜索符,求LR(1)项

目集;若搜索符a只对归约冲突起作用,对移进不起作用,则可用以下LALR方法:

4.LALR(1)文法:合并同心集后,不存在归约与归约的冲突。

2.结论:

LR(0)SLR(1) LR(1)LALR(1),反之不成立

EX4:

已知文法G:

S->bASB | bA

A->dSa | 1

B->cAd | c

判定是否为LR(0), SLR(1), LR(1), LALR(1)文法。

分析:B->cAd | c 有移归冲突,不是LR(0)文法。

求{d,1}FOLLOW(B)

={d,1} FOLLOW(S)

= {d,1} (FIRST(B){#,a})

= {d,1} {#,a,c}

=

所以文法为SLR(1), LR(1), LALR(1)文法。

EX5:已知文法G:

S->AS | b

A->SA | a

判定是否为LR(0), SLR(1), LR(1), LALR(1)文法。

分析:对句子abab对应两棵语法树,故为二义文法,所以文法不是LR(0),SLR(1), LR(1), LALR(1)文法。

EX6:已知文法G:

S->SbSe

S->

问:LL(1)与 SLR(1)哪些方法可用?

分析:左递归

S->  ===>S->.不是S->.和S->.EX7:已知文法G:

A->BA | 

B->aB | b

(1)证明它是LR(1)文法

(2)求它的LR(1)分析表

(3)列出句子abab的分析过程

第八章

中间代码的几种形式(逆波兰式 四元式 三元式 间接三元式 树)

EX2:A+B*(C-D)+E /(C-D)^N

逆波兰式

ABCD-*+ECD-N^/+

四元式

(1)(-,C,D,T1)

(2)(*,B,T1,T2)

(3)(+,A,T2,T3)

(4)(-,C,D,T4)

(5)(^,T4,N,T5)

(6)(/,E,T5,T6)

(7)(+,T3,T6,T7)

三元式

(1)(-,C,D)

(2)(*,B,(1))

(3)(+,A,(2))

(4)(-,C,D)

(5)(^,(4),N)

(6)(/,E,(5))

(7)(+,(3),(6))

EX2:A+B*(C-D)+E /(C-D)^N

间接三元式

间接三元式系列间接码表

(1)(-,C,D)(1)

(2)(*,B,(1))(2)

(3)(+,A,(2))(3)

(4)(^,(4),N)(1)

(5)(/,E,(5))(4)

(6)(+,(3),(6))(5)

(6)

每生成一条指令,先检查间接三元式系列,若已有,不再生成,只将序号列入间接码表中; 间接码表表明了执行间接三元式序列的顺序

《编译原理5、6、7章解题小结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
编译原理5、6、7章解题小结
点击下载文档
相关专题 编译原理心得体会 小结 原理 编译原理心得体会 小结 原理
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文