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

合集下载

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

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

第二章 词法分析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 习题的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 习题的NFA M用子集法构造状态转换矩阵,如表表2-1 状态转换矩阵1b将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵,即得到 M ′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。

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

编译原理课后习题答案+清华大学出版社第二版
第 2题
一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序 的总体结构图。
答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语
义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和 错误处理程序。其各部分的主要功能简述如下。
第 4题
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代 码生成)报告的。 (1) else 没有匹配的 if (2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析
第5题
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是 边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源 程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来 完成,即只翻译不执行。
3
《编译原理》课后习题答案第一章
第6题
计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?
答案:计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。 像 Basic 之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语
言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一 条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反 复。

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

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

第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 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

(完整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 有两种最左推导,所以此文法是二义的。

编译原理及实现课后答案

编译原理及实现课后答案

5.1 考虑以下的文法:S→S;T|TT→a(1)为这个文法构造LR(0)的项目集规范族。

(2)这个文法是不是LR(0)文法?如果是,则构造LR(0)分析表。

(3)对输入串“a;a”进行分析。

解:(1)拓广文法G[S’]:0:S’→S1:S→S;T2:S→T3:T→a构造LR(0)项目集规范族(2)该文法不存在“归约-归约”和“归约-移进”冲突,因此是LR(0)文法。

LR(0)分析表如下:(3)对输入串“a;a”进行分析如下:5.2 证明下面文法是SLR(1)文法,但不是LR(0)文法。

S→AA→Ab|bBaB→aAc|a|aAb解:文法G[S]:0:S→A1:A→Ab2:A→bBa3:B→aAc4:B→a5:B→aAb状态5存在“归约-移进”冲突,状态9存在“归约-归约”冲突,因此该文法不是LR(0)文法。

状态5:FOLLOW(B)={a},因此,FOLLOW(B)∩{b}=Φ状态9:FOLLOW(B)={a},FOLLOW(A)={#,b,c},因此FOLLOW(B)∩FOLLOW(A)=Φ该SLR(1)分析表无重定义,因此该文法是SLR(1)文法,不是LR(0)文法。

5.3 证明下面文法是LR(1)文法,但不是SLR(1)文法。

S→AaAb|BbBaA→εB→ε解:拓广文法G[S’]:0:S’→S1:S→AaAb2:S→BbBa3:A→ε4:B→ε={a,b},即FOLLOW(A)∩FOLLOW(B)={a,b}≠Φ,所以该文法不是SLR(1)文法。

构造LR(1)项目集规范族:分析表无重定义,说明该文法是LR(1)文法,不是SLR(1)文法。

5.4 考虑以下的文法:E→EE+E→EE*E→a(1)为这个文法构造LR(1)项目集规范族。

(2)构造LR(1)分析表。

(3)为这个文法构造LALR(1)项目集规范族。

(4)构造LALR(1)分析表。

(5)对输入符号串“aa*a+”进行LR(1)和LALR(1)分析。

《编译原理》习题解答

《编译原理》习题解答

《编译原理》习题解答:第一次作业: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、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。

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

编译原理课后习题解答

编译原理课后习题解答

〈句子〉=>〈主语〉〈谓语〉
=>〈主语〉〈动词〉〈直接宾语〉
=>〈主语〉〈动词〉〈冠词〉〈名词〉
=>〈主语〉〈动词〉〈冠词〉peanut
=>〈主语〉〈动词〉the peanut
=>〈主语〉ate the peanut
=>〈冠词〉〈形容词〉〈名词〉ate the peanut
=>〈冠词〉〈形容词〉 elephant ate the peanut
=>〈冠词〉big elephant ate the peanut
=> the big elephant ate the peanut
(B) 〈句子〉=>〈主语〉〈谓语〉
=>〈主语〉〈动词〉〈直接宾语〉
=>〈冠词〉〈形容词〉〈名词〉〈动词〉〈直接宾语〉
=>〈冠词〉〈形容词〉〈名词〉〈动词〉〈冠词〉〈名词〉
〈偶数字〉::=0 | 2 | 4 | 6 | 8
3. 写一文法,使其语言是偶整数的集合,但不允许有以 0 开头的偶整数。
解:G[〈偶整数〉]:
〈偶整数〉::= 〈符号〉〈单偶数〉|〈符号〉〈首数字〉〈数字串〉〈尾偶数〉
〈符号〉::= + | — |ε
〈单偶数〉::=2 | 4 | 6 | 8
〈尾偶数〉::= 0 |〈单偶数〉
S::= a(B)a B::= bB |b|ε ( 2 ) 文法[G〈S〉]: S ::= (A)(B) A::= aA|a B::= bB|b 6. 文法 G3[〈表达式〉]: 〈表达式〉::=〈项〉|〈表达式〉+〈项〉|〈表达式〉—〈项〉 〈项〉::=〈因子〉|〈项〉*〈因子〉|〈项〉/〈因子〉 〈因子〉::=(〈表达式〉)| i 试给出下列符号串的推导: i, (i), i*i, i*i+i, i*(i+i) 解:(1)〈表达式〉=>〈项〉 =>〈因子〉

编译原理课后习题答案

编译原理课后习题答案
语法 分析器 ,对单 词符号 串进行 语法分 析(根据 语法规 则进行 推导或 归约),识别 出程序 中的各 类语法 单位 ,最终 判断 输入 串是否 构成语 法上正 确的“程序 ”。
语义 分析及 中间代 码产生 器,按照 语义规 则对语 法分析 器归约 出(或推 导出)的语 法单位 进行语 义分析 并把它 们翻译 成 一定 形式的 中间代 码。编译 程序可 以根据 不同的 需要选 择不同 的中间 代码形 式,有的 编译程 序甚至 没有中 间代码 形式 ,而直 接生 成目标 代码。
集的 代表,然后 修改原 来的有 限状态 自动机 的状态 转换函 数δ,凡在δ 作用 下转向 某状态 子集中 任何一 个状态 的一律 改成转 向 该状 态子集 的代表。若一 个状态 子集中 某一状 态是原 来的开 始状态 ,则该 状态子 集的代 表就是 新的有 限状态 自动机 的开始 状
态。 同理, 若一个 状态子 集中的 状态均 是最终 状态, 则该状 态子集 的代表 就是新 的有限 状态自 动机的 最终状 态。
翻译程序: 翻译程序(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。 ③ 重复②直至无法进一步划分为止。对最后划分得到的状态子集中每一个子集,选择该子集中任何一个状态作为该状态子

习题参考答案-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

习题参考答案-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

附录部分习题参考答案第1章习题1. 解释下列术语。

翻译程序,编译程序,解释程序,源程序,目标程序,遍,前端,后端解答:略!2. 高级语言程序有哪两种执行方式?阐述其主要异同点。

描述编译方式执行程序的过程。

解答:略!3. 在你所使用的C语言编译器中,观察程序1.1经过预处理、编译、汇编、链接四个过程生成的中间结果。

解答:略!4. 编译程序有哪些主要构成成分?各自的主要功能是什么?解答:略!5. 编译程序的构造需要掌握哪些原理和技术?编译程序构造工具的作用是什么?解答:略!6. 复习C语言,其字母表中有哪些符号?有哪些关键字、运算符和界符?标识符、整数和实数的构成规则是怎样的?各种语句和表达式的结构是什么样的?解答:略!7.编译技术可应用在哪些领域?解答:略!8. 你能解释在Java编译器中,输入某个符号后会提示一些单词、某些单词会变为不同的颜色是如何实现的吗?你能解释在Code Blocks中在输入{后,会自动添加},输入do 会自动添加while()是为什么吗?解答:略!第2章习题1. 判断题,对下面的陈述,正确的在陈述后的括号内画√,否则画×。

(1) 有穷自动机识别的语言是正规语言。

()(2) 若r1和r2是Σ上的正则表达式,则r1|r2也是。

()(3) 设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。

()(4) 令Σ={a,b},则所有以b开头的字构成的正规集的正则表达式为b*(a|b)*。

()(5) 对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。

()1解答:略!2.从供选择的答案中,选出应填入下面叙述中?内的最确切的解答。

有穷自动机可用五元组(Q,V T,δ,q0,Q f)来描述,设有一有穷自动机M定义如下:V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为:δ (q0,0)=q1δ (q1,0)=q2δ (q2,1)=q2δ (q2,0)=q2M是一个 A 有穷状态自动机,它所对应的状态转换图为 B ,它所能接受的语言可以用正则表达式表示为 C 。

编译原理及实践教程(黄贤英 王柯柯 编著) 习题答案

编译原理及实践教程(黄贤英 王柯柯 编著) 习题答案

第2章参考答案:1,2,3:解答:略!4. 解答:A:① B:③ C:① D:②5. 解答:用E表示<表达式>,T表示<项>,F表示<因子>,上述文法可以写为:E → T | E+TT → F | T*FF → (E) | i最左推导:E=>E+T=>E+T+T=>T+T+T=>F+T+T=>i+T+T=>i+F+T=>i+i+T=>i+i+F=>i+i+iE=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i 最右推导:E=>E+T=>E+F=>E+i=>E+T+i=>E+F+i=>E+i+i=>T+i+i=>F+i+i=>i+i+iE=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i =>i+i*ii+i+i和i+i*i的语法树如下图所示。

i+i+i、i+i*i的语法树6. 解答:(1) 终结符号为:{or,and,not,(,),true,false}非终结符号为:{bexpr,bterm,bfactor}开始符号为:bexpr(2) 句子not(true or false)的语法树为:7. 解答:(1) 把a n b n c i分成a n b n和c i两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:S → ABA → aAb|abB → cB|ε(2) 令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如下:S → aE|Ea|bSS|SbS|SSbE → aEbE|bEaE|ε(3) 设文法开始符号为S,产生的w中满足|a|≤|b|≤2|a|。

精品 课后习题及参考答案-《编译原理》课后习题答案-清华大学-第二版

精品 课后习题及参考答案-《编译原理》课后习题答案-清华大学-第二版
广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是边 翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源程序 翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来完成, 即只翻译不执行。
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、 代码生成)报告的。
总而言之,是边翻译边执行。
像C, Pascal之类的语言,属于编译型的高级语言。它们的特点是计算机事先对高级语言 进行全盘翻译,将其全部变为机器代码,再统一执行,即先翻译,后执行。从速度上看,编译型 的高级语言比解释型的高级语言更快。

第1题
PL/O语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管 理。
错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程 序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行 适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。
注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚, 就回答八部分。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和査找等一系列表格工作。表格的作用是记录源程序的各 类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中 间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出 的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序 具有的表格管理功能。

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

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

编译原理教程课后习题答案【篇一:编译原理教程课后习题答案——第一章】完成下列选择题:(1) 构造编译程序应掌握a. 源程序b. 目标语言c. 编译方法d. 以上三项都是(2) 编译程序绝大多数时间花在上。

a. 出错处理b. 词法分析c. 目标代码生成d. 表格管理(3) 编译程序是对。

a. 汇编程序的翻译b. 高级语言程序的解释执行c. 机器语言的执行d. 高级语言的翻译【解答】(1) d (2) d(3) d1.2 计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?【解答】计算机执行用高级语言编写的程序主要有两种途径:解释和编译。

在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,最后再读入下一条源程序语句,并解释执行。

这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。

在编译方式下,高级语言程序的执行是分两步进行的:第一步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。

因此,编译对源程序的处理是先翻译,后执行。

从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型好,便于程序调试。

这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。

1.3 请画出编译程序的总框图。

如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题?【解答】编译程序总框图如图1-1所示。

作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。

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

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

编译原理及实现课后习题解答2.1 设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5以及A+和A*.x0=(aaa)0=ε| x0|=0xx=aaaaaa |xx|=6x5=aaaaaaaaaaaaaaa | x5|=15A+ =A1∪A2∪ …. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…}A* = A0 ∪A1 ∪ A2∪ …. ∪ A n∪…={ε,a,aa,aaa,aaaa,aaaaa…}2.2 令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3xy=abcb |xy|=4xyz=abcbaab |xyz|=7(xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=122.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。

S => SS* => Sa* => SS+a* => Sa+a* => aa+a*2.4 已知文法G[Z]:Z∷=U0∣V1 、U∷=Z1∣1 、V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。

Z=>U0=>Z10=>U010=>1010Z=>U0=>Z10=>V110=>0110Z=>V1=>Z01=>U001=>1001Z=>V1=>Z01=>V101=>01012.5 已知文法G[S]:S∷=AB A∷=aA︱ε B∷=bBc︱bc , 写出该文法描述的语言。

A∷=aA︱ε描述的语言: {a n|n>=0}B∷=bBc︱bc描述的语言:{b n c n|n>=1}L(G[S])={a n b m c m|n>=0,m>=1}2.6 已知文法E∷=T∣E+T∣E-T 、T∷=F∣T*F∣T/F 、F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。

《编译原理》习题解答

《编译原理》习题解答

《编译原理》习题解答:第一次作业: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、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。

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

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

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

编译原理教程课后习题答案【篇一:编译原理教程课后习题答案——第一章】完成下列选择题:(1) 构造编译程序应掌握a. 源程序b. 目标语言c. 编译方法d. 以上三项都是(2) 编译程序绝大多数时间花在上。

a. 出错处理b. 词法分析c. 目标代码生成d. 表格管理(3) 编译程序是对。

a. 汇编程序的翻译b. 高级语言程序的解释执行c. 机器语言的执行d. 高级语言的翻译【解答】(1) d (2) d(3) d1.2 计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?【解答】计算机执行用高级语言编写的程序主要有两种途径:解释和编译。

在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,最后再读入下一条源程序语句,并解释执行。

这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。

在编译方式下,高级语言程序的执行是分两步进行的:第一步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。

因此,编译对源程序的处理是先翻译,后执行。

从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型好,便于程序调试。

这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。

1.3 请画出编译程序的总框图。

如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题?【解答】编译程序总框图如图1-1所示。

作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。

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

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

(完整版)编译原理课后习题答案第一章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、将编译程序分成若干个“遍”是为了 。 a.提高程序的执行效率 b.使程序的结构更加清晰 c.利用有限的机器内存并提高机器的执行效率 d.利用有限的机器内存但降低了机器的执行效率 2、构造编译程序应掌握 。 a.源程序 b.目标语言 c.编译方法 d.以上三项都是 3、变量应当 。 a.持有左值 b.持有右值 c.既持有左值又持有右值 d.既不持有左值也不持有右值 4、编译程序绝大多数时间花在 上。 a.出错处理 b.词法分析 c.目标代码生成 d.管理表格 5、 不可能是目标代码。 a.汇编指令代码 b.可重定位指令代码 c.绝对指令代码 d.中间代码 6、使用 可以定义一个程序的意义。 a.语义规则 b.语法规则 c.产生规则 d.词法规则 7、词法分析器的输入是 。 a.单词符号串 b.源程序 c.语法单位 d.目标程序 8、中间代码生成时所遵循的是- 。 a.语法规则 b.词法规则 c.语义规则 d.等价变换规则 9、编译程序是对 。 a.汇编程序的翻译 b.高级语言程序的解释执行 c.机器语言的执行 d.高级语言的翻译 10、语法分析应遵循 。 a.语义规则 b.语法规则 c.构词规则 d.等价变换规则 二、多项选择题 1、编译程序各阶段的工作都涉及到 。 a.语法分析 b.表格管理 c.出错处理 d.语义分析 e.词法分析
10、产生正规语言的文法为 。 a. 0型 b. 1型 c. 2型 d. 3型 11、采用自上而下分析,必须 。 a. 消除左递归 b. 消除右递归 c. 消除回溯 d. 提取公共 左因子 12、在规范归约中,用 来刻画可归约串。 a. 直接短语 b. 句柄 c. 最左素短语 d. 素短语 13、有文法G:E→E*T|T T→T+i|i 句子1+2*8+6按该文法G归约,其值为 。 a. 23 B. 42 c. 30 d. 17 14、规范归约指 。 a. 最左推导的逆过程 b. 最右推导的逆过程 c. 规范推导 d. 最左归约的逆过程 二、多项选择题 1、下面哪些说法是错误的 。 a. 有向图是一个状态转换图 b. 状态转换图是一个有向图 c.有向图是一个DFA d.DFA可以用状态转换图表示 2、对无二义性文法来说,一棵语法树往往代表了 。 a. 多种推导过程 b. 多种最左推导过程 c.一种最左推导过 程 d.仅一种推导过程 e.一种最左推导过程 3、如果文法G存在一个句子,满足下列条件 之一时,则称该文法 是二义文法。 a. 该句子的最左推导与最右推导相同 b. 该句子有两个不同的最左推导 c. 该句子有两棵不同的最右推导 d. 该句子有两棵不同的语法树 e.该句子的语法树只有一个 4、有一文法G:S→AB A→aAb|ε B→cBd|ε 它不产生下面 集合。 a. {anbmcndm|n,m≥0} b. {anbncmdm|n,m>0} c. {anbmcmdn|n,m≥0} d. {anbncmdm|n,m≥0} e. {anbncndn|n≥0}

编译原理及实现课后习题答案孙悦红 (1)

编译原理及实现课后习题答案孙悦红 (1)

|xyz|=7 | (xy)3 |=12
2.3 设有文法 G[S]�S∷=SS*|SS+|a�写出符号串 aa+a*规范推导�并构造语 法树。
S => SS* => Sa* => SS+a* => Sa+a* => aa+a*
S
S
S
*
SS+a
aa
2.4 已知文法 G[Z]�Z∷=U0∣V1 、 U∷=Z1∣1 、 V∷=Z0∣0 ,请写出 全部由此文法描述的只含有四个符号的句子。
+i#
POP,NEXTSYM
18
#E’T
i#
POP,PUSH(T’F)
所用产生式 E→TE’ T→FT’ F→i
T’→ε E’→+TE’
T→FT’ F→i
T’→*FT’
F→i
T’→ε E’→+TE’
T→FT’
19 20 21 22 23 �2�i*(i+i+i) 步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
N 错误
INPUTSYM=下一个符号
INPUTSYM=’b’ Y
N 出口
4.2 设有文法 G[Z]� Z∷=(A) , A∷=a|Bb , B∷=Aab 若采用递归下降分析方法�对此文法来说�在分析过程中�能否避免回溯�为什么�
解�若采用递归下降分析方法�对此文法来说�在分析过程中不能避免回朔。因为规则 A ∷=a|Bb 和规则 B∷=Aab 构成了间接左递归�不满足实现没有回溯的递归下降分析方法的 条件�1��书 P67��且规则 A: := a|Bb�FIRST(a)={a}�FIRST(Bb)={a}�即此规则候选式 的首符号集有相交�不满足实现没有回溯的递归下降分析方法的条件�2��书 P67��在分 析过程中�将造成回溯。

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)第一章1、将编译程序分成若干个“遍”是为了b.使程序的结构更加清晰2、构造编译程序应掌握a.源程序b.目标语言c.编译方法3、变量应当c.既持有左值又持有右值4、编译程序绝大多数时间花在上。

d.管理表格5、不可能是目标代码。

d.中间代码6、使用可以定义一个程序的意义。

a.语义规则7、词法分析器的输入是b.源程序8、中间代码生成时所遵循的是-c.语义规则9、编译程序是对d.高级语言的翻译10、语法分析应遵循c.构词规则二、多项选择题1、编译程序各阶段的工作都涉及到b.表格管理c.出错处理2、编译程序工作时,通常有阶段。

a.词法分析三、填空题b.语法分析c.中间代码生成e.目标代码生成1、解释程序和编译程序的区别在于是否生成目标程序2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。

3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。

4、编译程序是指将源程序程序翻译成目标语言程序的程序。

一、单项选择题1、文法G:S→某S某|y所识别的语言是a.某y某b.(某y某)某c.某ny某n(n≥0)d.某某y某某2、文法G描述的语言L(G)是指α,α∈VT某}a.L(G)={α|S+某α,α∈V某}b.L(G)={α|ST某α,α∈(V∪V某)}d.L(G)={α|S+α,α∈(V∪V某)}c.L(G)={α|STNTN3、有限状态自动机能识别a.上下文无关文法c.正规文法b.上下文有关文法d.短语文法4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立a.若f(a)>g(b),则a>bc.a~b都不一定成立b.若f(a)5、如果文法G是无二义的,则它的任何句子αa.最左推导和最右推导对应的语法树必定相同b.最左推导和最右推导对应的语法树可能不同c.最左推导和最右推导必定相同d.可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是a.短语b.句柄c.句型d.句子7、文法G:E→E+T|TT→T某P|PP→(E)|I则句型P+T+i的句柄和最左素短语为a.P+T和ib.P和P+Tc.i和P+T+id.P和T8、设文法为:S→SA|AA→a|b则对句子aba,下面是规范推导。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理及实现课后习题解答2.1设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5 以及A+和A*.x0=(aaa)0=ε| x0|=0xx=aaaaaa |xx|=6x5=aaaaaaaaaaaaaaa | x5|=15A+ =A1∪A2∪ …. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…}A* = A0 ∪A1 ∪A2 ∪…. ∪A n ∪…={ε,a,aa,aaa,aaaa,aaaaa…}2.2令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3xy=abcb |xy|=4xyz=abcbaab |xyz|=7(xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=122.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。

S => SS* => Sa* => SS+a* => Sa+a* => aa+a*SS S *S S + aa a2.4 已知文法G[Z]:Z∷=U0∣V1 、U∷=Z1∣1 、V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。

Z=>U0=>Z10=>U010=>1010Z=>U0=>Z10=>V110=>0110Z=>V1=>Z01=>U001=>1001Z=>V1=>Z01=>V101=>01012.5已知文法G[S]:S∷=AB A∷=aA︱εB∷=bBc︱bc , 写出该文法描述的语言。

A∷=aA︱ε描述的语言: {a n|n>=0}B∷=bBc︱bc 描述的语言:{b n c n|n>=1}L(G[S])={a n b m c m|n>=0,m>=1}2.6已知文法E∷=T∣E+T∣E-T 、T∷=F∣T*F∣T/F 、F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。

开始符号:EV t={+, - , * , / ,(, ), i}V n={E , F , T}2.7对 2.6题的文法,写出句型 T+T*F+i 的短语、简单短语以及句柄。

短语:T+T*F+iT+T*F i i T T*F 简单短语:iT*FT句柄:T2.8设有文法 G[S]:S ∷=S*S|S+S|(S)|a ,该文法是二义性文法吗?根据所给文法推导出句子 a+a*a ,画出了两棵不同的语法树,所以该文法是二义性文法。

2.9写一文法,使其语言是奇正整数集合。

A::=1|3|5|7|9|NA N::=0|1|2|3|4|5|6|7|8|92.10 给出语言{a n b m |n,m ≥1}的文法。

G[S]: S::=ABA::=aA|aB::=bB|b3.1有正则文法G[Z]:Z::=Ua|Vb,U::=Zb|b,V::=Za|a ,画出该文法的状态图,并检查句子abba 是否合法。

解:该文法的状态图如下:句子abba 合法。

3.2状态图如图3.35 所示,S 为开始状态,Z 为终止状态。

写出相应的正则文法以及V,V n和V t。

图3-35状态图解:左线性文法G[Z]: 右线性文法G’[S]: Z::=Ab|b S::=aA|bA::=Aa|a A::=aA|b V={Z,A,a,b} V={S,A,a,b}V n={Z,A} V n={S,A}V t={a,b} V t={a,b}3.3构造下列正则表达式相应的NFA:1(1|0)*|01(1010*|1(010)*1)*0解:正则表达式:1(1|0)*|01、2、3、4、正则表达式:1(1010*|1(010)*1)*03.4将图3.36 的NFA M 确定化解:a q1 q0 a bbq20 a baa2bb 3ba 1b 4 b 5a bq0={0} {0,1} {1}q1={0,1} {0,1} {1}q2={1} {0} ΦDFA:a3.5将图3.37 的DFA 化简。

aa图3.37 DFA状态图解:划分 a b{0,1} {1} {2,4}{2,3,4,5} {1,3,0,5} {3,5,2,4}划分 a b{0,1} {1} {2,4}{2,4} {0,1} {3,5}{3,5} {3,5} {2,4}q0={0,1} q1={2,4} q2={3,5}化简后的DFA:b ba q0 q1 q2 aa b4.1对下面文法,设计递归下降分析程序。

S→aAS|(A) , A→Ab|c解:首先将左递归去掉,将规则A→Ab|c 改成A→c{b}非终结符号S 的分析程序如下:非终结符号A 的分析程序如下:4.2设有文法G[Z]:Z∷=(A) , A∷=a|Bb , B∷=Aab若采用递归下降分析方法,对此文法来说,在分析过程中,能否避免回溯?为什么?解:若采用递归下降分析方法,对此文法来说,在分析过程中不能避免回朔。

因为规则A∷=a|Bb 和规则B∷=Aab 构成了间接左递归,不满足实现没有回溯的递归下降分析方法的条件(1)(书P67),且规则A: := a|Bb,FIRST(a)={a},FIRST(Bb)={a},即此规则候选式的首符号集有相交,不满足实现没有回溯的递归下降分析方法的条件(2)(书P67),在分析过程中,将造成回溯。

改写文法可避免回溯:将规则B∷=Aab 代入规则A∷=a|Bb 得:A∷=a|Aabb,再转换成:A∷=a{abb},可避免回溯。

4.3若有文法如下,设计递归下降分析程序。

<语句>→<语句><赋值语句>|ε<赋值语句>→ID=<表达式><表达式>→<项>|<表达式>+<项>|<表达式>-<项><项>→<因子>|<项>*<因子>|<项>/<因子><因子>→ID|NUM|(<表达式>)解:首先,去掉左递归<语句>→<语句><赋值语句>|ε改为:<语句>→{<赋值语句>}<表达式>→<项> | <表达式> + <项> | <表达式> - <项> 改为:<表达式>→<项>{(+ | -)<项>}<项>→<因子> | <项> * <因子> | <项> / <因子> 改为:<项>→<因子>{(* | /)<因子>}则文法变为:<语句>→{<赋值语句>}<赋值语句>→ID=<表达式><表达式>→<项>{(+ | -)<项>}<项>→<因子>{(* | /)<因子>}<因子>→ID|NUM|(<表达式>)非终结符号<赋值语句> 的分析程序如下:<赋值语句>→ID=<表达式>非终结符号<表达式> 的分析程序如下:<表达式>→<项>{(+ | -)<项>}非终结符号 <项> 的分析程序如下:非终结符号 <因子> 的分析程序如下:复值语句的分析程序<因子>→ID|NUM|(<表达式>)<项>→<因子>{(* | /)<因子>}4.4有文法G[A]:A::=aABe|ε,B::=Bb|b(1)求每个非终结符号的FOLLOW 集。

(2)该文法是LL(1)文法吗?(3)构造LL(1)分析表。

解:(1)FOLLOW(A)=First(B)∪{#}={b,#}FOLLOW(B)={e,b}(2)该文法中的规则B::=Bb|b 为左递归,因此该文法不是LL(1)文法(3)先消除文法的左递归(转成右递归),文法变为:A::=aABe|ε,B::=bB’,B’::=bB’4.5若有文法A→(A)A|ε(1)为非终结符A 构造FIRST 集合和FOLLOW 集合。

(2)说明该文法是LL(1)的文法。

解:(1)FIRST(A)={(, ε}FOLLOW(A)={),#}(2)该文法不含左递归;FIRST((A)A)={(},FIRST(ε)={ε},FIRST ((A)A)∩FIRST(ε)=Φ,且FOLLOW(A)={),#},FIRST((A)A)∩FOLLOW(A) =Φ,因此,该文法满足LL(1)文法的条件,是LL(1)文法。

4.6利用分析表4-1,识别以下算术表达式,请写出分析过程。

(1)i+i*i+i(2)i*(i+i+i)解:4.7考虑下面简化了的C 声明文法:<声明语句>→<类型><变量表>;<类型>→int|float|char<变量表>→ID,<变量表>|ID(1)在该文法中提取左因子。

(2)为所得的文法的非终结符构造FIRST 集合和FOLLOW 集合。

(3)说明所得的文法是LL(1)文法。

(4)为所得的文法构造LL(1)分析表。

(5)假设有输入串为“char x,y,z;”,写出相对应的LL(1)分析过程。

解:(1)规则<变量表>→ID,<变量表>|ID 提取公因子如下:<变量表>→ID(,<变量表>|ε)增加新的非终结符<变量表1>,规则变为:<变量表>→ID<变量表1><变量表1>→,<变量表>|εC 声明文法改变为:<声明语句>→<类型><变量表>;<类型>→int|float|char<变量表>→ID<变量表1><变量表1>→,<变量表>|ε(2)FIRST(<声明语句>)=FIRST(<类型>)={int,float,char}FIRST(<变量表>)={ID}FIRST(<变量表1>)={,,ε}FOLLOW(<声明语句>)={#}FOLLOW(< 类型>)=FIRST(< 变量表>)={ID}FOLLOW(<变量表>)=FOLLOW(<变量表1>)={;}(3)所得文法无左递归,且FIRST(int)∩FIRST(float)∩FIRST(char)=Φ FIRST(,<变量表>)∩FIRST(ε)=Φ FIRST(,<变量表>)∩FOLLOW(<变量表1>)=Φ 因此,所得文法为LL(1)文法。

相关文档
最新文档