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

合集下载

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

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

第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什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多 数计算机系统都含有不止一个高级语言的编译程序。

对有些高 级语言甚至配置了几个不同性能的编译程序。

1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复 杂的整体的过程。

从概念上来讲,一个编译程序的整个工作过 程是划分成阶段进行的,每个阶段将源程序的一种表示形式转 换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连 接在一起的。

一般一个编译过程划分成词法分析、语法分析、 语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起, 这些阶段间的源程序的中间表示形式就没必要构造岀来了。

我 们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理 和岀错处理与上述六个阶段都有联系。

编译过程中源程序的各 种信息被保留在种种不同的表格里,编译各阶段的工作都涉及 到构造、查找或更新有关的表格,因此需要有表格管理的工作; 如果编译过程中发现源程序有错误,编译程序应报告错误的性 质和错误发生的地点,并且将错误所造成的影响限制在尽可能 小的范围内,使得源程序的其余部分能继续被编译下去,有些 编译程序还能自动校正错误, 这些工作称之为岀错处理。

图1.3表示了编译的各个阶段。

图1.3编译的各个阶段它不生成目标代码,它每遇到一个语句,就要对这个语句进行 分析以决定语句的含义,执行相应的动作。

右面的图示意了它 的工作机理第二章:PL/O 编译程序问答第1题 PL/0语言允许过程嵌套定义和递归调用,试问 它的编译程序如何解决运行时的存储管理。

答:PL/0语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。

(数组CODE 存放的只读目 标程序,它在运行时不改变。

)运行时的数据区S 是由解释程序 定义的一维整型数组,解释执行时对数据空间S 的管理遵循后进先岀规则,当每个过程(包括主程序)被调用时,才分配数据 空间,退出过程时,则所分配的数据空间被释放。

编译原理教程课后习题参考答案——

编译原理教程课后习题参考答案——

第二章 词法分析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 ′最小化。

编译原理部分课后答案,仅供参考

编译原理部分课后答案,仅供参考

第一章编译程序概述1.1什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多 数计算机系统都含有不止一个高级语言的编译程序。

对有些高 级语言甚至配置了几个不同性能的编译程序。

1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复 杂的整体的过程。

从概念上来讲,一个编译程序的整个工作过 程是划分成阶段进行的,每个阶段将源程序的一种表示形式转 换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连 接在一起的。

一般一个编译过程划分成词法分析、语法分析、 语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起, 这些阶段间的源程序的中间表示形式就没必要构造岀来了。

我 们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理 和岀错处理与上述六个阶段都有联系。

编译过程中源程序的各 种信息被保留在种种不同的表格里,编译各阶段的工作都涉及 到构造、查找或更新有关的表格,因此需要有表格管理的工作; 如果编译过程中发现源程序有错误,编译程序应报告错误的性 质和错误发生的地点,并且将错误所造成的影响限制在尽可能 小的范围内,使得源程序的其余部分能继续被编译下去,有些 编译程序还能自动校正错误, 这些工作称之为岀错处理。

图1.3表示了编译的各个阶段。

图1.3编译的各个阶段它不生成目标代码,它每遇到一个语句,就要对这个语句进行 分析以决定语句的含义,执行相应的动作。

右面的图示意了它 的工作机理第二章:PL/O 编译程序问答第1题 PL/0语言允许过程嵌套定义和递归调用,试问 它的编译程序如何解决运行时的存储管理。

答:PL/0语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。

(数组CODE 存放的只读目 标程序,它在运行时不改变。

)运行时的数据区S 是由解释程序 定义的一维整型数组,解释执行时对数据空间S 的管理遵循后进先岀规则,当每个过程(包括主程序)被调用时,才分配数据 空间,退出过程时,则所分配的数据空间被释放。

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

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

第二章2.3叙述由下列正规式描述的语言(a) 0(0|1)*0在字母表{0, 1}上,以0开头和结尾的长度至少是2的01串(b) ((ε|0)1*)*在字母表{0, 1}上,所有的01串,包括空串(c) (0|1)*0(0|1)(0|1)在字母表{0, 1}上,倒数第三位是0的01串(d) 0*10*10*10*在字母表{0, 1}上,含有3个1的01串(e) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)*在字母表{0, 1}上,含有偶数个0和偶数个1的01串2.4为下列语言写正规定义C语言的注释,即以 /* 开始和以 */ 结束的任意字符串,但它的任何前缀(本身除外)不以 */ 结尾。

[解答] other → a | b | … other指除了*以外C语言中的其它字符other1 → a | b | …other1指除了*和/以外C语言中的其它字符 comment → /* other* (* ** other1 other*)* ** */(f) 由偶数个0和偶数个1构成的所有0和1的串。

[解答]由题目分析可知,一个符号串由0和1组成,则0和1的个数只能有四种情况:x 偶数个0和偶数个1(用状态0表示); x 偶数个0和奇数个1(用状态1表示); x 奇数个0和偶数个1(用状态2表示); x 奇数个0和奇数个1(用状态3表示);所以,x 状态0(偶数个0和偶数个1)读入1,则0和1的数目变为:偶数个0和奇数个1(状态1)x 状态0(偶数个0和偶数个1)读入0,则0和1的数目变为:奇数个0和偶数个1(状态2)x 状态1(偶数个0和奇数个1)读入1,则0和1的数目变为:偶数个0和偶数个1(状态0)x 状态1(偶数个0和奇数个1)读入0,则0和1的数目变为:奇数个0和奇数个1(状态3)x 状态2(奇数个0和偶数个1)读入1,则0和1的数目变为:奇数个0和奇数个1(状态3)x 状态2(奇数个0和偶数个1)读入0,则0和1的数目变为:偶数个0和偶数个1(状态0)x 状态3(奇数个0和奇数个1)读入1,则0和1的数目变为:奇数个0和偶数个1(状态2)x 状态3(奇数个0和奇数个1)读入0,则0和1的数目变为:偶数个0和奇数个1(状态1)因为,所求为由偶数个0和偶数个1构成的所有0和1的串,故状态0既为初始状态又为终结状态,其状态转换图:由此可以写出其正规文法为:S0 → 1S1 | 0S2 | ε S1 → 1S0 | 0S3 | 1 S2 → 1S3 | 0S0 | 0 S3 → 1S2 | 0S1在不考虑S0 →ε产生式的情况下,可以将文法变形为: S0 = 1S1 + 0S2 S1 = 1S0 + 0S3 + 1 S2 = 1S3 + 0S0 + 0S3 = 1S2 + 0S1 所以: S0 = (00|11) S0 + (01|10) S3 + 11 + 00(1) S3 = (00|11) S3 + (01|10) S0 + 01 + 10(2) 解(2)式得: S3 = (00|11)* ((01|10) S0 + (01|10)) 代入(1)式得:S0 = (00|11) S0 + (01|10) (00|11)*((01|10) S0 + (01|10)) + (00|11) => S0 = ((00|11) + (01|10) (00|11)*(01|10))S0 + (01|10) (00|11)*(01|10) + (00|11) => S0 = ((00|11)|(01|10) (00|11)*(01|10))*((00|11) + (01|10) (00|11)* (01|10)) => S0 = ((00|1 1)|(01|10) (00|11)* (01|10))+因为S0→ε所以由偶数个0和偶数个1构成的所有0和1的串的正规定义为: S0 → ((00|11)|(01|10) (00|11)* (01|10))* (g) 由偶数个0和奇数个1构成的所有0和1的串。

编译原理课后习题解答(2)

编译原理课后习题解答(2)

龙书本科教学版习题解答
仅供教学参考
产生式
翻译方案 { E.m = '(' || E1.m || ')' || '+' || '(' || E2.m || ')' } { E.m = '(' || E1.m || ')' || '-' || '(' || E2.m || ')' } { E.m = '(' || E1.m || ')' || '*' || '(' || E2.m || ')' } { E.m = '(' || E1.m || ')' || '/' || '(' || E2.m || ')' } { E.m = num.value } { E.m = id.lexeme }
产生式说明srqpnbiiiiiieivvvbixfxxxxxxgxlllfxchccccccjcdddhcmkmmmmmmmmmmnbepfngnfgqhpjphnjnhjrkqkpknks是开始符号生成5000以内的罗马数字1349102030304050607080901002003004005006007008009001000200030004000一位数两位数三位数四位数龙书本科教学版习题解答仅供教学参考57西北大学gongxq23节语法制导翻译产生式翻译方案ee1tepree1
1/7
西北大学 Gong Xq
龙书本科教学版习题解答
仅供教学参考
解答: 1)L={0n1n | n>=1} 证明:①考虑,推导 1 步时,有 S 01 推导 2 步时, S 0S1 0011 以此类推,推导 n 步时,S 0S1 00S11 ... 0...0S1...1 0...01...1 可以得到 n 个 0 和 n 个 1 ②对任意串 0n1n 都存在一个推导 S ... 0...01...1 2)文法生成以 a 为基本运算分量的+和-运算的前缀表达式。证明略。 3)文法生成具有对称括号对的串。证明略。 4)文法生成 a 和 b 的个数相等的串。 证明:用关于 a 和 b 个数的归纳法证明。 ①归纳基础:一步推导时,S ϵ,其中 a 和 b 的个数都为 0。 ②归纳步骤:设 S 经过少于 n 步推导得到的串 α 中 a 和 b 的个数相等; 则>=n 步的推导形如 S aSbS … x 或 S bSaS … y aSbS 和 bSaS 中的 S 经过少于 n 步能推出终结符号串,且其中 a 和 b 的个数都相等; 所以经过 aSbS 和 bSaS 推导出的 x 和 y 中的 a 和 b 个数也相等。证毕。 5)文法生成基本运算分量为 a 的由二元运算+、连接和一元运算*构成的表达式,表达式 可以加括号。证明略。

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

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

(完整版)编译原理课后习题答案第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。

2. 实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。

3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。

4. 编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

第二章1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答:1)0型文法、1型文法、2型文法、3型文法。

2)2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。

答:Z→SME | BS→1|2|3|4|5|6|7|8|9M→ε | D | MDD→0|SB→2|4|6|8E→0|B3. 设文法G为:N→ D|NDD→ 0|1|2|3|4|5|6|7|8|9请给出句子123、301和75431的最右推导和最左推导。

答:N?ND?N3?ND3?N23?D23?123N?ND?NDD?DDD?1DD?12D?123N?ND?N1?ND1?N01?D01?301N?ND?NDD?DDD?3DD?30D?301N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?7 5431N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754 DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。

答:对于句型iiSeS存在两个不同的最左推导:S?iSeS?iiSesS?iS?iiSeS所以该文法是二义性文法。

编译原理部分课后答案,仅供参考

编译原理部分课后答案,仅供参考

第一章编译程序概述1.1 什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序。

对有些高级语言甚至配置了几个不同性能的编译程序。

1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。

从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。

一般一个编译过程划分成词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。

我们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系。

编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作;如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。

图1.3表示了编译的各个阶段。

图1.3 编译的各个阶段1.3 高级语言解释系统为了实现在一个计算机上运行高级语言的程序,主要有两个途径:第一个途径是把该程序翻译为这个计算机的指令代码序列,这就是我们已经描述的编译过程。

第二个途径是编写一个程序,它解释所遇到的高级语言程序中的语句并且完成这些语句的动作,这样的程序就叫解释程序。

从功能上说,一个解释程序能让计算机执行高级语言。

它与编译程序的主要不同是它不生成目标代码,它每遇到一个语句,就要对这个语句进行分析以决定语句的含义,执行相应的动作。

右面的图示意了它的工作机理第二章:PL/0编译程序问答第1题PL/0语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管理。

编译原理课后作业参考答案

编译原理课后作业参考答案

作业参考答案第二章 高级语言及其语法描述6、(1)L (G 6)={0,1,2,......,9}+(2)最左推导:N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127 N=>ND=>DD=>3D=>34N=>ND=>NDD=>DDD=>5DD=>56D=>568 最右推导:N=>ND =>N7=>ND7=>N27=>ND27=>N127=>D127=>0127 N=>ND=>N4=>D4=>34N=>ND=>N8=>ND8=>N68=>D68=>568 7、G:S →ABC | AC | CA →1|2|3|4|5|6|7|8|9B →BB|0|1|2|3|4|5|6|7|8|9C →1|3|5|7|98、(1)最左推导:E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*iE=>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+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i=>i+i*iE=>T=>T*F=>T*(E)=>T*(E+T)=>T*(E+F)=>T*(E+i)=>T*(T+i)=>T*(F+i)=>T*(i+i)=>F*(i+i)=>i*(i+i) (2)9、证明:该文法存在一个句子iiiei 有两棵不同语法分析树,如下所示,因此该文法是二义的。

蒋立源_《编译原理》_西北工业大学出版社_第3版课后答案

蒋立源_《编译原理》_西北工业大学出版社_第3版课后答案

《编译原理》课后习题答案第一章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.略第二章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)

编译原理课后习题解答(2)

1/7
西北大学 Gong Xq
龙书本科教学版习题解答
仅供教学参考
解答: 1)L={0n1n | n>=1} 证明:①考虑,推导 1 步时,有 S 01 推导 2 步时, S 0S1 0011 以此类推,推导 n 步时,S 0S1 00S11 ... 0...0S1...1 0...01...1 可以得到 n 个 0 和 n 个 1 ②对任意串 0n1n 都存在一个推导 S ... 0...01...1
1)证明:对语法分析树的结点数目使用数学归纳法。 ①归纳基础:当语法分析树有两个结点时,形如
num
num
11
1001
生成的串分别为 11 和 1001,表示的值为 3 和 9,能被 3 整除。 ②归纳步骤:假设语法分析树的结点数目少于 n 时生成的二进制串的值能被 3 整除,那么当 结点数目等于 n 时,语法分析树的根有下面两种可能的形式:
3/7
西北大学 Gong Xq
龙书本科教学版习题解答
仅供教学参考
解答: 1)S → SS+ | SS* | SS- | SS/ | id | num 2)list → list, id | id 3)list → id, list | id 4)E → E + T | E – T | T
T→T*F|T/F|F F → id | num | (E) 5)E → E + T | E – T | T T→T*F|T/F|F F → -E | +E | id | num | (E)
2)文法生成以 a 为基本运算分量的+和-运算的前缀表达式。证明略。
3)文法生成具有对称括号对的串。证明略。
4)文法生成 a 和 b 的个数相等的串。 证明:用关于 a 和 b 个数的归纳法证明。 ①归纳基础:一步推导时,S ϵ,其中 a 和 b 的个数都为 0。 ②归纳步骤:设 S 经过少于 n 步推导得到的串 α 中 a 和 b 的个数相等; 则>=n 步的推导形如 S aSbS … x 或 S bSaS … y aSbS 和 bSaS 中的 S 经过少于 n 步能推出终结符号串,且其中 a 和 b 的个数都相等; 所以经过 aSbS 和 bSaS 推导出的 x 和 y 中的 a 和 b 个数也相等。证毕。

[西北工业大学]编译原理(202104)

[西北工业大学]编译原理(202104)
3.素短语是指()的短语。 ①至少含有一个终结符②至少含有一个符号③至少含有一个非终结符④ 除自身外不再含有其他终结符号⑤除自身外不再含有其他素短语 A.①④ B.②⑤ C.③⑤ D.①⑤ 答案:D
4.29.()不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序 答案:C
9.12.一个3型语言是无穷的,则识别它的FA ()。 A.必有无穷个状态 B.必有回路 C.必然是非确定的 D.以上都不对 答案:B
10.词法分析器用于识别()。 A.句子 B.产生式 C.单词 D.句型 答案:C
11.词法分析器不能()。 A.识别出数值常量 B.过滤源程序中的注释 C.扫描源程序并识别记号 D.发现括号不匹配 答案:D
5.()这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 A.存在 B.不存在 C.无法判定是否存在 D.以上答案都不对 答案:B
6.正则表达式 R1和R2 等价是指()。 A.R1和R2 都是定义在一个字母表上的正则表达式 B.R1和R2 使用的运算符相同 C.R1和R2 代表同一正则集 D.R1和R2 代表不同正则集 答案:C
26.两个有穷自动机等价是指它们的()。 A.状态数相等 B.有向弧数相等 C.所识别的语言相等 D.状态数和有向弧数相等 答案:C
27.18.LR(K)分析方法是()。 A.从左到右每次走K步的分析法 B.从左到右共经过K步的分析法 C.从左到右每次向前预测K步的分析法 D.从左到右每次向前看K个输入符号的分析法 答案:D
编译原理(202104)
一、单选题 1.设l,d分别表示英文字母和数字,则定义标识符的右线性文法G[S]是()。 A.S→→dA∣lA∣ε B.S→dS∣lS∣d∣l C.S →Sl∣Sd∣l D.S→dA A→dA∣lA∣ε 答案:A
  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]的一个句型的一部分,而不是一个句子。

相关文档
最新文档