习题第3章文法和语言参考答案

合集下载

编译原理教程-课后习题答案第三章语法分析

编译原理教程-课后习题答案第三章语法分析
第三章 语法分析
第三章 语法分析
3.1 完成下列选择题:
(1) 文法G:S→xSx|y所识别的语言是 。
a. xyx
b. (xyx)*
c. xnyxn(n≥0)
d. x*yx*
(2) 如果文法G是无二义的,则它的任何句子α 。
a. 最左推导和最右推导对应的语法树必定相同
b. 最左推导和最右推导对应的语法树可能不同
能否不画出语法树,而直接由定义(即在句型中)寻 找满足某个产生式的候选式这样一个最左子串(即句柄) 呢?例如,对句型aAaBcbbdcc,我们可以由左至右扫描 找到第一个子串AaB,它恰好是满足A→AaB右部的子串; 与树(a)对照,AaB的确是该句型的句柄。是否这一方法 始终正确呢?我们继续检查句型aAcbBdcc,由左至右找 到第一个子串c,这是满足A→C右部的子串,但由树(b) 可知,c不是该句型的句柄。由此可知,画出对应句型 的语法树然后寻找最左直接短语是确定句柄的好方法。
第三章 语法分析
(2) 为了构造字母表Σ ={a,b}上同时只有奇数个a 和奇数个b的所有串集合的正规式,我们画出如图3-3 所示的DFA,即由开始符S出发,经过奇数个a到达状态 A,或经过奇数个b到达状态B;而由状态A出发,经过 奇数个b到达状态C(终态);同样,由状态B出发经过奇 数个a到达终态C。
第三章 语法分析
3.9 考虑文法G[S]: S→(T) | a+S | a T→T,S | S
消除文法的左递归及提取公共左因子,然后对每 个非终结符写出不带回溯的递归子程序。
【解答】 消除文法G[S]的左递归: S→(T) | a+S | a T→ST′ T′→,ST′| ε
第三章 语法分析 提取公共左因子:

清华版编译原理课后答案——第三章参考答案

清华版编译原理课后答案——第三章参考答案

第三章1、L(G[S])={ abc }2、L(G[N])={ n位整数或空字符串| n>0 }3、G[E]:E—>E+D | E-D | DD—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 94、L(G[Z])={ a n b n | n>0 }5、(1) 考虑不包括“0”的情况G[S]:S—>0S | ABC | 2 | 4| 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8考虑包括“0”的情况:G[S]:S—>AB | CB—>AB | CA—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>0 | 2 | 4 | 6 | 8(2)方法1:G[S]:S—> ABC | 2 | 4 | 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8方法2:G[S]:S—>AB | CB—> AB | 0B | C | 0A—> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>2 | 4 | 6 | 86、设<表达式>为E,<项>为T,<因子>为F,注:推导过程不能省略,以下均为最左推导(1) E => T => F => i(4) E => E+T => T+T => T*F+T => F*F+T => i*F+T => i*i+T => i*i+F => i*i+i(6) E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*I7、<表达式><表达式>*<表达式><表达式>+<表达式>i i i<表达式><表达式>+<表达式>i <表达式>*<表达式>i i8、是有二义性的,因为句子abc 有两棵语法树(或称有两个最左推导或有两个最右推导)最左推导1:S => Ac => abc最左推导2:S => aB => abc9、(1)(2) 该文法描述了变量a 和运算符+、*组成的逆波兰表达式10、(1) 该文法描述了各种成对圆括号的语法结构(2) 是有二义性的,因为该文法的句子()()存在两种不同的最左推导:最左推导1:S => S(S)S => (S)S => ()S => ()S(S)S => ()(S)S => ()()S => ()()最左推导2:S => S(S)S => S(S)S(S)S => (S)S(S)S => ()S(S)S => ()(S)S => ()()S => ()()11、(1) 因为从文法的开始符E 出发可推导出E+T*F ,推导过程如下:E => E+T => E+T*F ,所以E+T*F 是句型。

编译原理练习(3-4章)含答案

编译原理练习(3-4章)含答案
编译原理练习
第三章
文法和语言
符号和符号串
字母表和符号串 符号串的运算 集合的闭包运算 文法的定义 推导的定义 语言的定义 句型分析 语法树 文法和语言的二义性
2
文法和语言的 形式化定义 文法的类型 上下文无关文法
第三章 1、作业P48 第5题 写一文法,使其语言是偶正整数的集合。 要求: 允许 0 打头。 思路:首先根据集合的描述设计几个句子,然后从句子中找出规律(或共性 ),把它们的性质用产生式表示出来。 提示:(1)生成的偶正数应不包括,若干个0。 (2)将偶正数分为两类:一类为允许若干个0(0个数>=0)后跟不以0开头 的偶正数;一类为允许若干个0后跟2|4|6|8的偶正数(如0002,即不允许只含 有若干0 )。 2、为只包含数字、 , 的表达式,例如 9 2 5等构造一个文法,使得 和 运算满足右结合, 的运算优先级高于。 提示:结合性和运算优先性可以根据语法树的层次考虑。进而思考左递归产 生式与运算符的结合性的关系。 3、一个上下文无关文法生成句子 abbaa 的推导树如下: (1)给出串 abbaa 最左推导、最右推导。 (2)该文法的终结符、非终结符、产生式集合 P 可能有哪些元素? (3)找出该句子的所有短语、直接短语、句柄。 提示:知识点:语法树的构造,文法的组成,短语等概念。 4、给出生成下述语言的三型文法:{anbmck|n, k>=1,m>0 } 提示:(1)三型文法中产生式的特点 (2)可参考P49 第16题
参考课件 例2:接受0和1的个数都是偶数的字符串的DFA
开始 偶 0偶 1 0
1 0 0 1 1 0 1 0 偶 0奇 1
奇 0偶 1
2
Hale Waihona Puke 13奇 0奇 1

清华大学编译原理第二版课后习答案

清华大学编译原理第二版课后习答案

Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。

答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

编译原理课后习题答案+清华大学出版社第二版

编译原理课后习题答案+清华大学出版社第二版
也称基地址。 SL: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 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
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。

编译原理教程课后习题答案——第三章

编译原理教程课后习题答案——第三章

第三章语法分析3.1 完成下列选择题:(1) 文法G:S→xSx|y所识别的语言是。

a. xyxb. (xyx)*c. xnyxn(n≥0)d. x*yx*(2) 如果文法G是无二义的,则它的任何句子α。

a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同(3) 采用自上而下分析,必须。

a. 消除左递 a. 必有ac归b. 消除右递归c. 消除回溯d. 提取公共左因子(4) 设a、b、c是文法的终结符,且满足优先关系ab和bc,则。

b. 必有cac. 必有bad. a~c都不一定成立(5) 在规范归约中,用来刻画可归约串。

a. 直接短语b. 句柄c. 最左素短语d. 素短语(6) 若a为终结符,则A→α·aβ为项目。

a. 归约b. 移进c. 接受d. 待约(7) 若项目集Ik含有A→α·,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A→α·”动作的一定是。

a. LALR文法b. LR(0)文法c. LR(1)文法d. SLR(1)文法(8) 同心集合并有可能产生新的冲突。

a. 归约b. “移进”/“移进”c.“移进”/“归约”d. “归约”/“归约”【解答】(1) c (2) a (3) c (4) d (5) b (6) b (7) d (8) d3.2 令文法G[N]为G[N]: N→D|NDD→0|1|2|3|4|5|6|7|8|9(1) G[N]的语言L(G[N])是什么?(2) 给出句子0127、34和568的最左推导和最右推导。

【解答】(1) G[N]的语言L(G[N])是非负整数。

(2) 最左推导:NNDNDDNDDDDDDD0DDD01DD012D0127NNDDD3D34NNDNDDDDD5DD56D568最右推导:NNDN7ND7N27ND27N127D1270127NNDN4D434NNDN8ND8N68D685683.3 已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。

《编译原理教程》课后习题答案第三章语法分析

《编译原理教程》课后习题答案第三章语法分析
{ S ( ); T′( ); } void T′ ( ) { if ( lookahead==′, ′) { match (′, ′); S ( ); T′ ( ); } }
第三章 语法分析
3.10 已知文法G[A]: A→aABl|a B→Bb|d
(1) 试给出与G[A]等价的LL(1)文法G[A′]; (2) 构造G[A′]的LL(1)分析表; (3) 给出输入串aadl#的分析过程。 【解答】 (1) 文法G[A]存在左递归和回溯,故其不是 LL(1)文法。要将G[A]改造为LL(1)文法,首先要消除文法 的左递归,即将形如P→Pα | β 的产生式改造为 P→β P′ P→α P′| ε
对A′→ABl来说, FIRST(A)∩FOLLOW(A′)={a}∩{#,d}=Φ ,所以文法 G′[A]为所求等价的LL(1)文法。
第三章 语法分析
(2) 构造预测分析表的方法如下: ① 对文法G[A′]的每个产生式A→α 执行②、③ 步。 ② 对 每 个 终 结 符a∈FIRST(A) ,把 A→α 加 入 到 M[A,a]中,其中α 为含有首字符a的候选式或为唯一的 候选式。 ③ 若ε ∈FIRST(A),则对任何属于FOLLOW(A)的 终结符b,将A→ε 加入到M[A,b]中。把所有无定义的 M[A,a]标记上“出错”。 由此得到G[A′]的预测分析表,见表3-1。
c. 最左推导和最右推导必定相同
d. 可能存在两个不同的最左推导,但它们对应的语法树 相同
第三章 语法分析
(3) 采用自上而下分析,必须 。
a. 消除左递归
b. 消除右递归
c. 消除回溯
d. 提取公共左因子
(4) 设a、b、c是文法的终结符,且满足优先关系 ab和bc,则 。

编译原理教程-课后习题答案第三章语法分析ppt课件

编译原理教程-课后习题答案第三章语法分析ppt课件

a. LALR文法 b. LR(0)文法
c. LR(1)文法 d. SLR(1)文法
第三章 语法分析
(8) 同心集合并有能够产生新的 冲突。
a. 归约
b. “移进〞/“移进〞
c.“移进〞/“归约〞 〞
d. “归约〞/“归约
【解答】 (1) c (2) a (3) c (5) b (6) b (7) d (8) d
#⋖ (⋖,⋖ (⋖a⋗)⋗)⋗# 因此,素短语为a。
第三章 语法分析
3.8 下述文法描画了C言语整数变量的声明语句: G[D]: D→TL T→int|long|short L→id|L,id
(1) 改造上述文法,使其接受一样的输入序列, 但文法是右递归的;
(2) 分别用上述文法G[D]和改造后的文法G[D′] 为输入序列int a,b,c构造分析树。
第三章 语法分析
(2) 为了构造字母表Σ={a,b}上同时只需奇数个a 和奇数个b的一切串集合的正规式,我们画出如图3-3 所示的DFA,即由开场符S出发,经过奇数个a到达形状 A,或经过奇数个b到达形状B;而由形状A出发,经过 奇数个b到达形状C(终态);同样,由形状B出发经过奇 数个a到达终态C。
第三章 语法分析
第三章 语法分析
3.1 完成以下选择题:
(1) 文法G:S→xSx|y所识别的言语是 。
a. xyx
b. (xyx)*
c. xnyxn(n≥0)
d. x*yx*
(2) 假设文法G是无二义的,那么它的任何句子α 。
a. 最左推导和最右推导对应的语法树必定一样
b. 最左推导和最右推导对应的语法树能够不同 c. 最左推导和最右推导必定一样
能否不画出语法树,而直接由定义(即在句型中)寻觅满足某 个产生式的候选式这样一个最左子串(即句柄)呢?例如,对句型 aAaBcbbdcc,我们可以由左至右扫描找到第一个子串AaB,它恰好 是满足A→AaB右部的子串;与树(a)对照,AaB确实是该句型的句 柄。能否这一方法一直正确呢?我们继续检查句型aAcbBdcc,由 左至右找到第一个子串c,这是满足A→C右部的子串,但由树(b) 可知,c不是该句型的句柄。由此可知,画出对应句型的语法树然 后寻觅最左直接短语是确定句柄的好方法。

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3章文法和语言第1《编译原理》课后习题答案第三章第3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。

答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。

V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D......D或者:允许0 开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。

答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。

盛威网(/doc/dc3359286.html,)专业的计算机学习网站 1《编译原理》课后习题答案第三章答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1}第5 题写一文法,使其语言是偶正整数的集合。

要求:(1) 允许0 打头;(2)不允许0 打头。

答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。

编译原理课后习题答案解析+清华大学出版社第二版

编译原理课后习题答案解析+清华大学出版社第二版
答案: PL/0 语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储
管理。(数组 CODE 存放的只读目标程序,它在运行时不改变。)运行时的数据区 S 是由解 释程序定义的一维整型数组,解释执行时对数据空间 S 的管理遵循后进先出规则,当每个 过程(包括主程序)被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。 应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。
RA 的用途说明如下: T: 栈顶寄存器 T 指出了当前栈中最新分配的单元(T 也是数组 S 的下标)。 B:基址寄存器,指向每个过程被调用时,在数据区 S 中给它分配的数据段起 始 地址,
也称基地址。 SL: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是 边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源 程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来 完成,即只翻译不执行。

第4题
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代 码生成)报告的。 (1) else 没有匹配的 if (2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
CAL L A 调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基址 寄存器 B 中,目标程序的入口地址 A 的值送指令地址寄存器 P 中,使指令从 A 开始执 行。 第6题

编译原理教程-课后习题答案第三章语法分析

编译原理教程-课后习题答案第三章语法分析

c. 最左推导和最右推导必定相同
d. 可能存在两个不同的最左推导,但它们对应的语法树 相同
第三章 语法分析
(3) 采用自上而下分析,必须 。
a. 消除左递归
b. 消除右递归
c. 消除回溯
d. 提取公共左因子
(4) 设a、b、c是文法的终结符,且满足优先关系 ab和bc,则 。
a. 必有ac
b. 必有ca
第三章 语法分析 表3-1 预测分析表
A A′ B B′
能否不画出语法树,而直接由定义(即在句型中)寻 找满足某个产生式的候选式这样一个最左子串(即句柄) 呢?例如,对句型aAaBcbbdcc,我们可以由左至右扫描 找到第一个子串AaB,它恰好是满足A→AaB右部的子串; 与树(a)对照,AaB的确是该句型的句柄。是否这一方法 始终正确呢?我们继续检查句型aAcbBdcc,由左至右找 到第一个子串c,这是满足A→C右部的子串,但由树(b) 可知,c不是该句型的句柄。由此可知,画出对应句型 的语法树然后寻找最左直接短语是确定句柄的好方法。
c. 必有ba
d. a~c都不一定成立
第三章 语法分析
(5) 在规范归约中,用 来刻画可归约串。
a. 直接短语
b. 句柄
c. 最左素短语 d. 素短语
(6) 若a为终结符,则A→α ·aβ 为 项目。
a. 归约
b. 移进
c. 接受
d. 待约
(7) 若项目集Ik含有A→α · ,则在状态k时,仅 当 面 临 的 输 入 符 号 a∈FOLLOW(A) 时 , 才 采 取
第三章 语法分析
因此,文法G[S]为二义文法(对句子abbb也可画出 两棵不同语法树)。
3.4 已知文法G[S]为S→SaS|ε ,试证明文法G[S] 为二义文法。

编译原理教程-课后习题答案第三章语法分析

编译原理教程-课后习题答案第三章语法分析

第三章 语法分析 来消除左递归。由此,将产生式B→Bb|d改造为
B→dB′ B′→bB′| ε
其次,应通过提取公共左因子的方法来消除G[A]中的回 溯,即将产生式A→aABl|a改造为 A→aA′ A′→ABl | ε
最后得到改造后的文法为 G[A′]:A→aA′ A′→ABl | ε B→dB′ B′→bB′| ε
“A→α · ”动作的一定是 。
a. LALR文法 b. LR(0)文法
c. LR(1)文法 d. SLR(1)文法
第三章 语法分析
(8) 同心集合并有可能产生新的 冲突。
a. 归约
b. “移进”/“移进”
c.“移进”/“归约”
d. “归约”/“归约”
【 解 答 】 (1) c (2) a (3) c (5) b (6) b (7) d (8) d
第三章 语法分析 表3-1 预测分析表
A A′ B B′
第三章 语法分析 (2) 句子acabcbbdcc的最左推导如下: SaAcBaAaBcBacaBcBacabcBacabcbScAacabcbBdcA acabcbbdcAacabcbbdcc 3.7 对于文法G[S]: S→(L)|aS|a
L→L,S|S (1) 画出句型(S,(a))的语法树; (2) 写出上述句型的所有短语、直接短语、句柄、素
第三章 语法分析
求得:
FIRST(A)={a}
FIRST(A′)={a, ε }
FIRST(B)={d}
FIRST(B′)={b, ε }
对文法开始符号A,有FOLLOW(A)={#}。
由 A′→ABl 得 FIRST(B)\{ ε }FOLLOW(A) , 即 FOLLOW(A)={#,d};

编译原理第3章 习题

编译原理第3章 习题

E
E → T | E+T | E-T T → F | T*F | T/F F → ( E ) | i
E
+
T
短语
E+T*F、T*F 直接短语 T*F 句柄 T*F
T
*
F

作业3.12 下述文法G[E]生成的语言是什么? 给出该文法的一个句子,该句子至少包含5个终 结符,构造该句子的语法树。 证明:<E><T><F><MOP><POP>是G[<E>]的 句型,并指出该句型的所有短语、直接短语和 句柄
S→aSPQ | abQ QP→PQ bP→bb bQ→bc cQ→cc

练习题
练习3.1

文法G:S→xSx|y所识别的语言是
语言 所有句子的集合称为语言。设 G是给的文法,S是开始符,则由文 法G所定义的语言L(G)可描述如下: L(G)={x| S *x, xVT*} 正规集 正规式所能描述出的所有符 号串,本质上讲就是该正规式所表示 的所有语言,记为L(e)
项 因子
(
表达式 +
)
表达式 项 因子 i
项 因子 i
作业3.6 已知文法,给出下述表达式的推 导及语法树
(5)i+(i+i)
<表达式> <表达式>+<项> <项>+<项> <因子>+<项> i+<项> i+<因子> i+(<表达式>) i+(<表达式>+<项>) i+(<项>+<项>) i+(<因子>+<项>) i+(i+<项>) i+(i+<因子>) i+(i+i)

编译原理文法和语言答案

编译原理文法和语言答案

练习1. 文法和语言1. 文法: Z → U0 | V1 U → Z1 | 1 V → Z0 | 0(1) 请写出全部由此文法描述的只含有四个符号的句子. (2) 该文法是 Chomsky 几型文法? Answer :(1) 1010, 0110, 1001, 0101 (2) 3型文法2. 给定前缀表示的表达式文法 G : (1) E → -EE (2) E → -E (3) E → a (4) E → b (5) E → c试问 --a-bc 是否 L(G) 的句子?若是,请给出该句子所有可能的分析树;若不是,请说明理由.Answer : --a-bc 是L(G)的句子。

所有可能的分析树如下。

(1) (2) (3)E -E E-E c-E b E -EE -E -E EE--E Ec-E E3. 考虑文法:S → ( L ) | a L → L, S | S写出句型 ( a , ( a , a ) ) 的最左推导和最右推导。

Answer :(1) 最左推导:S lm=>(L)lm=>(L,S)lm=>(S,S)lm=>(a,S)lm=>(a,(L))lm=>(a,(L,S))lm=>(a,(S,S))lm=>(a,(a,S))lm=>(a,(a,a))(2) 最右推导:S rm=>(L)rm=>(L,S)rm=>(L,(L))rm=>(L,(L,S))rm=>(L,(L,a))rm=>(L,(S,a))rm=>(L,(a,a))rm=>(S,(a,a))rm=>(a,(a,a))4. 考虑文法:S → aSbS | bSaS |ε写出句型 abab 的两个最左推导。

Answer :(1) S lm=>aSbS lm=> abSaSbS lm=> abaSbS lm=> ababS lm=> abab(2) S lm=>aSbS lm=> abS lm=> abaSbS lm=> ababS lm=> abab5. 文法 G : P → PaP | PbP | cP | Pe | f证明文法 G 是二义文法. ** 通过证明句型 f b f b f 存在两棵分析树. Answer : 因为存在两个分析树,所以是二义文法。

编译原理第3章习题及答案(文法和语言)

编译原理第3章习题及答案(文法和语言)
16.构造一个二义性文法。
17.教材3.14题
18.教材3.16题
习题 第3章 文法和语言 参考答案
1.写一文法,使其语言是偶整数集合。
解:允许以0打头
G:N→+A|-A|A
A→DA|E
D→0|1|2|3|4|5|6|7|8|9
E→0|2|4|6|8
2.写一文法,使其语言是偶整数集合,但不允许由0打头。
Q→b
A→aAQBR|a
R→c
11.已知C语言的下标变量形如:
a[E][E]…[E]
按第10题要求的文法G2的形式写出下标变量文法。
解:G:S→aA
A→[EB
B→]A
B→]
12.设有文法G1:S → aBcA
S → aBdB
A → bA
A → aB
B → BdBຫໍສະໝຸດ → a将其改写成文法G2,使得对每个非终结符均无两个不同规则能导出相同的终结开头符。
解:二义性文法G:S→aS|Sa|a
∵句子aa存在两棵语法树:
∴G是二义性文法。
17.教材3.14题
解:(1) G1:S→CD (2) G2:S→1S0|A (3) G3:S→0S0|aSa|a
C→aCb|A→0A1|
D→aDb|
18.教材3.16题
解:(1) G1:A→aA|(2) G2:A→aA|aB (3) G3:A→aA|bB|cC|
A → a
将其改写成以下形式的文法G2,每条规则形如:
V → pX1X2…Xn
或V → q
其中V和Xi为非终结符,p和q为终结符。
11.已知C语言的下标变量形如:
a[E][E]…[E]
按第10题要求的文法G2的形式写出下标变量文法。

编译原理第二版课后习答案

编译原理第二版课后习答案

《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第2题一个典型的编译程序通常由哪些部分组成各部分的主要功能是什么并画出编译程序的总体结构图。

答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。

编译原理课后习题答案解析+清华大学出版社第二版

编译原理课后习题答案解析+清华大学出版社第二版
第6题
计算机执行用高级语言编写的程序有哪些途径它们之间的主要区别是什么
答案:计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。 像 Basic 之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语
言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一 条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反 复。
第2题
若 PL/0 编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方式分 别解决递归调用和非局部变量的引用问题,试写出下列程序执行到赋值语句 b∶ =10 时运行 栈的布局示意图。 var x,y; procedure p; var a; procedure q; var b; begin (q) b∶ =10; end (q); procedure s; var c,d; procedure r; var e,f; begin (r) call q; end (r); begin (s) call r; end (s); begin (p) call s;
(2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析
第5题
编译程序大致有哪几种开发技术
答案:
(1) 自编译:用某一高级语言书写其本身的编译程序。 (2) 交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3) 自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的
第6题
给出对 PL/0 语言作如下功能扩充时的语法图和 EBNF 的语法描述。 (1) 扩充条件语句的功能使其为: if〈条件〉then〈语句〉[else〈语句〉] (2) 扩充 repeat 语句为: repeat〈语句〉{;〈语句〉}until〈条件〉

第三章 文法和语言课后习题参考答案

第三章 文法和语言课后习题参考答案

第三章文法和语言课后习题参考答案第三章文法和语言课后习题参考答案1.l(g)={abc}2.l(g[n])是无符号整数。

3.g3:e→d+e|d-e|dD→0|1|2|3|4|5|6|7|8|94. l(g[z])={anbn | n>0}5.写一文法,使其语言是偶正整数的集合要求:(1)允许0前导(2)不允许0前导解决方案:(1)g[s]=({s,p,d,n},{0,1,2,…,9},p,s)p:s?pd|dp->np|nD0|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:spd | 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)=>=>=>i(2) =>=>=>=>()=>()=>()=>(i)(3)=>=>=>*=>*=>i*i (4)=>+=>+=>*+=>*+=>i*i+i=w(5)=>+=>+=>+=>i+()=>i+(+)=>i+(+)=>i+(+)=>i+(i+i)(6)=>+=>+=>+=>i+ =>i+*=>i+*=>i+i*i一语法树见下图:(1)二,(2)(i)()我(4)i*i+i+*我i我(5)i+(i+i)+我()+我(6)i+i*i+我*i我(3)i*i*我i我7.为句子i+i*i构造两棵语法树,从而证明下述文法g[]是二义的。

编译原理练习(3-4章)含答案

编译原理练习(3-4章)含答案
提示:(1)生成的偶正数应不包括,若干个0。 (2)将偶正数分为两类:一类为允许若干个0(0个数>=0)后跟不以0开头 的偶正数;一类为允许若干个0后跟2|4|6|8的偶正数(如0002,即不允许只含 有若干0 )。 2、为只包含数字、 , 的表达式,例如 9 2 5等构造一个文法,使得 和 运算满足右结合, 的运算优先级高于。 提示:结合性和运算优先性可以根据语法树的层次考虑。进而思考左递归产 生式与运算符的结合性的关系。
开始
1
0
1
1
偶0偶1
偶0奇1
00
00
奇0偶1 2
1
1
3
奇0奇1
12
结束语
谢谢大家聆听!!!
13
第四章 知识结构
⑤ 正规文法
② 正规式

有穷自动机(NFA
DFA)
④ห้องสมุดไป่ตู้
{正规集}


词法分析
自动构造工具
1、已知正规式b(ab)*和(ba)*b (1)分别构造上述两个正规式相应的DFA, (2) 将(1)构造的DFA最小化, (3)利用DFA证明b(ab)*=(ba)*b (4)构造该语言的正规文法。
3、一个上下文无关文法生成句子 abbaa 的推导树如下: (1)给出串 abbaa 最左推导、最右推导。 (2)该文法的终结符、非终结符、产生式集合 P 可能有哪些元素? (3)找出该句子的所有短语、直接短语、句柄。
提示:知识点:语法树的构造,文法的组成,短语等概念。
4、给出生成下述语言的三型文法:{anbmck|n, k>=1,m>0 } 提示:(1)三型文法中产生式的特点 (2)可参考P49 第16题
编译原理练习(3-4章)含答 案

编译原理教程-课后习题答案第三章语法分析

编译原理教程-课后习题答案第三章语法分析

第三章 语法分析 【解答】 (1) 消除左递归后,文法G[D′]如下:
D→TL T→int|long|short L→idL
第三章 语法分析
D
D
TL
TL
int a L′
int L , c
, b L′
L,b
, c L′
a (a)
(b)
图3-6 两种文法为int a,b,c构造的分析树 (a) 文法G(D); (b) 文法G′(D)
第三章 语法分析 表3-1 预测分析表
A A′ B B′
{ S ( ); T′( ); } void T′ ( ) { if ( lookahead==′, ′) { match (′, ′); S ( ); T′ ( ); } }
第三章 语法分析
3.10 已知文法G[A]: A→aABl|a B→Bb|d
(1) 试给出与G[A]等价的LL(1)文法G[A′]; (2) 构造G[A′]的LL(1)分析表; (3) 给出输入串aadl#的分析过程。 【解答】 (1) 文法G[A]存在左递归和回溯,故其不是 LL(1)文法。要将G[A]改造为LL(1)文法,首先要消除文法 的左递归,即将形如P→Pα | β 的产生式改造为 P→β P′ P→α P′| ε
#⋖ (⋖,⋖ (⋖a⋗)⋗)⋗# 因此,素短语为a。
第三章 语法分析
3.8 下述文法描述了C语言整数变量的声明语句: G[D]: D→TL T→int|long|short L→id|L,id
(1) 改造上述文法,使其接受相同的输入序列, 但文法是右递归的;
(2) 分别用上述文法G[D]和改造后的文法G[D′] 为输入序列int a,b,c构造分析树。
c. 最左推导和最右推导必定相同
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题第3章文法和语言参考答案
1.写一文法,使其语言是偶整数集合。

解:允许以0打头
G:N→+A|-A|A
A→DA|E
D→0|1|2|3|4|5|6|7|8|9
E→0|2|4|6|8
2.写一文法,使其语言是偶整数集合,但不允许由0打头。

解:0除外
G:N→+A|-A|A
A→CB|E
B→DB|E
C→1|2|3|4|5|6|7|8|9
D→0|1|2|3|4|5|6|7|8|9
E→0|2|4|6|8
3.写一文法G,使得L(G) = { a m b n| m≥0, n≥1 }
解:G1:S→aS|T或 G2:S→aS|bT 或 G3:S→aS|Sb|b
T→bT|b T→bT|ε
4.写一文法G,使得L(G) = { a m b n c p| m≥0, n≥0, p≥0 }
解:G1:S→ABC或G2:S→Sc|T 或 G3:A→aA|bB|cC|εA→aA|ε T→Tb|R B→bB|cC|ε
B→bB|ε R→Ra|ε C→cC|ε
C→cC|ε
5.设有文法G1:S → AaB
S → a
A → AB
A → b
A →ε
B → bB
B →ε
写一文法G2,使得L(G1) = L(G2),并且G2不含空规则。

解:G2:S→BaB|Ba|aB|a 或G2:S→bB|Sb|a
B→bB|b
6.写一文法,使其语言是十位数不是0的整数集合。

解:G:N→SA
S→+|-|ε
A→D|CD|BCD
B→B D|C
C→1|2|3|4|5|6|7|8|9
D→0|1|2|3|4|5|6|7|8|9
7.写出以下文法G所定义的语言L(G)。

G:S → SaS
S → b
S → d
解:L(G)={(xa)n x|n≥0, x∈{b,d}}
={((b|d)a)n(b|d)|n≥0}
={(b|d)(a(b|d))n|n≥0}
8.设有文法G1:S → Sab | c | d
将其改写成以下形式的文法G2,每条规则形如:
V → xW
或V → y
其中V和W为非终结符,x和y为终结符串。

解:G:S→cT|dT|c|d
T→abT|ab
9.设有文法G1:S → abcdB
B → efgB
B → b
将其改写成以下形式的3型文法G2,每条规则形如:
V → pW
或V → q
其中V和W为非终结符,p和q为终结符。

解:G:S→aA
A→bB
B→cC
C→dD
D→eE|b
E→fF
F→gD
10.设有文法G1:S → aBBaS
B → bbAA
A → aAbBc
A → a
将其改写成以下形式的文法G2,每条规则形如:
V → pX1X2…X n
或V → q
其中V和X i为非终结符,p和q为终结符。

解:G:S→aBBPS
P→a
B→bQAA
Q→b
A→aAQBR|a
R→c
11.已知C语言的下标变量形如:
a[E][E]…[E]
按第10题要求的文法G2的形式写出下标变量文法。

解:G:S→aA
A→[EB
B→]A
B→]
12.设有文法G1:S → aBcA
S → aBdB
A → bA
A → aB
B → Bd
B → a
将其改写成文法G2,使得对每个非终结符均无两个不同规则能导出相同的终结开头符。

解:G2:S→aB|P
P→cA|dB
A→bQ
Q→A|B
B→aD
D→dD|ε
13.设有文法G:S → aBbD
B → bSD
B → aDa
B → bb
D → aBD
证明L(G)为空语言。

解:∵D的唯一规则是无穷递归的,也就是无用规则
又∵开始符S的唯一规则含有D,也是无用规则
∴文法G的规则全是无用规则
故L(G)为空语言。

14.设有文法G1:S → 0Y | 1X | 1Y | 1S |ε
X → 1Y | 1S |ε
Y → 1Z
Z → 1S |ε
将其改写成不含空规则的文法G2,且L(G1) = L(G2)∪{ε}。

解:G2:S→0Y|1X|1Y|1S|1
X→1Y|1S|1
Y→1Z|1
Z→1S|1
15.设有文法 G :E → E+T | T T → T*F | F F → i | (E)
(1)构造句子(i*i+i)*i 的语法树,并写出该句子的规范推导过程;
(2)构造句型F*(T+i)+i 的语法树,并求出该句型的所有短语、简单短语和句柄。

解:(1) 句子(i*i+i)*i 的语法树 规范推导过程:
E =〉T =〉T*F
=〉T*i
=〉F*i
=〉(E)*i
=〉(E+T)*i
=〉(E+F)*i
=〉(E+i)*i
=〉(T+i)*i
=〉(T*F+i)*i
=〉(T*i+i)*i
=〉(F*i+i)*i
=〉(i*i+i)*i
(2) 句型F*(T+i)+i 的语法树 短语 简单短语 句柄
F*(T+i)+i F*(T+i)
F F F
(T+i)
T+i
T T
i i i i
E
* T F E ( ) F T i + E T T * T F F i
i F i E
+ E T *
T F T F T
E ( )
F i F
+ E T i
16.构造一个二义性文法。

解:二义性文法G :S→aS|Sa|a
∵句子aa 存在两棵语法树:
∴G 是二义性文法。

17.教材3.14题
解:(1) G1:S→CD (2) G2:S→1S0|A (3) G3:S→0S0|aSa|a C→aCb|ε A→0A1|ε
D→aDb|ε 18.教材3.16题
解:(1) G1:A→aA|ε (2) G2:A→aA|aB (3) G3:A→aA|bB|cC|ε B→bB|b B→bB|cC|ε C→cC|ε
S
a
S
a
S
S。

相关文档
最新文档