- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理期末复习资料
简答题:
什么是编译程序?
答:编译程序是指一个把源语言(如C,Pascal,java等高级语言)转换为目标语言(汇编语言、机器语言等低级语言)的翻译程序。
什么是解释程序?
答:解释程序指以一个源语言(C,Pascal,java等高级语言)为输入,但不产生目标程序,而是边解释边执行源程序本身的程序。
编译程序和解释程序的区别?
答:一个产生目标代码(编译),一个不产生目标代码(解释)。
编译程序的步骤和任务:
词法分析:从左至右扫描字符流的源程序、分解构成源程序的字符串,识别出(拼)一个个的单词(符号)
语法分析:层次分析,依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树)
语义分析与中间代码产生:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
优化:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。(书本)应用一些技术对代码进行变换以使得编译产生的目标代码高效(PPT)。
目标代码生成:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。(书本)生成目标机汇编和机器指令。
名词解释
文法:一个文法G是一个四元组(VT,VN,S,P),其中:
VT是一个非空有穷终结符号集合;
VN是一个非空有穷的非终结符号集合,且VT∩VN=Φ;
S∈VN开始符号。
P是一个产生式的非空有穷集合,每个产生式的形式是A→α,其中A∈VN,α∈(VT∪VN)* 开始符号S至必须在某个产生式的左部出现一次
直接推导和推导
直接推导:令G=(VT,VN,S,P), 若A→γ∈P, 且α,β∈(VT∪VN)*称αAβ直接推出αγβ,表示成αAβ?αγβ 同时也称αγβ是αAβ的直接推导,或称αγβ 直接归约到αAβ。
推导:如果存在一个直接推导序列:α0?α1?α2?… ?αn(n>0)表示成α0+?αn,称从α0到αn的长度为n的推导。α0*?αn,或者α0=αn或者α0+?αn .
语言:设文法G=(VT,VN,S,P)。如果S*?α,则称α是一个句型。仅含终结符号的句型是一个句子。语言L(G)是由文法G产生的所有句子所组成的集合:L(G)={α|S*?α且α∈VT*}
三、问答题
8. 文法的分类:
分为四种,逐渐对产生式施加限制形成一个层次
0型:G=(VT,VN,S,P)
规则形式:α→βα,β∈(VT∪VN)*, α≠ε
推导:γαδ?γβδ
1型(上下文有关):规则α→β有|α|≤|β|
规则形式:ξAη→ξγη
A ∈VN,ξ,γ,.η∈(VT∪VN)*, γ≠ε
2型(上下文无关):规则形式:A→β
A ∈VN,β∈(VT∪VN)*
3型(右线性):A→aB或A→a(右线性)
A→Ba或A→a (左线性)a ∈VT∪{ε}
9. 给语言写文法:P36 :6、7、8、9、11
10. 改二义性文法:P36:10
基本步骤:把出现二义的部分优先级分块。
然后每个优先级用一个新的VN表示。
最底优先级的VN符号要能由VT符号定义如:A→…|a
11. NFA、DFA :P64:12
基本步骤:正则表达式→NFA→确定化(确定化表)→DFA(未简化) →最小化→最小化DFA (
12. 写正则表达式:P64 :8
13. 练习理解文法的First和Follow集,证明文法是LL(1)的,预测分析表,构造递归下降分析程序。
1)计算FIRST(x)集:
·若x属于VT,则FIRST(x)={x}
·若x属于VN,x→a…,则a加入FIRST(x)
·若x属于VN,x→Y…,则FIRST(Y)除“空串”之外的加入FIRST(x)
·若x属于VN,X→Y1Y2Y3….YN若FIRST(Y1)、FIRST(Y1)、FIRST(Y1)…. FIRST(Yn)都含有“空串”那么把FIRST(Y1)、FIRST(Y1)、FIRST(Y1)…. FIRST(Yn)都加入到FIRST(x);如果只是前几个含有“空串”,如到Yk,那么把FIRST(Y1)、FIRST(Y1)、FIRST(Y1)…. FIRST(Yk)中非“空串”元素加入FIRST(x)。
2)计算FOLLOW(x)集:
·若x为开始符号,则把#加入FOLLOW(x);
·若A→axp,则把FIRST(p)除“空串”加入FOLLOW(x)
·若A→ax,或者A→axp中p有限步→“空串”,则把FOLLOW(A)加入到FOLLOW(x)
3)如何判断文法是否是LL(1)的:
假设是的,那么,考察非终结符号A→a|p
文档评论(0)