编译原理全复习完整版.docx

上传人:b****2 文档编号:17658776 上传时间:2023-07-27 格式:DOCX 页数:17 大小:202.50KB
下载 相关 举报
编译原理全复习完整版.docx_第1页
第1页 / 共17页
编译原理全复习完整版.docx_第2页
第2页 / 共17页
编译原理全复习完整版.docx_第3页
第3页 / 共17页
编译原理全复习完整版.docx_第4页
第4页 / 共17页
编译原理全复习完整版.docx_第5页
第5页 / 共17页
编译原理全复习完整版.docx_第6页
第6页 / 共17页
编译原理全复习完整版.docx_第7页
第7页 / 共17页
编译原理全复习完整版.docx_第8页
第8页 / 共17页
编译原理全复习完整版.docx_第9页
第9页 / 共17页
编译原理全复习完整版.docx_第10页
第10页 / 共17页
编译原理全复习完整版.docx_第11页
第11页 / 共17页
编译原理全复习完整版.docx_第12页
第12页 / 共17页
编译原理全复习完整版.docx_第13页
第13页 / 共17页
编译原理全复习完整版.docx_第14页
第14页 / 共17页
编译原理全复习完整版.docx_第15页
第15页 / 共17页
编译原理全复习完整版.docx_第16页
第16页 / 共17页
编译原理全复习完整版.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

编译原理全复习完整版.docx

《编译原理全复习完整版.docx》由会员分享,可在线阅读,更多相关《编译原理全复习完整版.docx(17页珍藏版)》请在冰点文库上搜索。

编译原理全复习完整版.docx

编译原理全复习完整版

1》编译程序的框架图与功能块:

(1)画出编译程序的总体结构,并简述各部分的主要功能:

七个部分

(2)编译程序的结构分为几个阶段,各阶段的任务是什么?

编译程序总框架

(1)词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。

(2)语法分析器,简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或规约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。

(3)语义分析与中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。

(4)优化器,对中间代码进行优化处理。

(5)目标代码生成器,把中间代码翻译成目标程序。

(6)表格管理,登记源程序的各类信息,编译各阶段的进展状况。

(7)出错管理,把错误信息报告给用户。

编译程序的结构分为五个阶段:

(1)词法分析.任务是:

输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字,标识符,常熟,算符和界符。

(2)。

语法分析,任务是:

在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)。

(3)语义分析与中间代码产生。

任务:

对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。

(4)优化。

任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。

(5)目标代码生成。

任务是:

把中间代码(或优化出理之后)变换成特定机械上的低级语言代码。

2》.重要概念:

a.编译程序:

是指能够把源语言程序转换成逻辑上等价的目标语言程序的一个程序。

b.单词符号:

是语言的基本组成成分,是人们理解和编写程序的基本要素,是语言中具有独立意义的最基本结构,它一般包括:

基本字、标识符、常数、运算符和界符等

c.中间代码:

是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。

d.遍:

就是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

e.上下文无关文法(CFG):

它所定义的语法范畴(或语法单位)完全独立于这种范畴可能出现的环境之外,不宜描述自然语言。

自然语言中,句子和词等往往与上下文紧密相关

f.LL(K)分析法:

第一个L表示从左到右扫描输入串,第二个L表示最左推导,K表示分析时每一步需要向前查看K个符号。

g.LR分析法:

L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程。

h.算符优先法:

就是定义算符之间的某种优先关系,借助于这种关系寻找“可归约串”和进行归约。

i.属性文法:

是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值“(称为属性),对于文法的每个产生式都配备了一组属性的计算规则(称为语义规则)。

3》.有哪些存储分配策略,并叙述何时用何种存储分配策略?

答:

有静态与动态存储分配策略。

动态的存储分配策略包括栈式动态分配策略与堆式动态分配策略。

静态分配策略在编译时对所有数据对象分配固定的存储单元,且在运行时始终保持不变。

栈式动态分配策略在运行时把存储器作为一个栈进行管理,运行时,每当调用一个过程,它所需要的存储空间就动态地分配于栈顶,一旦退出,她所占空间就予以释放。

堆式动态分配策略在运行时把存储器组织成堆结构,以便用户关于存储空间的申请与归还(回收),凡申请者从堆中分给一块,凡释放者退回给堆。

4》.编译过程中可进行的优化如何分类?

最常用的代码优化技术有哪些?

答:

根据优化涉及范围与程序范围可以分为:

局部优化,循环优化和全局优化。

最常用的代码优化技术有:

删除公共子表达式,复写传播,删除无用代码,代码外提,强度削弱和删除归纳变量。

5》.一个编译程序的代码生成要着重考虑哪些问题?

答:

代码生成器的设计要着重考虑目标代码的质量问题,而衡量目标代码的质量主要从占用空间和执行效率两个方面综合考虑。

【代码生成要着重考虑两个问题:

1).如何使生成的目标代码较短2.)如何充分利用计算机的寄存器。

(减少目标代码中访问存储单元的次数。

)这两个问题都直接影响目标代码的执行速度】

6》.语言和文法的转换的例题

(1).文法G2:

S→bA,A→aA∣a

解:

推导过程SbAba

SbAbaAbaa

SbAbaA…ba…a

归纳得出:

L(G2)={ba^n︱n≥1}

(2).文法G3:

S→AB,A→aA∣a,B→bB∣b

解:

推导过程SABab

SABaABaAbaaba^2b

SABabBabbab^2

归纳得出L(G3)={a^mb^n︱m,n≥1}

(3).若已知文法G6(A):

Ac|Ab请给出G6(A)的语言?

解答:

:

L(G6)={c,cb,cbb,}以c开头,后继若干个b

(4).若已知文法G8(S):

S→aSBES→aBE

EB→BEaB→abbB→bbbE→beeE→ee

请给出G8(S)的语言?

解答:

S→aSBES→aaBEBE(S→aBE)

S→aaBBEE(EB→BE)

S→aabBEE(aB→ab)

S→aabbEE(bB→bb)

S→aabbeE(bE→be)

S→aabbee(eE→ee)

L(G8)={a^nb^ne^n|n≥1},上下文有关文法

(5)给出生成下述语言的上下文无关文法:

(1){a^nb^na^mb^m|n,m>=0}

(2){1^n0^m1^m0^n|n,m>=0}

▪G1(S)

ØS→AA

ØA→aAb|ε

▪G2(S)

ØS→1S0|A

ØA→0A1|ε

7》.有限自动机

(1)DFA举例DFAM=({0,1,2,3},{a,b},f,0,{3})

f定义如下:

f(0,a)=1f(0,b)=2f(1,a)=3f(1,b)=2f(2,a)=1f(2,b)=3f(3,a)=3f(3,b)=3

(2).证明t=baab被下图的DFA所接受

对于*中的任何字,若存在一条从初态到某一终态的通路,且这条通路上所有弧的标记符连接成的字等于,则称为DFAM所识别(或接受)

证法一:

∵a,b∈∑∴baab∈∑*

f(S,baab)=f(f(S,b),aab)=f(V,aab)=f(f(V,a),ab)=f(U,ab)=f(f(U,a),b)=f(Q,b)=Q。

Q属于终态,故得证

证法二:

根据上述状态转换图,可以构造确定有限自动机DFAM=〈{S,U,V,Q},{a,b},FM,S,{Q}〉

其中,FM是DFAM的状态转换函数,定义如下:

FM(S,a)=UFM(S,b)=V

FM(U,a)=QFM(U,b)=V

FM(V,a)=UFM(V,b)=Q

FM(Q,a)=QFM(Q,b)=Q

∵a,b∈∑∴baab∈∑*

由题意可知:

对于t=baab,DFAM存在一条经过S、V、U、Q和Q的通路,使得该通路上所有弧的标记符连接成的字等于t

因此,t被DFAM所接受

(2):

下图是一个NFA的状态转换图,请将其转化为一个DFA。

解:

采用NFA确定化算法(或子集法)。

状态集合I的ε-闭包表示为ε-closure(I)。

状态集I中任何状态S经任意条ε弧而能到达的状态集S∈ε-closure(I)。

状态集合I的a弧转换表示为move(I,a),定义为状态集合J,其中:

J是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。

¡Ia=move(I,a)=ε-closure(J)。

因此得出上表。

根据上述NFA的状态转换图及其确定化过程,可以构造与它等价的DFAM。

DFAM=〈{S,A,B,C,D,E,F},{a,b},FM,S,{C,D,E,F}〉

这个DFAM的状态转换图见下图所示。

a

C

D

B

A

E

F

S

b

a

a

a

a

a

b

b

b

b

b

a

b

F

●其中S={i,1,2}A={1,2,3}B={1,2,4}

C={1,2,3,5,6,f}D={1,2,4,5,6,f}E={1,2,4,6,f}F={1,2,3,6,f}

FM是DFAM的状态转换函数,定义如下:

FM(S,a)=AFM(S,b)=BFM(A,a)=CFM(A,b)=B

FM(B,a)=AFM(B,b)=DFM(C,a)=CFM(C,b)=E

FM(D,a)=FFM(D,b)=DFM(E,a)=FFM(E,b)=D

FM(F,a)=CFM(F,b)=E

8》.语法分析

1.文法G[V]:

V→N|N[E]E→V|V+EN→i

是否为LL

(1)文法?

若不是,如何改造成LL

(1)文法?

解:

LL

(1)文法的基本条件是不含左递归和回溯(公共左因子),而G[V]中含有回溯,所以先消除回溯得到文法G’[V]:

G’[V]:

V→NV’V’→ε|[E]V’

E→VE’E’→ε|+EE’N→i

由LL

(1)文法的充要条件可证G’[V]是LL

(1)文法

2.文法G[s]:

S→BAA→BS|dB→aA|bS|c

证明文法G是LL

(1)文法,构造LL

(1)分析表,写出句子adccd的分析过程

解:

一个LL

(1)文法的充要条件是对每一个非终结符A的任何两个不同产生式A→α|β,有下面的条件成立:

FIRST(α)∩FIRST(β)=Φ,若β*ε,则有FIRST(α)∩FOLLOW(A)=Φ对于文法G[s]:

S→BAA→BS|dB→aA|bS|c

FIRST集FIRST(B)={a,b,c};FIRST(A)={a,b,c,d};FIRST(S)={a,b,c}。

FOLLOW集FOLLOW(S)={#}

对S→BA有FIRST(A)\{ε}加入FOLLOW(B),即FOLLOW(B)={a,b,c,d}

对A→BS有FIRST(S)\{ε}加入FOLLOW(B),即FOLLOW(B)={a,b,c,d}

对B→aA有FOLLOW(B)加入FOLLOW(A),即FOLLOW(A)={a,b,c,d}

对B→bS有FOLLOW(B)加入FOLLOW(S),即FOLLOW(S)={#,a,b,c,d}

由A→BS|d得FIRST(BS)∩FIRST(d)={a,b,c}∩{d}=Φ

由B→aA|bS|c得FIRST(aA)∩FIRST(bS)∩FIRST(c)={a}∩{b}∩{c}=Φ

由于文法G[s]不存在形如β→ε的产生式,故无需求解形如FIRST(α)∩FOLLOW(A)的值也即,文法G[S]是一个LL

(1)文法由G[s]:

S→BAA→BS|dB→aA|bS|c的

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

FIRST(A)={a,b,c,d};FOLLOW(A)={a,b,c,d};

FIRST(S)={a,b,c}。

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

可构造LL

(1)预测分析表如下:

a

b

c

d

#

S

S->BA

S->BA

S->BA

A

A->BS

A->BS

A->BS

A->d

B

B->aA

B->bS

B->c

在分析表的控制下,句子adccd的分析过程如下:

 

3.对于文法G(E):

E→TE E→+TE| T→FT T→*FT|F→(E)|i

构造每个非终结符的FIRST和FOLLOW集合FIRST(E)={(,i}FOLLOW(E)={),#}

FIRST(E)={+,}FOLLOW(E)={),#}FIRST(T)={(,i}FOLLOW(T)={+,),#}

FIRST(T)={*,}FOLLOW(T)={+,),#}FIRST(F)={(,i}FOLLOW(F)={*,+,),#}

4.已知文法G[S]:

S→eT|RTT→DR|R→dR|D→a|bd

构造该文法的LL

(1)分析表。

FIRST(S),FIRST(T),FIRST(R),FIRST(D)

FOLLOW(S),FOLLOW(T),FOLLOW(R),FOLLOW(D)

LL

(1)分析表

解:

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

FIRST(T)={a,b,}FOLLOW(T)={#}FIRST(R)={d,}

FOLLOW(R)={a,b,#}FIRST(D)={a,b}FOLLOW(D)={d,#}

⏹该文法的LL

(1)分析表如下:

 

a

b

d

e

#

S

S→RT

S→RT

S→RT

S→eT

 

T

T→DR

T→DR

 

 

R

T→DR

 

D

D→a

D→bd

 

 

 

5.例:

文法G[E]:

E→E+T|TT→T*F|FF→(E)|id

考虑文法G[E]上的句子id1+id2*id3。

给出其最右推导和分析树,并根据分析树指出句子中的短语、直接短语和句柄

从E1推导可得到id1+id2*id3

id1+id2*id3是句型id1+id2*id3相对于E1的短语

id1+id2不是句型id1+id2*id3中相对于任何非终结符的短语

因为找不到任何一个非终结符,它的子树中的所有叶子构成id1+id2

短语以非终结符为根的子树中所有从左到右排列的叶子

⏹E1E2+id2*id3T2+id2*id3F1+id2*id3id1+id2*id3

id1是相对于非终结符E2、T2和F1的短语

相对于F1的直接短语,也是句柄

6.例4.2文法:

E→E+T|TT→T*F|FF→(E)|i

经消去直接左递归后变成:

E→TEE→+TE|

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

7.例:

对于文法G(E)

E→TEE→+TE|

T→FTT→*FT|

F→(E)|i

构造每个非终结符的FIRST和FOLLOW集:

FIRST(E)={(,i}FOLLOW(E)={),#}

FIRST(E)={+,}FOLLOW(E)={),#}

FIRST(T)={(,i}FOLLOW(T)={+,),#}

FIRST(T)={*,}FOLLOW(T)={+,),#}

FIRST(F)={(,i}FOLLOW(F)={*,+,),#}

T→FT;T→*FT|;FOLLOW(T)∈FOLLOW(F)

8.例:

对于文法G(E)

E→TEE→+TE|T→FTT→*FT|F→(E)|i

构造每个非终结符的FIRST和FOLLOW集合:

FIRST(E)={(,i}FOLLOW(E)={),#}FIRST(E)={+,}FOLLOW(E)={),#}

FIRST(T)={(,i}FOLLOW(T)={+,),#}FIRST(T)={*,}FOLLOW(T)={+,),#}

FIRST(F)={(,i}FOLLOW(F)={*,+,),#}

 

9.文法G[V]:

V→N|N[E]E→V|V+EN→i

是否为LL

(1)文法?

若不是,如何改造成LL

(1)文法?

解:

LL

(1)文法的基本条件是不含左递归和回溯(公共左因子),而G[V]中含有回溯,所以先消除回溯得到文法G’[V]:

G’[V]:

V→NV’V’→ε|[E]V’

E→VE’E’→ε|+EE’N→i

由LL

(1)文法的充要条件可证:

G’[V]是LL

(1)文法

11.已知文法G[S]:

S→eT|RTT→DR|R→dR|D→a|bd

构造该文法的LL

(1)分析表。

FIRST(S),FIRST(T),FIRST(R),FIRST(D)

FOLLOW(S),FOLLOW(T),FOLLOW(R),FOLLOW(D)LL

(1)分析表

解:

FIRST(S)={a,b,d,e,}FOLLOW(S)={#}FIRST(T)={a,b,}FOLLOW(T)={#}FIRST(R)={d,}FOLLOW(R)={a,b,#}

FIRST(D)={a,b}FOLLOW(D)={d,#}

⏹该文法的LL

(1)分析表如下:

 

a

b

d

e

#

S

S→RT

S→RT

S→RT

S→eT

 

T

T→DR

T→DR

 

 

R

T→DR

 

D

D→a

D→bd

 

 

 

9》。

中间语言形式

常用的中间语言:

a.后缀式表示法b.图表示法:

DAG抽象语法树

三地址代码:

三元式四元式间接三元式

1.abc+*等价a*(b+C)

表达式x+y≤z∨a>0∧(8+z)>3的逆波兰表示为xy+z≤a0>8z+3>∧∨

表达式﹁A∨﹁(C∨﹁D)的逆波兰表示为A﹁CD﹁∨﹁∨

表达式a∧b∨c∧(b∨x=0∧c)的逆波兰表示为ab∧cbx0=c∧∨∧∨

表达式(A∨B)∧(C∨﹁D∧E)的逆波兰表示为AB∨CD﹁E∧∨∧

一个带有四个域的记录结构,这四个域分别称为op,arg1,arg2及result

例:

a:

=b*-c+b*-c的四元式

oparg1arg2result

(0)uminuscT1

(1)*bT1T2

(2)uminuscT3

(3)*bT3T4

(4)+T2T4T5

(5):

=T5a

2.例:

a:

=b*-c+b*-c的三元式

三个域:

op、arg1和arg2

oparg1arg2

(0)uminusc

(1)*b(0)

(2)uminusc

(3)*b

(2)

(4)+

(1)(3)

(5)assigna(4)

3.例如,语句X:

=(A+B)*C;

Y:

=D↑(A+B)的间接三元式表示如右图

4.表达式-a+b*c+d+(e*f)/d*e,如果优先级由高到低依次为-、+、*、/,且均为左结合,则其后缀式为a-b+cd+ef*+*de*/

5.如果优先级由高到低依次为-、+、*、$(乘幂),且均为右结合,则表达式2+3-2+2*2*1$2$3-3-2+1的后缀式为232-2++21**2332--1+$$

6.如果某表达式的后缀式为ab+cd+*,则其中缀形式的表达式为(a+b)*(c+d)

7.请将表达式-(a+b)*(c+d)-(a+b)分别表示成三元式、间接三元式和四元式序列

解:

三元式间接三元式

(1)(+a,b)间接三元式序列  间接码表

(2)(+c,d)

(1)(+a,b)  

(1)

(3)(*

(1),

(2))

(2)(+c,d)  

(2)

(4)(-(3),/)(3)(*

(1),

(2)) (3)

 (5)(+a,b)(4)(-(3),/)  (4)

(6)(-(4),(5))(5)(-(4),

(1)) 

(1)

(5)

  四元式

(1)(+,a,b,t1)

(2)(+,c,d,t2)

(3)(*,t1,t2,t3)  (4)(-,t3,/,t4)

(5)(+,a,b,t5) (6)(-,t4,t5,t6)

必考题:

构造一个DFA,它接收Σ={a,b}上所有满足下述条件的字符串:

字符串中的每个a都有至少有一个b直接跟在其右边。

解:

由题意可得其正规式为(b*abb*)*,画出相应的DFM.

仅供参考,如有什么不对的地方尽请谅解

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2