编译原理作业
- 格式:doc
- 大小:52.50 KB
- 文档页数:4
《编译原理》作业参考答案一、填空1.图二图一。
2.文法是无ε产生式,且任意两个终结符之间至多有一种优先关系的算符文法。
3.最右推导最右推导。
4.对于循环中的有些代码,如果它产生的结果在循环中是不变的,就把它提到循环外来。
把程序中执行时间较长的运算替换为执行时间较短的运算。
5.对于文法中的每个非终结符A的各个产生式的候选首符集两两不相交;对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A)∩FOLLOW(A)= ø6.控制。
7.语义分析和中间代码产生8.自上而下自下而上自上而下9.自下而上表达式10.自下而上11.源程序单词符号12. DFA初态唯一,NFA初态不唯一;DFA弧标记为Σ上的元素,NFA弧标记为Σ*上的元素;DFA的函数为单射,NFA函数不是单射13.词法,词法分析器,子程序,语法14.ε,a,ab,ab15.终结符号,非终结符号,产生式16.L(G)={a n | n≥1}17.1型,2型,3型18.二义的19.快20.终态,输入字21.单词符号,终结符22.归约23.必须24.直接25.终结符,更快26.E→E+∙T, E→E∙+T, E→∙E+T, E→E+T∙27.归约—归约28.类型检查,一致性检查29.词法分析、词法30.语法分析程序、语法31。
终结符号、产生式、开始符号、非终结符32.2、2、333.不需要避开34.符合、不符合35.推导36.包括37.Ass38.一定没有、一定没有、至多只有一个39.SLR(1)40.移进——归约41.a.控制流检查、b.一致性检查、c.相关名字检查二、判断下面语法是否正确1 ×2 ×3 √4 ×5 √6 ×三、简答题1.词法分析的任务是对输入的源程序进行单词及其属性的识别,为下一步的语法分析进行铺垫;有两种方法可以实现词法分析器:一,手工编写词法分析程序。
二,由词法分析器自动生成程序生成。
编译原理独立作业2010.5一、简答题1、 构造一个文法使其生成的语言是不允许0打头的偶正整数集合。
2、文法][E G :T T E T E E -+→,F F T F T T /*→,i E F )(→,构造句型i T T T *+-的语法树,并指出该句型的短语、直接短语、句柄、素短语和最左素短语。
3、 某LL(1)文法的预测分析表如下,请在下述分析过程表中填入输入串( a , a )$ 的分析过程。
4、 文法][S G :R L S =→,R S →,R L *→,i L →,L R →,求增广文法中LR(1)项目集的初态项目集I 0。
5、文法][S G :G G S S ;→,()G G t H →,)(S a H →,求出各非终结符的FISTVT 和LASTVT 集合。
二、分析题:1、构造自动机,使得它能识别字母表{0,1}上以00结尾的符号串,将构造的自动机确定化,并写出相应的正规文法。
2、文法][S G :RT eT S → εDR T → εdR R → bd a D →,写出每个非终结符的FIRST 集和FOLLOW 集,并判断该文法是否为LL(1)文法。
3、若有文法][S G :AB S → εaBa A → εb A b B → (1)试证明该文法是SLR(1) 文法,并构造SLR(1)分析表。
(2)给出输入串aa # 的分析过程。
参考答案一、简答题1、构造一个文法使其生成的语言是不允许0打头的偶正整数集合。
8|6|4|2|ABC Z → 9|8|7|6|5|4|3|2|1→A ε|0|B AB B → |8|6|4|2|0→C2、文法][E G :T T E T E E -+→,F F T F T T /*→,i E F )(→,构造句型i T T T *+-的语法树,并指出该句型的短语、直接短语、句柄、素短语和最左素短语。
短语:T ,T-T ,i ,T*i ,T-T+T*i直接短语:T , i 句柄: T素短语(P72):T-T,i 最左素短语:T-T3 某LL(1)文法的预测分析表如下,请在下述分析过程表中填入输入串( a , a )$ 的分析过程。
编译原理作业集1 第二章词法分析1. C或Java语言的标示符是字母和数字组成的序列,第一个字符必须是字母,下划线视为字母,且大小写字母不同。
请写出匹配C或Java语言标示符的正规表达式。
2.为下边所描述的串写正规式,字母表是 {0, 1}. a) 以11 结尾的所有串 b) 只包含一个1的所有串2 第三章上下文无关文法1. ________是描述程序设计语言语法结构的形式工具。
2. 设G=(VN,VT,P,S)是一文法,且V= VN∪VT,若S =>*α,α∈V,则称α为文法G的,若S=>*α,α∈VT,则称α为文法G的。
3. 给出语言L={ab|j>i>=1}的上下文无关文法。
4. 文法G[S]的产生式如下:S?SaS | SbS | cS | Sd | t 对于输入串 tbctat: (1) 给出一个推导;(2) 画出(1)中推导对应的分析树;ij**(3) 文法G是否是二义性的,请证明你的结论。
3 第四章语法分析1. 考虑文法G[S]:S-> A��B A->a|b B->(C) C->CS|S 1) 消除上述文法的左递归,重写该文法。
2) 求消除左递归后的文法的非终结符构造First集合和Follow集合。
3) 为消除左递归后的文法构造LL(1)分析表。
4) 并写出对句子 (ab) 的LL(1)分析过程。
2. 给定文法G[S]: S->SaSb��c给出句子 cacbacb 的规范推导,画出该句子的语法推导树,指出该句子的句柄。
3. 给定文法G[S]:S->S b A��A A->a 1) 造文法G[S]的LR(1)项目的DFA。
2) 上述文法构造LR(1)分析表。
3) 写出句子 ababa的分析过程。
4 第五章语义分析1.通过下面文法给出的十进制数的浮点数值,写出一个属性文法(提示:使用一个属性count计算小数点右面数字的个数)。
第3章作业【编辑人:陈芳芳】1.写一文法,使其语言是偶正整数的集合。
要求:(1)允许0打头;(2)不允许0打头。
【解】:(1)允许0打头且含0的偶正整数集合的文法为:N—>(0|D|E)N|(E|0)D—>1|3|5|7|9E—>2|4|6|8(2) 不允许0打头的偶正整数集合的文法为:R—>(D|E)N|EN—>(0|D|E)N|(E|0)D—>1|3|5|7|9E—>2|4|6|82.一个上下文无关文法生成句子abbaa的推导树如下:SA B Sa S B B A aƐ b b a(1)给出该句子的相应的最左推导,最右推导。
(2)该文法的产生式集合P可能有哪些元素?(3)找出该句子的所有短语,简单短语,句柄。
【解】:(1)最左推导:S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa最右推导:S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa (2) 产生式集合P:S—>ABS | Aa| ƐA—>aB—>SBB | b(3) 短语:a , Ɛ , b , bb , aa , abbaa直接短语:a , Ɛ , b句柄:a3、给出生成下述语言的上下文无关文法:(1){a n b n a m b m | n, m >= 0}(2){1n0m1m0n | n, m >= 0}【解】:(1)S—>AAA—>aAb | Ɛ(2)S—>1S0 | AA—>0A1 | Ɛ第4章课后作业1. 构造一个状态数最小的DFA,它接受∑={0,1}上所有倒数第二个字符为1的字符串。
【编辑人:胡志高】【解】:(1)构造相应的正规式:(0|1)* 1(0|1)(2)由正规式构造NFA,如下图:(3)NFA转化DFA① T0=ε-closure({0})={0}②运用子集构造法求DFA状态,如下表,其中T0为初态,T2、T3为终态:ε-closure(move(Ti,0))ε-closure(move(Ti,1)) T0={0}{0} {0,1}T1={0,1} {0,2} {0,1,2}T2={0,2} {0} {0,1}T3={0,1,2} {0,2} {0,1,2}③分别用0,1,2,3代表T0,T1,T2,T3,得DFA如下图:(4)最小化DFA①找DFA中等价状态,分析过程如下:P0=({0,1},{2,3})P1=({0},{1},{2},{3})经以上分析可知:0无等价状态。
平时作业1 对于下列语言分别写出它们的正规表达式。
(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。
答:令Letter表示除这五个元音外的其它字母。
((letter)*A(letter)*E(letter)*I(letter)*O(letter)*U(letter))*(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。
答:A*B*....Z*(3) Σ={0,1}上的含偶数个1的所有串。
答: (0|10*1)*(4) Σ={0,1}上的含奇数个1的所有串。
答:(0|10*1)*1(5) 具有偶数个0和奇数个1的有0和1组成的符号串的全体。
答:设S是符合要求的串,|S|=2k+1 (k≥0)。
则S→S10|S21,|S1|=2k (k>0),|S2|=2k (k≥0)。
且S1是{0,1}上的串,含有奇数个0和奇数个1。
S2是{0,1}上的串,含有偶数个0和偶数个1。
考虑有一个自动机M1接受S1,那么自动机M1如下:和L(M1)等价的正规表达式,即S1为:((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*类似的考虑有一个自动机M2接受S2,那么自动机M2如下:和L(M2)等价的正规表达式,即S2为:((00|11)|(01|10)(00|11)*(01|10))*因此,S为:((00|11)|(01|10)(00|11)*(01|10))*(01|10)(00|11)*0|((00|11)|(01|10)(00|11)*(01|10))*1(6) 不包含子串011的由0和1组成的符号串的全体。
答:1*|1*0(0|10)*(1|ε)(7) 由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。
答:假设w的自动机如下:对应的正规表达式:(1(01*0)1|0)*2 给出接受下列在字母表{0,1}上的语言的DFA。
习题11.1解释名词:源语言、目标语言、翻译器、编译器和解释器。
答:源语言是指待翻译的语言,和目标语言相对。
目标语言是指被翻译的语言,与源语言相对。
能够完成从一种语言到另一种语言的变换的软件称为翻译器,这两种语言分别叫做该翻译器的源语言和目标语言。
编译器是一种特殊的翻译器,它进行语言变换的特点是目标语言比源语言低级。
解释器是不同于编译器的另一类语言处理器。
它不像编译器那样通过翻译来生成目标程序,而是直接执行源程序所指定的运算。
它的执行方式是一边翻译一边执行,因此其执行效率一般偏低。
1.2典型的编译器可以划分成几个主要的逻辑阶段?各阶段的主要功能是什么?答:典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码生成器、独立于机器的代码优化器、代码生成器、依赖于机器的代码优化器。
各阶段的主要功能:(1)词法分析器:词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。
(2)语法分析器:按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了该记号流的语法情况。
(3)语义分析器:使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。
它还收集类型信息,把它们保存在符号表或语法树中。
(4)中间代码生成器:为源程序产生更低级的显示中间表示,可以认为这种中间表示是一种抽象机的程序。
(5)独立于机器的代码优化器:试图改进中间代码,以便产生较好的目标代码。
通常,较好是指执行较快,但也可能是其他目标,如目标代码较短或目标代码执行时能耗较低。
(6)代码生成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。
如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。
《编译原理》作业题库1. 单选题1. 下列哪一项不是与机器有关的代码优化()。
A. 寄存器优化B. 多处理优化C. 特殊的指令优化D. 有用的指令消除正确答案:D2. 处理冲突的方法不包括以下哪种方法()。
A. 开放定址法B. 再哈希法C. 链地址法D. 建立一个私有溢出区正确答案:D3. 优化可生成()的目标代码。
A. 运行时间较短B. 占用存储空间较小C. 运行时间短但占用内存空间大D. 运行时间短且占用存储空间小正确答案:D4. 一个文法是递归的,则它产生的语言的句子个数()。
A. 必定无穷B. 必定有限C. 可能无穷,也可能有限D. 说不准正确答案:A5. 已知文法G:S→WZ W→X|Y X→a|aX Y→b|bY Z→c|cZ,G定义的语言的相应正规式为()。
A. aa*|bb*|cc*B. (aa*|bb*)cc*C. aa*(bb*|cc*)D. (a|b|c)*正确答案:B6. 设G 是一个给定的文法,S 是文法的开始符号,如果S->x( 其中x∈V*), 则称x 是文法G 的一个()。
A. 候选式B. 句型C. 单词D. 产生式正确答案:B7. 词法分析器用于识别()。
A. 字符串B. 语句C. 单词D. 标识符正确答案:C8. 给定文法G[E]:E→E+T∣T T→T*F∣F F→(E)∣i, 则以下()全都不是规范句型的活前缀①T+ ②T* ③ε④T*F ⑤E+E ⑥E* ⑦E+ T* ⑧i ⑨(E+T)⑩(i)A. ②④⑥B. ⑤⑥⑩C. ①②③④D. ⑦⑧⑨正确答案:A9. 下列()不属于程序设计语言中的低级语言?A. 机器语言B. 汇编语言C. C语言D. 面向机器的程序设计语言正确答案:C10. 设已给文法G=(VN,VT,P,S),其中:VN={S} VT={a1,a2,…,an,∨,∧,~,[,]} P={S→ai∣i=1,2,…,n}∪{S→~S,S→[S∨S],S→[S∧S]} 此文法所产生的语言是( )。
第1章引言1、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。
源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。
目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。
目标程序(结果程序)一般可由计算机直接执行。
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。
如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。
其中包括:编译程序,解释程序,汇编程序。
编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。
解释程序: 以该语言写的源程序作为输入,但不产生目标程序。
按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。
2、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。
3、简述编译程序的基本过程的任务。
编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。
词法分析:输入源程序,进行词法分析,输出单词符号。
语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。
中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。
优化:对中间代码进行优化处理。
目标代码生成:把中间代码翻译成目标语言程序。
4、编译程序与解释程序的区别?编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。
编译原理题目
1. 词法分析器的设计与实现
2. 语法分析器的生成方法与工具
3. 语法制导翻译的算法与实现
4. 语法制导的代码生成技术
5. 语义分析器的设计与实现
6. 属性文法的定义和属性计算方法
7. 中间代码的生成与优化技术
8. 目标代码生成的方法与实现
9. 解释器与编译器的区别与联系
10. 正则表达式在编译原理中的应用
11. 有限自动机的概念与构建方法
12. 句法制导翻译技术在编译器中的应用
13. 语言语义的表示与验证方法
14. 静态类型检查器的设计与实现
15. 字节码与机器码的转换方法
16. 抽象语法树的构建与遍历算法
17. 参数传递的机制与实现
18. 变量作用域的嵌套与解析方法
19. 优化编译器的关键技术与算法
20. 并行编程在编译器优化中的应用。
编译原理作业
P7:1.1;1.2自编2.1;2.2自编2.3;2.4自编2.5自编3.1
自编3.2自编3.3;3.4P100.4.1;4.2自编4.3;4.4自编5.1
自编5.2自编7.1;7.2 自编8.1
P7:1.1
P7;1.2
自编2.1
文法G[S]:S→xSx│y所识别的语言是。
a. xyx
b. (xyx)*
c. x n yx n(n≥0)
d. x*yx*
【解答】
自编2.2
令文法G[N]为
G[N]: N→D∣ND
D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9
(1) G[N]的语言L(G)是什么?
(2) 给出句子0127、34和568的最左推导和最右推导。
【解答】
自编2.3
对于文法G[S]: S→(L)∣aS∣a
L→L, S∣S
(1) 画出句型(S,(a))的语法树;
(2) 写出上述句型的所有短语、直接短语、句柄。
【解答】
自编2.4
已知文法G[S]为S→SaS∣ε,试证明文法G[S]为二义文法。
【解答】
自编2.5
按指定类型,给出语言的文法。
(1) L={a i b j│j>i≥1}的上下文无关文法;
(2) 字母表∑={a,b}上的同时只有奇数个a和奇数个b的所有串的集合的正规文法;
自编3.1
什么是扫描器?扫描器的功能是什么?
自编3.2
结合自动机证明:正规式(ab)*a与正规式a(ba)*是否等价?给出分析过程。
自编3.3
已知自动机DFA如图3-4所示
图3-4 DFA
写出其对应的语言,分别用正规文法和自然语言描述。
【解答】
自编3.4
设有L(G)={a2n+1b2m a2p+1| n≥0,p≥0,m≥1}。
(1) 给出描述该语言的正规表达式;
(2) 构造识别该语言的确定有限自动机(可直接用状态图形式给出)。
【解答】
P100:4.1
P100;4.2
自编4.3
在算符优先分析法中,为什么要在找到最左素短语的尾时才返回来确定其对应的头,能否按扫描顺序先找到头后再找到对应的尾,为什么?
【解答】
自编4.4
设有文法G[S]: S→a|b|(A)
A→SdA|S
(1) 构造算符优先关系表;
(2) 给出句型(SdSdS)的短语、简单短语、句柄、素短语和最左素短语;
【解答】
自编5.1
(1) 四元式之间的联系是通过实现的。
a. 指示器
b. 临时变量
c. 符号表
d. 程序变量
(2) 间接三元式表示法的优点为。
a. 采用间接码表,便于优化处理
b. 节省存储空间,不便于表的修改
c. 便于优化处理,节省存储空间
d. 节省存储空间,不便于优化处理
(3) 表达式(┐A∨B)∧(C∨D)的逆波兰表示为。
a. ┐AB∨∧CD∨
b. A┐B∨CD∨∧
c. AB∨┐CD∨∧
d. A┐B∨∧CD∨
【解答】
自编5.2
(4) 有一语法制导翻译如下所示:
S→bAb {print″1″}
A→(B {print″2″}
A→a {print″3″}
B→Aa) {print″4″}
若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为。
【解答】
自编7.1
将下面程序划分为基本块并作出其程序流图。
read(A,B)
F=1
C=A*A
D=B*B
if C<D goto L1
E=A*A
F=F+1
E=E+F
write(E)
halt
L1: E=B*B
F=F+2
E=E+F
write(E)
if E >100 goto L2
halt
L2: F=F-1
goto L1
【解答】
自编7.2
试画出如下中间代码序列的程序流图,并求出:
(1) 各结点的必经结点集合D(n);
(2) 流图中的回边与循环。
J=0
L1:I=0
if I< 8 goto L3
L2:A=B+C
B=D*C
L3:if B =0 goto L4
write B
goto L5
L4:I= I+1
if I<8 goto L2
L5:J= J+1
if J<=3 goto L1
halt
【解答】
自编8.1
何谓嵌套过程语言运行时的DISPLAY表?它的作用是什么?【解答】。