编译原理-第二章习题与答案
编译原理习题解答

编译原理习题解答第⼆章:习题2-4 Table表var x,y;procedure p;var a;procedure q;var b;beginb:=10;end;procedure s;var c,d;procedure r;var e,f;begincall q;end;begincall r;end;begincall s;end;begincall p;end根据:Page289,变量table:array[0..txmax] of record 结构体以及block函数得到下表,⽽表中各部第三章⽂法和语⾔5. 写⼀⽂法,使其语⾔是偶正整数的集合要求:(1)允许0打头(2)不允许0打头解:(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)P:S→PD|DP->NP|ND→0|2|4|6|8N->0|1|2|3|4|5|6|7|8|9(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)P:S→PD|P0|DP->NR|NR->QR|QD→2|4|6|8N->1|2|3|4|5|6|7|8|9Q->0|1|2|3|4|5|6|7|8|96. 已知⽂法G:<表达式>::=<项>|<表达式>+<项>|<表达式>-<项><项>::=<因⼦>|<项>*<因⼦>|<项>/<因⼦><因⼦>::=(<表达式>)|i。
试给出下述表达式的推导及语法树。
(1)i; (2)(i) (3)i*i;(4)i*i+i; (5)i+(i+i); (6)i+i*i。
解:(1)v=<表达式>=><项>=><因⼦>=>i=w(2)v=<表达式>=><项>=><因⼦>=>(<表达式>)=>(<项>)=>(<因⼦>)=>(i)=w(3)v=<表达式>=><项>=><项>*<因⼦>=><因⼦>*<因⼦>=>i*i=w(4)v=<表达式>=><表达式>+<项>=><项>+<项>=><项>*<因⼦>+<项>=><因⼦>*<因⼦>+<因⼦>=>i*i+i=w(5)v=<表达式>=><表达式>+<项>=><项>+<项>=><因⼦>+<因⼦>=>i+(<表达式>) => i+(<表达式>+<项>)=>i+(<项>+<项>)=> i+(<因⼦>+<因⼦>)=>i+(i+i)=w (6)v=<表达式>=><表达式>+<项>=><项>+<项>=><因⼦>+<项>=>i+<项>=>i+<项>*<因⼦>=> i+<因⼦>*<因⼦>=> i+i*i=w语法树见下图:7. 为句⼦i+i*i 构造两棵语法树,从⽽证明下述⽂法G[<表达式>]是⼆义的。
清华大学编译原理第二版课后习答案

Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理课后习题答案+清华大学出版社第二版

用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地
编译程序大致有哪几种开发技术?
答案:
(1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编
译程序 T0,再把语言 L0 扩充到 L1,此时 L0⊂ L1 ,并用 L0 编写 L1 的编译程序 T1,再把语 言 L1 扩充为 L2,有 L1 ⊂ L2 ,并用 L1 编写 L2 的编译程序 T2,……,如此逐步扩展下 去, 好似滚雪球一样,直到我们所要求的编译程序。 (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。
(main).
答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为:
1
《编译原理》课后习题答案第二章
第 3题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内 容。
name
kind
level/val
adr
size
答案:
题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为:
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
编译原理第二版作业答案_第2章

第二章 文法和语言p48 4、6(6)、11、 12(2)(6)、18(2)4 证明文法G=({E,O},{(,),+,*,v ,d},P ,E )是二义的,其中P 为 E → EOE | (E) | v | d O → + | * 证明:因为E=〉 EOE =〉EOEOE =〉EOEOv =〉EOE+v=〉EOv+v =〉E*v+v =〉v*v+v , 句子v*v+v 有两棵不同的语法树所以文法G 是二义的。
问题:1)只有文字说明,比如v*v+v 有两棵语法树,但没有画出语法树或者最左(最右)推导过程2)给出的是不同句子(v*v+d v+v*d )的语法树 6、已知文法G :EEEE OO v*v+ vE EE E O O v+v* v〈表达式〉∷=〈项〉|〈表达式〉+〈项〉〈项〉∷=〈因子〉|〈项〉*〈因子〉〈因子〉∷=(〈表达式〉)| i试给出下述表达式的推导及语法树(6)i+i*i推导过程:〈表达式〉=〉〈表达式〉+〈项〉E=〉E+T =〉〈表达式〉+〈项〉*〈因子〉=〉E+ T*F=〉〈表达式〉+〈项〉* i =〉E+ T*i=〉〈表达式〉+ 〈因子〉* i =〉E+F*i=〉〈表达式〉+ i* i =〉E+i*i=〉〈项〉+ i* i =〉T +i*i=〉〈因子〉+ i* i =〉F +i*i=〉i +i*i =〉i +i*i 共8步推导语法树:〈表达式〉+〈因子〉〈项〉i 〈因子〉i〈项〉〈项〉〈因子〉i*11、一个上下文无关文法生成句子abbaa的推导树如下:(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→a B→SBB|b(3)因为字符串中的各字符有相对的位置关系,为了能相互区别,给相同的字符标上不同的数字。
编译原理习题解答

编译原理习题解答第⼆章:习题2-4 Table表var x,y;procedure p;var a;procedure q;var b;beginb:=10;end;procedure s;var c,d;procedure r;var e,f;begincall q;end;begincall r;end;begincall s;end;begincall p;end根据:Page289,变量table:array[0..txmax] of record 结构体以及block函数得到下表,⽽表中各部分的含义,第三章⽂法和语⾔5. 写⼀⽂法,使其语⾔是偶正整数的集合要求:(1)允许0打头(2)不允许0打头解:(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)P:S→PD|DP->NP|ND→0|2|4|6|8N->0|1|2|3|4|5|6|7|8|9(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)P:S→PD|P0|DP->NR|NR->QR|QD→2|4|6|8N->1|2|3|4|5|6|7|8|9Q->0|1|2|3|4|5|6|7|8|96. 已知⽂法G:<表达式>::=<项>|<表达式>+<项>|<表达式>-<项><项>::=<因⼦>|<项>*<因⼦>|<项>/<因⼦><因⼦>::=(<表达式>)|i。
试给出下述表达式的推导及语法树。
(1)i; (2)(i) (3)i*i;(4)i*i+i; (5)i+(i+i); (6)i+i*i。
解:(1)v=<表达式>=><项>=><因⼦>=>i=w(2)v=<表达式>=><项>=><因⼦>=>(<表达式>)=>(<项>)=>(<因⼦>)=>(i)=w(3)v=<表达式>=><项>=><项>*<因⼦>=><因⼦>*<因⼦>=>i*i=w(4)v=<表达式>=><表达式>+<项>=><项>+<项>=><项>*<因⼦>+<项>=><因⼦>*<因⼦>+<因⼦>=>i*i+i=w(5)v=<表达式>=><表达式>+<项>=><项>+<项>=><因⼦>+<因⼦>=>i+(<表达式>) => i+(<表达式>+<项>)=>i+(<项>+<项>)=> i+(<因⼦>+<因⼦>)=>i+(i+i)=w (6)v=<表达式>=><表达式>+<项>=><项>+<项>=><因⼦>+<项>=>i+<项>=>i+<项>*<因⼦>=> i+<因⼦>*<因⼦>=> i+i*i=w语法树见下图:7. 为句⼦i+i*i 构造两棵语法树,从⽽证明下述⽂法G[<表达式>]是⼆义的。
编译原理各章习题

第二章高级语言及其语法描述1、设有文法G[S]:S→NN→D|NDD→0|1|2|…|9试写出028和4321的最左推导和最右推导过程。
2、证明文法G[S]是二义性文法:S→if E then S else S |if E then S |sE→0|13、设有文法G[E]:E→E-T|TT→T/F|FF→i|(E)(1)试写出i/(i-i-i)的推导树。
(2)试写出(F-i)/F的短语、简单短语和句柄。
4、设∑={0,1},请给出∑上下列语言的文法(1)所有以0开头的串(2)所有以0开头,以1结尾的串5、证明文法G1和G2等价G1:S→0S1,S→01G2:A→0R,A→01,R→A1第三章有限状态自动机和词法分析1、请用中文描述下列正规式表示的正规集(1)0(0|1)*0(2)0*10*10*10*2、试写出∑={0,1}上下列集合的正则表达式:(1)所有以1开始和结束的符号串。
(2)恰含有3个1的所有符号所组成的集合。
(3)集合{01,1}。
(4)所有以111结束的符号串。
3、试写出∑={0,1}上下述集合的正则表达式: (1)试写出非负整数集的正则表达式。
(2)试写出以非5数字为头的所有非负整数集的正则表达式。
4、试将图3.1中所示的有限状态自动机M 最小化。
图3.1 M 的状态转换图5、设∑={a,b},试构造下述正则表达式的确定性有限状态自动机: (1)a(a|b)*baa (2)(a|b)*bbb *6、对于下列的状态转换矩阵:(1)分别画出相应的状态转换图。
(2)用自然语言分别描述它们所识别的输入串的特征 7、将图3.2所示的非确定的有限状态自动机确定化和最小化。
图3.2 非确定的有限状态自动机M第四章 自顶向下语法分析 1、从下列文法中消去左递归。
(1)S→Aa|bA→Ac|Sd(2)A→A∨B|BB→B∧C|CC→⌝D|DD→(A)|i2、请消去下面文法G[S]中的回溯G[S]:S→aBc|aB→bB|ε3、有文法G[S]:S→ABA→a|εB→b|ε(1)验证该文法是LL(1)文法;(2)请构造预测分析表4、考虑文法G[A]:A→aABc|d|εB→Bb|b(1)改写为LL(1)文法;(2)请构造预测分析表(3)给出句子adbc的分析过程第五章自底向上语法分析1、请对下列文法G[S]构造算符优先分析表S→bAbA→(B|aB→A a)2、文法G[S]:S→S(SaS→b该文法是LR(0)还是SLR(1)文法?3、文法G[A]:A→(A)|a构造该文法的LR(0)分析表,并请描述((a))的分析过程。
编译原理第二章练习题(注意里面的指数和带星号的地方)
编译原理第二章练习题
专业班级: 学号: 姓名: 一,单选题
1.给定文法:A →bA|cc,下面的符号串为该文法句子的是( )。
① cc ② bcbcc ③ bccbcc ④ bbbcc
A. ①④
B. ①②③
C. ①③
D. ②③④
2.文法G[Z]和语言L ( G[Z ])存在如下关系( )。
A.一一对应:一个文法对应唯一的语言;并且反过来,一 个语言对应唯一的文法。
B.一个语言对应唯一的文法,反之则不然。
C.一个文法对应唯一的语言,反之则不然。
D.若G 为非二义性文法,则C 是正确的;若G 为二义性文法
,则一个文法不对应唯一的语言。
3. 有文法G[E]:E →-EE , E →-E ,E →a|b|c 则文法的句子--a -bc 的所有可能的语法树有( )棵。
A. 1
B. 2
C. 4
D. 3
4.有文法G[S],如果S * x ,( x ∈V ),则x 是( )。
A. 句型
B. 句子
C. A 和B
D. 非A 和B
二.构造一个上下文无关文法G ,使得:
L(G)={ m m b a
2 |m>0}
三.已知文法G[E]: E →ET+ | T
T →TF* | F
F →FP ↑| P
P →(E) | i
有句型TF*PP ↑+,问此句型的短语,简单短语和句柄是什么?(画语法树说明)
四.请用语法树证明文法G[s]是二义性的,G[s]:
S→SS | (S) | ( )。
五.已知文法G[Z]:Z→AB
A→aAb |ab
B→Bc | ε则,L(G[Z] )=?。
编译原理第二版课后习答案
《编译原理》课后习题答案第一章第?1?章引论第?1?题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)?编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)?源程序:源语言编写的程序称为源程序。
(3)?目标程序:目标语言书写的程序称为目标程序。
(4)?编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)?后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)?遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第?2?题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含?8?个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理第二版作业答案_第2章
第二章 文法和语言p48 4、6(6)、11、 12(2)(6)、18(2)4 证明文法G=({E,O},{(,),+,*,v ,d},P ,E )是二义的,其中P 为 E → EOE | (E) | v | d O → + | * 证明:因为E=〉 EOE EOE = =〉EOEOE EOEOE==〉EOEOv EOEOv = =〉EOE+v=〉EOv+v EOv+v==〉E*v+v E*v+v = =〉v*v+v , 句子v*v+v 有两棵不同的语法树所以文法G 是二义的。
问题:1)只有文字说明,比如v*v+v 有两棵语法树,但没有画出语法树或者最左(最右)推导过程2)给出的是不同句子(v*v+d v+v*d )的语法树 6、已知文法G :E E EE E OO v*v+ vE E E E E O O v+v* v〈表达式〉∷=〈项〉|〈表达式〉+〈项〉〈项〉 ∷=〈因子〉|〈项〉*〈因子〉〈因子〉 ∷=(〈表达式〉)| i试给出下述表达式的推导及语法树(6)i+i*i推导过程:〈表达式〉=〉〈表达式〉+〈项〉 E=〉E+T =〉〈表达式〉+〈项〉*〈因子〉 =〉E+ T*F=〉〈表达式〉+〈项〉* i =〉E+ T*i=〉〈表达式〉+ 〈因子〉* i =〉E+F*i=〉〈表达式〉+ i* i =〉E+i*i=〉〈项〉+ i* i =〉T +i*i=〉〈因子〉+ i* i =〉F +i*i=〉i +i*i =〉i +i*i 共8步推导语法树:〈表达式〉〈表达式〉+〈因子〉 〈项〉i 〈因子〉i〈项〉〈项〉 〈因子〉i*11、一个上下文无关文法生成句子abbaa 的推导树如下:(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|e A →a B →SBB|bSABSS B B a 1 a 3b 2 b 1 eAa 2(3)因为字符串中的各字符有相对的位置关系,为了能相互区别,给相同的字符标上不同的数字。
编译原理第二章练习题
A. 语法分析 B. 语义分析 C. 词法分析 D. 目标代码生成 6. 正则式( )与(a*|b)*(c|d)等价。 A. a*(c|d)|b(c|d) B. B. a*(c|d)*|b(c|d)* C. a*(c|d)|b*(c|d) D. (a|b)*c|(a|b)*d 7. 同正则式 a*b*等价的文法是( ) 。 A. G1:SaS|bS| B. G2:SaSb| C. G3:SaS|Sb| D. G4:SabS| 8. 给定语言 L(G)={anbbn|n1},则文法( )可产生语言 L(G)。 A. ZaZb|aAb|b, AaAb|b B. AAbB, AaA|a, BbB|b C. AaAb|b D. ZaAb, AaAb|b 9. 由文法识别符号通过若干步(包括 0 步)推导得到的符号串是( ) 。 A. 语言 B. 句型 C. 句子 D. 句柄 10. 句型最左简单子树的叶节点,自左向右排列组成句型的( ) 。 11. 设文法 G=({S}, {0, 1}, P, S),其中 P={SSS|0S1|1S0|},该文法所描述的语言为 ( ) 。 A. {0n1n|n0} B. {w|w{0|1}*}且 w 中 0 和 1 的个数相等 C. {0m1k|m, k0}{1m0k|m, k0} D. {0n1n|n0}{1n0n|n0} 四、问答题 1. 设有文法 G[S]: SAa ABb|CD Ce 求 VN、VT 和该文法所描述的语言 L(G)。
5. 设有文法 G[S]: SaAb ABcA|B Bidt| 请问下列符号串是否为文法的句子或句型。 ①aidtcBcAb ②aidtccb ③ab ④abidt ⑤aidtcidtcidtb ⑥aidtBb 6. 已知文法 G[E]: ET|E+T|E- T TF|T*F|T/F F(E)|i ①该文法的识别符号? ②给出 VN 和 VT ③给出句型 T+T*F+i 的所有短语、直接短语和句柄。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 习题解答 1.文法G[S]为: S->Ac|aB A->ab B->bc 写出L(G[S])的全部元素。 [答案] S=>Ac=>abc 或S=>aB=>abc 所以L(G[S])={abc} ============================================== 2. 文法G[N]为: N->D|ND D->0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? [答案] G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD.... =>NDDDD...D=>D......D =============================================== 3.已知文法G[S]: S→dAB A→aA|a B→ε|bB 问:相应的正规式是什么?G[S]能否改写成为等价的正规文法? [答案] 正规式是daa*b*; 相应的正规文法为(由自动机化简来): G[S]:S→dA A→a|aB B→aB|a|b|bC C→bC|b 也可为(观察得来):G[S]:S→dA A→a|aA|aB B→bB|ε ===============================================================================
4.已知文法G[Z]: Z->aZb|ab 写出L(G[Z])的全部元素。 [答案] Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb L(G[Z])={anbn|n>=1} ==============================================================================
5.给出语言{anbncm|n>=1,m>=0}的上下文无关文法。 [分析] 本题难度不大,主要是考上下文无关文法的基本概念。上下文无关文法的基本定义是:A->β,A∈Vn,β∈(Vn∪Vt)*,注意关键问题是保证anbn的成立,即“a与b的个数要相等”,为此,可以用一条形如A->aAb|ab的产生式即可解决。
[答案] 构造上下文无关文法如下: S->AB|A A->aAb|ab B->Bc|c [扩展] 凡是诸如此类的题都应按此思路进行,本题可做为一个基本代表。基本思路是这样的:
要求符合anbncm,因为a与b要求个数相等,所以把它们应看作一个整体单元进行,而cm做为另一个单位,初步产生式就应写为S->AB,其中A推出anbn,B推出cm。因为m可为0,故上式进一步改写为S->AB|A。接下来考虑A,凡是要求两个终结符个数相等的问题,都应写为A->aAb|ab形式,对于B就很容易写成B->Bc|c了。
==============================================================================
6 .写一文法,使其语言是偶正整数集合。 要求: (1)允许0开头; (2)不允许0开头。 [答案] (1)允许0开头的偶正整数集合的文法 E->NT|G|SFM T->NT|G N->D|1|3|5|7|9 D->0|G G->2|4|6|8 S->NS|ε F->1|3|5|7|9|G M->M0|0 (2)不允许0开头的偶正整数集合的文法 E->NT|D T->FT|G N->D|1|3|5|7|9 D->2|4|6|8 F->N|0 G->D|0 =============================================================================
7.已知文法G: E->E+T|E-T|T T->T*F|T/F|F F->(E)|i 试给出下述表达式的推导及语法树 (1)i; (2)i*i+i (3)i+i*i (4)i+(i+i) [答案] (1)E=>T=>F=>i (2)E=>E+T=>T+T=>T*F+T=>F*F+T=>i*F+T=>i*i+T=>i*i+F=>i*i+i (3)E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i (4)E=>E+T=>T+T=>F+T=>i+T=>i+F=>i+(E)=>i+(E+T)=>i+(T+T)=>i+(F+T) =>i+(i+T)=>i+(i+F)=>i+(i+i) 8 .为句子i+i*i构造两棵语法树,从而证明下述文法G[]是二义的。
〈表达式〉->〈表达式〉〈运算符〉〈表达式〉|(〈表达式〉)|i 〈运算符〉->+|-|*|/ [答案] 可为句子i+i*i构造两个不同的最右推导: 最右推导1 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉 =>〈表达式〉〈运算符〉i =>〈表达式〉* i =>〈表达式〉〈运算符〉〈表达式〉* i =>〈表达式〉〈运算符〉i * i =>〈表达式〉+ i * i => i + i * i 最右推导2 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉 =>〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式> =>〈表达式〉〈运算符〉〈表达式〉〈运算符〉 i =>〈表达式〉〈运算符〉〈表达式〉 * i => 〈表达式〉〈运算符〉i * i =>〈表达式〉+ i * i => i + i * i 所以,该文法是二义的。 ======================================================================
9. 文法G[S]为: S->Ac|aB A->ab B->bc 该文法是否为二义的?为什么? [答案] 对于串abc (1)S=>Ac=>abc (2)S=>aB=>abc 即存在两不同的最右推导 所以,该文法是二义的。 ===========================================================================
10.考虑下面上下文无关文法: S->SS*|SS+|a (1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。 (2) G[S]的语言是什么? [答案] (1)此文法生成串aa+a*的最右推导如下 S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a* (2)该文法生成的语言是即加法和乘法的逆波兰式, ==============================================================================
11. 令文法G[E]为: E->E+T|E-T T->T*F|T/F|F F->(E)|I 证明E+T*F是它的一个句型,指出这个句型的所有短语、直接短语和句柄。 [答案] 此句型对应语法树如右,故为此文法一个句型。 或者:因为存在推导序列: E=>E+T=>E+T*F,所以 E+T*F句型 此句型相对于E的短语有:E+T*F;相对于T的短语有T*F, 直接短语为:T*F;。 句柄为:T*F
12.已知文法G[E]: E→ET+|T T→TF* | F F→F^ | a 试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄. [答案] 该句型对应的语法树如下: 该句型相对于E的短语有FF^^*;相对于T的短语有FF^^*,F;相对于F的短语有F^;F^^;简单短语有F;F^;句柄为F. 13.一个上下文无关文法生成句子abbaa的推导树如下: (1)给出串abbaa最左推导、最右推导。 (2)该文法的产生式集合P可能有哪些元素? (3)找出该句子的所有短语、直接短语、句柄。
(1)串abbaa最左推导: S=>ABS=>aBS=>aSBBS=>aεBBS=>aεbBS=>aεbbS=>aεbbAa=>aεbbaa 最右推导: S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Aεbbaa=>aεbbaa (2)产生式有:S→ABS |Aa|ε A→a B→SBB|b (3)该句子的短语有a1b1b2a2a3、a1、b1、b2、b1b2、a2a3、a2; 直接短语有a1、b1、b2、a2; 句柄是a1。 ===================================================================== 14.给出生成下列语言的上下文无关文法。 (1){ anbnambm |n,m>=0} (2) { 1n0m 1m0n| n,m>=0} (3){WaWr|W属于{0|a}*,Wr表示W的逆} [答案] (1){anbnambm| n,m>=0} S->AA A->aAb|ε (2) { 1n0m 1m0n| n,m>=0} S->1S0|A A->0A1|ε (3){WaWr|W属于{0|a}*,Wr表示W的逆} S->0S0|1S1|ε =================================================================== 15 .给出生成下列语言的三型文法。 (1){ an|n >=0 } (2){ anbm|n,m>=1 } (3){anbmck|n,m,k>=0 } [答案] (1) { an|n >=0 }的三型文法为: S->aS|ε (2){ anbm|n,m>=1 }的三型文法为: S->aA A->aA|bB B->bB|ε (3){anbmck|n,m,k>=0 }的三型文法为: A->aA|bB|cC|ε