编译原理课后答案(陈火旺)
课后答案网 http://www.khdaw.com 课后答案网 http://www.khdaw.com 第二章 P36-6 (1) LG()1是0~9组成的数字串
(2) 最左推导:
NNDNDDNDDDDDDDDDDDDDNNDDDDNNDNDDDDDDDD0010120127334556568
最右推导: NNDNNDNNDNDNNDNDNNDNNDND77272712712701274434886868568
P36-7 G(S) ONODNSOAOAADN1357924680|||||||||||
P36-8 文法: ETETETTFTFTFFEi|||*|/()|
最左推导: EETTTFTiTiTFiFFiiFiiiETTFFFiFiEiETiTTiFTiiTiiFiii********()*()*()*()*()*()*()
最右推导: EETETFETiEFiEiiTiiFiiiiiETFTFFFEFETFEFFEiFTiFFiFiiiii**********()*()*()*()*()*()*()*()
语法树:/******************************** 课后答案网 http://www.khdaw.com 课后答案网 http://www.khdaw.com EEFTE+TFFT+iiiE
EFTE-TFFT-i
ii
EEFT+TFFTiii*
i+i+ii-i-ii+i*i
*****************/ P36-9
句子iiiei有两个语法树: SiSeSiSeiiiSeiiiieiSiSiiSeSiiSeiiiiei
P36-10 /**************
) (|)(|STTTSS
***************/ P36-11 /*************** L1:
||cCCabaAbAACS
L2: bcbBcBaAAABS||
L3: 课后答案网 http://www.khdaw.com 课后答案网 http://www.khdaw.com ||aBbBaAbAABS
L4: ABBAABAS|01|10|
***************/ 第三章习题参考答案
P64–7 (1) 101101(|)*
0 1 1 0 1
1 确定化: 0 1 {X} φ {1,2,3} φ φ φ {1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4} {2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y} {2,3,5} {2,3,4,}
0 1 0 0 0 1 1 0 0 1 0 1 1 1 最小化:
X 1 2 3 4 Y 5 X Y
6 0 1 2 3 5 4 课后答案网 http://www.khdaw.com
课后答案网 http://www.khdaw.com {,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100
3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}
0 1 0 0 1 0 0 1 0 1 1 1
P64–8 (1) 01)0|1(*
(2) )5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*
(3) ******)110|0(01|)110|0(10
P64–12 (a) a
a,b
a
确定化: a b {0} {0,1} {1} {0,1} {0,1} {1} {1} {0} φ
5 0 1 2
4 3
0 1 课后答案网 http://www.khdaw.com
课后答案网 http://www.khdaw.com φ φ φ 给状态编号: a b 0 1 2 1 1 2 2 0 3 3 3 3
a a
a b b b b a 最小化: {,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123abab
a a b b
a b
(b) b b a
a b a a b b a a a
已经确定化了,进行最小化
0 1 2 3
0 1 2 0 2 3 1 4 5 课后答案网 http://www.khdaw.com
课后答案网 http://www.khdaw.com 最小化: {{,}, {,,,}} 012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}abababababa
{,}{,}{,}{,}{,}{,}{,}10243535353524
b
ab
b b a a b a P64–14 (1) 0 1
0 (2):
(|)*010
0 1
0 确定化: 0 1 {X,1,Y} {1,Y} {2}
0 1 2 0 1 Y X
Y X
2 1 课后答案网 http://www.khdaw.com
课后答案网 http://www.khdaw.com {1,Y} {1,Y} {2} {2} {1,Y} φ φ φ φ 给状态编号: 0 1 0 1 2 1 1 2 2 1 3 3 3 3 0
0 1 0 1 1 1
0 最小化: {,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101
0 1 1 1
0 0
第四章
P81–1 (1) 按照T,S的顺序消除左递归
|,)(||^)(TSTTSTTaSSG
递归子程序: procedure S; begin if sym='a' or sym='^' then abvance else if sym='('
0 2 1 3
0 1 3 课后答案网 http://www.khdaw.com
课后答案网 http://www.khdaw.com then begin advance;T; if sym=')' then advance; else error; end else error end; procedure T; begin S;T end; procedure T; begin if sym=',' then begin advance; S;T end end; 其中: sym:是输入串指针IP所指的符号 advance:是把IP调至下一个输入符号 error:是出错诊察程序 (2) FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST(T)={,,} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW(T)={)} 预测分析表 a ^ ( ) , # S Sa S^ ST() T TST TST TST T T TST,
是LL(1)文法 P81–2 文法:
编译原理( 陈火旺)第1章 引论
3. 第三代语言(高级语言) 1. 从应用角度分类 1. 基础语言 ➢ FORTRAN(FORmula TRANslation,公式翻译程序 设计语言,20世纪50年代)是世界上最早出现的计算 机高级程序设计语言,广泛地应用于数值计算领域, 积累了大量高效而可靠的源程序。Fortran语言与JAVA、 C#等语言相比缺乏创造力。但是,像ANSYS和Marc 等优秀的工程计算软件都运用Fortran语言编写, MATLAB的早期版本主要是为两个著名的Fortran函数 包提供程序接口,因此Fortran在工程计算领域长期处 于统治地位
➢ 世界上70%的数据都是用COBOL语言处理的,并且 90%的ATM事务处理用的都是COBOL语言。500强中 有492家使用了COBOL语言,目前在COBOL方面的投 资已经超过3万亿美元。据称用COBOL书写的程序超 过了1000亿行,并以每年约50亿行代码的速度增长
➢ 只要大型机存在,COBOL就不会消失
4
3. 第三代语言(高级语言) 高级语言是面向用户的、基本上独立于计算机种类和结构 的语言 其最大的优点是:形式上接近于算术语言和自然语言,概 念上接近于人们通常使用的概念。高级语言的一个命令可 以代替几条、几十条甚至几百条汇编语言的指令。因此, 高级语言易学易用,通用性强,应用广泛。 高级语言种类繁多,可以从以下两方面对其进一步分类: 1. 从应用角度分类 2. 从客观系统的描述分类
7
3. 第三代语言(高级语言)
1. 从应用角度分类
1. 基础语言
➢ COBOL(COmmon Business Oriented Language)是 数据处理领域最为广泛的程序设计语言
➢ COBOL主要是应用于银行、金融和会计行业等非常重 要的商业数据处理领域。 在企业管理中,数值计算并 不复杂,但数据处理信息量却很大
编译原理(陈火旺第三版)Chapt1
利用已有的某种语言的编译程序实现另一语 言的编译程序。
L2语言 A代码 L2语言 A代码
P2: L1语言 L1语言
A代码
P2: A代码
P1: A代码
重庆邮电大学
同一台机器 不同的语言
五.编译程序生成
移植方法 把一种机器上的编译程序移植到另一种机器 上。
L语言 L语言 B代码 B代码 L语言 B代码 B代码 P2: L语言 L语言 P2: B代码
P2: L语言 L语言
A代码
P2: A代码
P1: A代码
重庆邮电大学
同一种语言 不同的机器
五.编译程序生成
编译程序自动产生 编译程序-编译程序,编译程序书写系统
L语言的语法描述
语义描述 目标语言 或机器描述
源程序 表 词法分析器 单词符号 语法分析器 语法单位
语义分析与中间代码 生成器
出
格
错
管
四元式
处
理
优化段 四元式 目标代码生成器 目标代码
重庆邮电大学
理
2. 表格和表格管理
常见的表格:符号名表,常数表,标号表, 入口名表,过程引用表。 格式:
名字
信息
重庆邮电大学
3. 出错处理
出错处理程序:发现源程序中的错误,把 有关错误信息报告给用户
重庆邮电大学
5. 目标代码产生
任务: 把中间代码变换成特定机器上的目 标代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式:
绝对指令代码:
可直接运行 可重新定位指令代码: 需要连接装配 汇编指令代码: 需要进行汇编
重庆邮电大学
三.
编译原理-陈火旺版-第一章
编译器的作用与重要性
01
编译器是将高级语言程序翻译成机器语言程序的软件工具,是 软件开发的基础设施之一。
02
编译器可以提高程序的执行效率,使得程序能够在各种计算机
上运行。
编译器还可以对程序进行优化,提程简介
01
02
03
词法分析
将输入的源程序分解成一 个个的单词符号,即词法 单元。
词法分析器的构造
构造原理
根据词法规则构造出识别相应单 词符号的有限自动机,然后将有 限自动机转换为对应的程序代码
构造方法
手工构造法、自动生成法
注意事项
处理好单词符号的二义性问题; 识别出源程序中的错误并进行适 当的处理。
04
语法分析
语法分析概述
语法分析的任务
根据语言的语法规则,对输 入的符号序列进行合法性检 查,并构造出相应的语法结
中间代码的形式
常见的中间代码形式有三地址码、四元式、树形表示等。
中间代码生成算法
根据源程序的语法结构和语义规则,生成相应的中间代码序列。
符号表管理
符号表的作用
符号表用于记录源程序中各种标识符的属性信息,如类型、作用域 和存储地址等。
符号表的组织方式
常见的符号表组织方式有线性表、散列表和树形结构等。
循环优化
通过循环展开、循环合并、循环交换等技术来改进循环的性能。
目标代码生成方法
机器无关代码生成
机器相关代码生成
生成与特定机器无关的中间代码,然后在 运行时将其转换为特定机器上的目标代码 。
直接生成特定机器上的目标代码,这需要 考虑机器的指令集、寄存器分配、内存访 问等因素。
汇编语言代码生成
高级语言虚拟机代码生成
编译原理课件chap02(陈火旺)
<字母 →z 字母> 字母 <数字 →1 数字> 数字 … <数字 →9 } 数字> 数字 S= <标识符 = 标识符 标识符> “< >” 表示非 终结符
第二章 文法和语言
<2> 文法G的第二种表示法: 的第二种表示法: 上例1改为: 上例 改为: G: S → 0S1 改为 S → 01 <3> 文法G的第三种表示法: 的第三种表示法: 上例1改为: G[S]: 上例 改为: 改为 S → 0S1 S → 01 一般约定,第一条产生式的左部是识别(开始) 符号;用尖括号括起来的是非终结符号,不用尖 括号括起来的是终结符号,或者用大写字母表示 非终结符号,小写字母表示终结符号。
第二章 文法和语言
2型文法也称上下文无关文法,注意其语言定 型文法也称上下文无关文法, 义: G的任何产生式为A→β,A∈VN, 的任何产生式为A→β, A→β β∈( β∈(VN∪VT)* 表明凡出现在产生式左边的符号都是非 终结符。 终结符。 型文法也称右线性文法。 3型文法也称右线性文法。3型文法还有另 一种形式,称左线性文法:一个文法G 一种形式,称左线性文A→α 其中α A→Bα 或A→α ,其中α∈VT* , 由于3 A、B ∈ VN 由于3型文法等价于正规式所以也 称正规文法。 称正规文法。
第二章 文法和语言
3、直接推导的定义 、
<1> α → β 是文法 (VN ,VT ,P,S)的规则, 文法G=( 文法 , )的规则, 中的任意符号, 满足: γ和δ是V*中的任意符号,若有符号串 ,W满足: 中的任意符号 若有符号串V, 满足 V= γ α δ,W=γ βδ = δ
编译原理 属性文法和语法制导翻译 陈火旺版
三.举例 例6.1 表6.1定义的属性文法说明了一个台式 定义的属性文法说明了一个台式
计算器, 计算器,该 计算器读入一个可含数字,括号和+,*运算符的算术 计算器读入一个可含数字,括号和 , 运算符的算术 表达式,并打印表达式的值,每个输入行以n作为结 表达式,并打印表达式的值,每个输入行以 作为结 假设表达式为3*5+4,后跟一个换行符 ,则程序 束。假设表达式为 ,后跟一个换行符n, 打印数值为19 打印数值为
复习题
名词术语: 名词术语: 属性文法、继承属性、 属性文法、继承属性、综合属性 语法制导翻译、抽象语法树、 语法制导翻译、抽象语法树、翻译模式 属性文法、 S-属性文法、L-属性文法
表 6.2(P139) 带继承属性 L.in 的属性文法 产生式 语义规则 D→TL L.in:=T.type T→int T.type:=integer T→real T.type:=real L→L1,id L1.in:=L.in addtype(id.type,L.in) L→id addtype(id.type,L.in) 给出句子 real id1,id2,id3 的带注释的语法树
产生式 L→En E→E1+T E→T T→T1*F T→F F→(E) F→digit 语义规则 print(E.val) E.val:=E1.val+T.val E.val:=T.val T.val:=T1.val*F.val T.val:=F.val F.val:=E.val F.val:=digit.lexval
第六章 属性文法和语法制导翻译
6.1 属性文法 6.2 基于属性文法的处理方法 6.3 S-属性文法的自下而上计算 属性文法的自下而上计算 6.4 L-属性文法和自顶向下翻译 属性文法和自顶向下翻译 6.5 自下而上计算继承属性
第3章 词法分析 (编译原理 陈火旺)
标识符的符号表入口地址作为其单词符号的属性值,常
每个基本字占一个单词种别,单词符号的属性值缺省。
对于界符,运算符通常一个符号一个种别,单词符号的
属性值缺省
例: 参见P42.表3.1 单词符号及种别编码
10
3.1.3 词法分析器作为独立子程序
词法分析可采用如下两种处理结构:
把词法分析程序作为主程序。将词法分析作为
19
3.2.1 正规文法、正规式与正规集
正规集:由正规文法产生的语言所构成的集合。
注:正规集是集合,可有穷也可无穷。 可通过正规式来形式化表示。
对于一个正规文法的语言提炼出一个简洁的公式,用这个
式子来对它进行形式化的表示,这个式子叫正规式。
正规式:也称正则表达式,是说明单词的模式的一种重要的 表示法(记号);是定义正规集的数学工具;用来描述单词 符号。
在设计一个编译程序时,通常是把对源程序的结构分析分为词 法分析和语法分析两个相对独立的阶段来完成。
第一,描述单词的结构比描述源程序的其它语法结构要简单
得多,仅使用3型文法也就基本够用了。
第二,由于把词法分析和语法分析分开,可使编译程序各部
分的功能更为单一,整个编译程序的结构也更加清晰,从而 有利于编译程序的编写和调整。 上述词法分析和语法分析两个阶段的划分,仅仅是对整个编译 程序的逻辑功能而言,而不一定指的是编译程序的执行流程。
25
例3.2 判断下述正规式之间是否等价: (1)b(ab)*与(ba)*b (2)(ab)*与a*b* 解: (1) b(ab)*对应的正规集是b后面出现任意多个ab对
L(b(ab)*)={b,bab,babab, ……}
编译原理课后答案
<表达式>AVV ------ *第二早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 | 9 C —>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 | 9 C —>2 | 4 | 6 | 8&设<表达式 >为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*I8、 是有二义性的,因为句子abc 有两棵语法树(或称有两个最左推导或有两个最右 推导)ii<表达式>最左推导1: S => Ac => abc最左推导2:S => aB => abc9、⑴a a(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、⑴因为从文法的开始符E出发可推导出E+T*F,推导过程如下:E => E+T =>E+T*F,所以E+T*F 是句型。
编译原理课后习题答案
第一章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⇒75431N⇒ND⇒NDD⇒NDDD⇒NDDDD⇒DDDDD⇒7DDDD⇒75DDD⇒754DD⇒7543D⇒75431 4. 证明文法S→iSeS|iS| i是二义性文法。
答:对于句型iiSeS存在两个不同的最左推导:S⇒iSeS⇒iiSesS⇒iS⇒iiSeS所以该文法是二义性文法。
编译原理(第3版)课本习题答案
第二章 高级语言及其语法描述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=>5687.【答案】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 有两棵不同语法分析树,如下所示,因此该文法是二义的。
第6章 属性文法和语法制导翻译 (编译原理 陈火旺).
3
CH.6 属性文法和语法制导翻译
• 在分析-综合模式的编译器中,语义分析是分 析过程的最后一个步骤,只有在这一步才真 正开始考虑程序语言的意义,并着手把它们 翻译成某种中间代码。这一过程通常采用的 方法是属性文法和语法制导翻译方法。 • 语法制导翻译方法的基本思想是,根据翻译 的需要设置文法符号的属性,用属性描述语 法结构的语义,用属性的计算完成翻译。 • 属性文法使文法符号属性值的计算和产生式 相联系。随着语法分析的进行,执行属性值 的计算,从而完成语义分析和翻译的任务。
37
抽象语法树:简例
• 例,为下面文法的句子 a-4+c 建立抽象语法树。 E E+T | E-T | T T (E) T id | num • 为每个运算量或运算符号都建立一个结点。 E • 可以根据表达式的运算顺序自下而上的构造 --+ 语法树 E + T 手工构造。 抽象语法树
9
属性文法、语义规则(2)
• 属性文法的形式: 产生式 语义规则 . 综合属性 A b:=f(c1,c2,…,ck) – 例如 P137.表6.1的属性文法: 继承属性 • EE1+ T E.val := E1.val+ T.val 综合属 – 例如 P139.表6.2的属性文法: 性 DTL L.in := T.type LL1 , id L .in := L.in 1 继承属性 继承属性
10
• 例, P137.
假设:
产生式 ABC
语义规则 A.b:=A.a+B.c C.d:=B.c+1 A有综合属性b和继承属性a B有综合属性c C有继承属性d
继承属性A.a和综合属性B.c在其他适当的地方计算。
