《编译原理》西北工业大学版课后标准答案

合集下载

《编译原理》课后习题答案

《编译原理》课后习题答案

第7 题证明下述文法G[〈表达式〉]是二义的。

〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/答案:可为句子a+a*a 构造两个不同的最右推导:最右推导1 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉a=>〈表达式〉* a=>〈表达式〉〈运算符〉〈表达式〉* a=>〈表达式〉〈运算符〉a * a=>〈表达式〉+ a * a=>a + a * a最右推导2 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉〈运算符〉a=>〈表达式〉〈运算符〉〈表达式〉* a=>〈表达式〉〈运算符〉a * a=>〈表达式〉+ a * a=>a + a * a第8 题文法G[S]为:S→Ac|aB A→ab B→bc该文法是否为二义的?为什么?答案:对于串abc(1)S=>Ac=>abc (2)S=>aB=>abc即存在两不同的最右推导。

所以,该文法是二义的。

或者:对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。

第9 题考虑下面上下文无关文法:S→SS*|SS+|a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。

(2)G[S]的语言是什么?答案:(1)此文法生成串aa+a*的最右推导如下S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。

第10 题文法S→S(S)S|ε(1) 生成的语言是什么?(2) 该文法是二义的吗?说明理由。

答案:(1)嵌套的括号(2)是二义的,因为对于()()可以构造两棵不同的语法树。

第11 题令文法G[E]为:E→T|E+T|E-T T→F|T*F|T/F F→(E)|i证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

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

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

第三章语法分析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]为二义文法。

(完整word版)编译原理课后答案

(完整word版)编译原理课后答案

第二章 高级语言及其语法描述4.令+、*和↑代表加,乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑2*1↑2的值:(1) 优先顺序(从高至低)为+,*和↑,同级优先采用左结合。

(2) 优先顺序为↑,+,*,同级优先采用右结合。

解:(1)1+1*2↑2*1↑2=2*2↑1*1↑2=4↑1↑2=4↑2=16 (2)1+1*2↑2*1↑2=1+1*2*1=2*2*1=2*2=46.令文法G6为 N →D|NDD →0|1|2|3|4|5|6|7|8|9 (1) G6 的语言L (G6)是什么?(2) 给出句子0127、34和568的最左推导和最右推导。

解:(1)L (G6)={a|a ∈∑+,∑=﹛0,1,2,3,4,5,6,7,8,9}}(2)N =>ND => NDD => NDDD => DDDD => 0DDD => 01DD => 012D => 0127 N => ND => N7=> ND7=> N27=> ND27=> N127=> D127=> 0127 N => ND => DD => 3D => 34 N => ND => N4=> D4 =>34N => ND => NDD => DDD => 5DD => 56D => 568 N => ND => N8=> ND8=> N68=> D68=> 5687.写一个文法,使其语言是奇数集,且每个奇数不以0开头。

解:A →SN, S →+|-|∑, N →D|MDD →1|3|5|7|9, M →MB|1|2|3|4|5|6|7|8|9 B →0|1|2|3|4|5|6|7|8|9 8. 文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiEEFT+T F FTiii*i+i+ii-i-ii+i*i*****************/9.证明下面的文法是二义的:S → iSeS|iS|I解:因为iiiiei 有两种最左推导,所以此文法是二义的。

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

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

第二章 词法分析2.1 完成下列选择题:(1) 词法分析器的输出结果是。

a. 单词的种别编码b. 单词在符号表中的位置c. 单词的种别编码和自身值d. 单词自身值(2) 正规式M1和M2等价是指。

a. M1和M2的状态数相等b. M1和M2的有向边条数相等c. M1和M2所识别的语言集相等d. M1和M2状态数和有向边条数相等(3) DFA M(见图2-1)接受的字集为。

a. 以0开头的二进制数组成的集合b. 以0结尾的二进制数组成的集合c. 含奇数个0的二进制数组成的集合d. 含偶数个0的二进制数组成的集合【解答】(1) c (2) c (3) d图2-1 习题2.1的DFA M2.2 什么是扫描器?扫描器的功能是什么?【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。

通常是把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。

每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。

2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的有限自动机,其中f 定义如下:f(x,a)={x,y} f {x,b}={y}f(y,a)=Φ f{y,b}={x,y}试构造相应的确定有限自动机M ′。

【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f 的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。

先画出NFA M 相应的状态图,如图2-2所示。

图2-2 习题2.3的NFA M 用子集法构造状态转换矩阵,如表表2-1 状态转换矩阵1b将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵,即得到 M ′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。

表2-2 状态转换矩阵将图2-3所示的DFA M ′最小化。

《编译原理》习题解答

《编译原理》习题解答

《编译原理》习题解答:第一次作业:P14 2、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?答:被翻译的程序称为源程序;翻译出来的程序称为目标程序或目标代码;将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序;把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序;解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行;编译程序是将高级语言写的源程序翻译成目标语言的程序。

关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。

P14 3、编译程序是由哪些部分组成?试述各部分的功能?答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。

具体功能见P7-9。

P14 4、语法分析和语义分析有什么不同?试举例说明。

答:语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:对变量x:= y 符合语法规则就通过。

语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。

P15 5、编译程序分遍由哪些因素决定?答:计算机存储容量大小;编译程序功能强弱;源语言繁简;目标程序优化程度;设计和实现编译程序时使用工具的先进程度以及参加人员多少和素质等等。

补充:1、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。

对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。

编译原理课后答案

编译原理课后答案

第二章 高级语言及其语法描述4.令+、*和↑代表加,乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑2*1↑2的值:(1) 优先顺序(从高至低)为+,*和↑,同级优先采用左结合。

(2) 优先顺序为↑,+,*,同级优先采用右结合。

解:(1)1+1*2↑2*1↑2=2*2↑1*1↑2=4↑1↑2=4↑2=16 (2)1+1*2↑2*1↑2=1+1*2*1=2*2*1=2*2=46.令文法G6为 N →D|NDD →0|1|2|3|4|5|6|7|8|9 (1) G6 的语言L (G6)是什么?(2) 给出句子0127、34和568的最左推导和最右推导。

解:(1)L (G6)={a|a ∈∑+,∑=﹛0,1,2,3,4,5,6,7,8,9}}(2)N =>ND => NDD => NDDD => DDDD => 0DDD => 01DD => 012D => 0127 N => ND => N7=> ND7=> N27=> ND27=> N127=> D127=> 0127 N => ND => DD => 3D => 34 N => ND => N4=> D4 =>34N => ND => NDD => DDD => 5DD => 56D => 568 N => ND => N8=> ND8=> N68=> D68=> 5687.写一个文法,使其语言是奇数集,且每个奇数不以0开头。

解:A →SN, S →+|-|∑, N →D|MDD →1|3|5|7|9, M →MB|1|2|3|4|5|6|7|8|9 B →0|1|2|3|4|5|6|7|8|9 8. 文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiE EFT+T F FTiii*i+i+ii-i-ii+i*i*****************/9.证明下面的文法是二义的:S → iSeS|iS|I解:因为iiiiei 有两种最左推导,所以此文法是二义的。

编译原理课后答案 (3)

编译原理课后答案 (3)

编译原理课后答案问题一计算机程序的执行是一个多阶段的过程,其中编译是其中的一环。

请问编译的三个主要阶段分别是什么?答:编译过程一般可以分为三个主要阶段,分别是词法分析、语法分析和代码生成。

下面分别对这三个阶段进行介绍。

1. 词法分析词法分析是编译过程的第一步,也是最基础的一步。

它的任务是将源代码中的字符序列分解成一个个具有独立含义的单词,这些单词被称为“记号”或“词法单元”。

词法分析器根据程序中每一个字符的组合规则,将其转化为一个个词法单元,并记录下词法单元的类型标记。

词法分析器的工作一般通过有限状态自动机来实现,它根据一定的词法规则进行扫描和分析。

2. 语法分析语法分析是编译过程的第二步,它接收词法分析器生成的词法单元流,根据语法规则进行分析,并生成一棵语法树。

语法分析的主要任务是确定输入程序的结构,检查程序的语法正确性,并生成用于后续处理的输入形式。

语法分析器一般采用的是自顶向下或自底向上的分析方法,常用的方法有递归下降法和LR(1)分析法。

3. 代码生成代码生成是编译过程的最后一步,它将语法分析生成的语法树转化为目标机器的可执行代码。

代码生成器通过遍历语法树,将每个语法树节点转化为相应的目标机器代码。

代码生成过程中需要考虑到目标机器的特性和限制,以及优化代码的效率和性能。

问题二请解释一下编译原理中的词法规则是什么?答:编译原理中的词法规则指的是一组规定词法单元模式的规则。

它描述了如何将输入字符序列转换为词法单元,并为每个词法单元定义了一个标记。

词法规则一般使用正则表达式来描述词法单元的模式。

编译器根据词法规则构建词法分析器,用于将源代码分割成一系列的词法单元。

词法规则的灵活性和准确性对编译过程的性能和结果都有较大的影响。

一个完整的词法规则一般包含以下几个部分:1.正则表达式:描述了词法单元的模式,使用特定的正则表达式语法来表示。

2.动作:描述了当词法单元匹配到模式时,需要执行的动作或处理过程。

编译原理课后习题答案

编译原理课后习题答案
语法 分析器 ,对单 词符号 串进行 语法分 析(根据 语法规 则进行 推导或 归约),识别 出程序 中的各 类语法 单位 ,最终 判断 输入 串是否 构成语 法上正 确的“程序 ”。
语义 分析及 中间代 码产生 器,按照 语义规 则对语 法分析 器归约 出(或推 导出)的语 法单位 进行语 义分析 并把它 们翻译 成 一定 形式的 中间代 码。编译 程序可 以根据 不同的 需要选 择不同 的中间 代码形 式,有的 编译程 序甚至 没有中 间代码 形式 ,而直 接生 成目标 代码。
集的 代表,然后 修改原 来的有 限状态 自动机 的状态 转换函 数δ,凡在δ 作用 下转向 某状态 子集中 任何一 个状态 的一律 改成转 向 该状 态子集 的代表。若一 个状态 子集中 某一状 态是原 来的开 始状态 ,则该 状态子 集的代 表就是 新的有 限状态 自动机 的开始 状
态。 同理, 若一个 状态子 集中的 状态均 是最终 状态, 则该状 态子集 的代表 就是新 的有限 状态自 动机的 最终状 态。
翻译程序: 翻译程序(Translator)是一种语言处理程序,它将输入的用程序设计语言书写的程序(称为源程序)转换 为等 价的用 另一种 语言书 写的程 序( 称为 目标程 序)。若源 语言是 汇编语 言,目标 程序是 机器语 言,称这 种翻译 程序为 汇编 程序 。若源 语言是 高级语 言,目 标程序 是低级 语言, 称这种 翻译程 序为编 译程序 。
分析 :只能 对确定 的有限 状态自 动机进 行最小 化,本 题的自 动机已 经是确 定的。
最小 化采用 状态分 离法, 具体做 法如下 :
① 进行 0 等价类的划分:Q 划分为 Qf 与 Q-Qf ② 若已进行了 k 等价划分,即 Q 已被划分成(Q1,Q2,…Qn),再进行 k+1 划分,对 Qi(i=1…n),若 q、q’∈Qi,使得 对某一个 a∈VT,δ(q,a)∈Qj 和δ(q’,a)∈Ql,j≠l 或δ(q,a)存在而δ(q’,a)不存在或反之。则将 Qi 划分为二个 子集 Qi1,Qi2,使 q∈Qi1,q’ ∈Qi2。 ③ 重复②直至无法进一步划分为止。对最后划分得到的状态子集中每一个子集,选择该子集中任何一个状态作为该状态子
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章绪论1.1何谓源程序、目标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系?1.2一个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么?1.3选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。

1.4选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。

1.5试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。

参考答案第一章习题解答1.解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3.解:C语言的关键字有:auto break case char const continuedefault do double else enum extern float for goto if int longregister return short signed sizeof static struct switch typedef union unsigned void volatile while。

上述关键字在C语言中均为保留字。

4.解:C语言中括号有三种:{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

C语言中无END关键字。

逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。

5.略第二章前后文无关文法和语言21设有字母表A1={a,b,…,z},A2={0,1,…,9},试回答下列问题:(1) 字母表A1上长度为2的符号串有多少个?(2) 集合A1A2含有多少个元素?(3) 列出集合A1 (A1∪A2)*中的全部长度不大于3的符号串。

22试分别构造产生下列语言的文法。

(1) {anbn|n≥0};(2) {anbmcp|n,m,p≥0};(3) {an#bn|n≥0}∪{cn#dn|n≥0};(4) {w#wr#|w∈{0,1}*,wr是将w中的符号按逆序排列所得的符号串};(5) 任何不是以0开始的所有奇整数所组成的集合;(6) 所有由偶数个0和偶数个1所组成的符号串的集合。

23试描述由下列文法所产生的语言的特点 (文法的开始符号均为S)。

(1) S→10S0S→aAA→bAA→a(2) S→SSS→1A0A→1A0A→ε(3) S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε(4) S→bAdcA→AGSG→εA→a(5) S→aSSS→a24设已给文法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]},试指出此文法所产生的语言。

25考察文法G=(VN,VT,P,S),其中:VN={S,A,B,C,D,E,F,G}VT={a},P={S→ABC,C→BC,C→A,BA→GE,BG→GBF,AG→AD,DB→BD,DE→AE,FB→BF,FE→Ea,AA→ε}(1) 指出此文法的类型;(2) 证明此文法所产生的语言为L(G)={at(n)|n≥1}t(n)=∑n[]i=1i26设已给文法G[〈程序〉]:〈程序〉→〈分程序〉|〈复合语句〉〈分程序〉→〈无标号分程序〉|〈标号〉:〈分程序〉〈复合语句〉→〈无标号复合语句〉|〈标号〉:〈复合语句〉〈无标号分程序〉→〈分程序首部〉;〈复合尾部〉〈无标号复合语句〉→begin〈复合尾部〉〈分程序首部〉→begin〈说明〉|〈分程序首部〉;〈说明〉〈复合尾部〉→〈语句〉end|〈语句〉;〈复合尾部〉〈说明〉→d〈语句〉→s〈标号〉→L(1) 给出句子L: L: begin d; d; s; s end的最左推导和最右推导。

(2) 画出上述句子的语法树。

27设已给文法G[S]:S→aAcBS→BdSB→aScAB→cABA→BaBA→aBcA→aB→b试检验下列符号串中哪些是G[S]中的句子,给出这些句子的最左推导、最右推导和相应的语法树。

(1) aacb(2) aabacbadcd(3) aacbccb(4) aacabcbcccaacdca(5) aacabcbcccaacbca28设G=(VN,VT,P,S)为CFG,α1,α2,…,αn为V上的符号串,试证明:若α1α2…αn*β则存在V上的符号串β1,β2,…,βn,使β=β1β2…βn,且有ai*βi(i=1,2,…,n)29设G=(VN,VT,P,S)为CFG,α和β都是V上的符号串,且α*β,试证明:当α的首符号为终结符号时,β的首符号也必为终结符号;当β的首符号为非终结符号时,则α的首符号也必为非终结符号。

210试证明:文法S→ABS→DCA→aAA→aB→bBcB→bcC→cCC→cD→aDbD→ab为二义性文法。

211对于下列的文法和相应的句子,试指出这些句子的全部短语;分别给出句子的最右推导,并指出各步直接推导所得句型的句柄。

(1) S→ABS→cA→bAA→aB→aSbB→cbbaacb(2) S→(AS)S→(b)A→(SaA)A→(a)(((b) a (a)) (b))(3) E→ET+E→TT→TF*T→FF→FP↑F→PP→EP→iiii*i+↑212在自底向上的分析中,用来归约句型句柄的产生式称为句柄产生式。

试证明:一个文法是无二义性的,当且仅当此文法的每一句型至多只有一个句柄和一个句柄产生式。

213化简下列各个文法。

(1) S→aABSS→bCACdA→bABA→cSAA→cCCB→bABB→cSBC→cSC→c(2) S→aABS→EA→dDAA→eB→bEB→fC→cABC→dSDC→aD→eAE→fAE→g(3) S→acS→bAA→cBCB→SAC→bCC→d214消去下列文法中的ε产生式。

(1) S→aASS→bA→cSA→ε(2) S→aAAA→bAcA→dAeA→ε215消去下列文法中的无用产生式和单产生式。

(1) S→aBS→BCA→aAA→cA→aDbB→DBB→CD→BC→b(2) S→SAS→SBA→BB→[S]A→(S)S→AB→[]A→( )(3) E→E+TE→TT→T*FT→FF→P↑FF→PP→(E)P→i参考答案第二章习题解答1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)(2){anbmcp|n,m,p≥0}解:对应文法为G(S) =({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){an # bn|n≥0}∪{cn # dn|n≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X,S→Y,X→aXb|#,Y→cYd|# },S)(4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:G(S) = ({S,W,R},{0,1,#}, {S→W#, W→0W0|1W1|# },S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S) =({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e,I→J|2|4|6|8, Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B3.描述语言特点(1)S→10S0S→aAA→bAA→a解:本文法构成的语言集为:L(G)={(10)nabma0n|n, m≥0}。

(2)S→SS S→1A0A→1A0A→ε解:L(G)={1n10n11n20n2 … 1nm0nm |n1,n2,…,nm≥0;且n1,n2,…nm不全为零}该语言特点是:产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。

(3)S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε解:本文法构成的语言集为:L(G)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特点是具有1p1n0n 或1n0n0q形式,进一步,可知其具有形式1n0mn,m≥0,且n+m>0。

(4)S→bAdcA→AGSG→εA→a解:可知,S=>…=>baSndc n≥0该语言特点是:产生的句子中,是以ba开头dc结尾的串,且ba、dc个数相同。

(5)S→aSSS→a解:L(G)={a(2n-1)|n≥1}可知:奇数个a4.解:此文法产生的语言是:以终结符a1 、a2 …an 为运算对象,以∧、∨、~为运算符,以[、]为分隔符的布尔表达式串5. 5.1解:由于此文法包含以下规则:AA→e,所以此文法是0型文法。

5.2证明:略6.解:(1)最左推导:<程序>T<分程序>T<标号>:<分程序>TL:<分程序>TL:<标号>:<分程序>T L:L:<分程序>T L:L:<无标号分程序>T L:L:<分程序首部>;<复合尾部>T L:L:<分程序首部>;<说明>;<复合尾部>T L:L:begin<说明>;<说明>;<复合尾部>T L:L:begin d;<说明>;<复合尾部>T L:L:begin d;d;<复合尾部>T L:L:begin d;d;<语句>;<复合尾部>T L:L:begin d;d;s;<复合尾部.T L:L:begin d;d;s;<语句> endT L:L:begin d;d;s;s end最右推导:<程序>T<分程序>T<标号>:<分程序>T<标号>:<标号>:<分程序>T<标号>:<标号>:<无标号分程序>T<标号>:<标号>:<分程序首部>;<复合尾部>T<标号>:<标号>:<分程序首部>;<语句>;<复合尾部>T<标号>:<标号>:<分程序首部>;<语句>;<语句>;endT<标号>:<标号>:<分程序首部>;<语句>;s;endT<标号>:<标号>:<分程序首部>;s;s;endT<标号>:<标号>:<分程序首部>;说明;s;s;endT<标号>:<标号>:<分程序首部>;d;s;s;endT<标号>:<标号>:begin 说明;d;s;s;endT<标号>:<标号>:begin d;d;s;s;endT<标号>: L:begin d;d;s;s;endTL:L:begin d;d;s;s;end(2)句子L:L:begin d;d;s;s end的相应语法树是:7.解:aacb是文法G[S]中的句子,相应语法树是:最右推导:S=>aAcB=>aAcb=>aacb最左推导:S=>aAcB=>aacB=>aacb(2)aabacbadcd不是文法G[S]中的句子因为文法中的句子不可能以非终结符d结尾(3)aacbccb不是文法G[S]中的句子可知,aacbccb仅是文法G[S]的一个句型的一部分,而不是一个句子。

相关文档
最新文档