编译课后答案课件-陈火旺等编著第三版PPT
编译课后答案-陈火旺等编著第三版ppt课件
正规式 (0|1)*010(0|1)*
DFA:
4
1
0
01
00 11 20 3
01 1
1
05
最小化DFA:
1
0
0 011
20
3
2021/8/9
1
最新课件
0,1
11 11
CH.3.练习题10(P64.)
10. 用FA写出渡河的方法。
设:人---R;狼---L;羊---Y;菜---C;
左岸---Z;右岸---U;
依照字典序排列; 正规式 (a|A)*(b|B)*(c|C)*(d|D)*…(z|Z)*
2021/8/9
最新课件
99
CH.3.练习题9(P64.)
9.问题:没构造出DFA;没过程;方法没掌握。
(1) {0,1}上的含有子串010的所有串; 至少含一个。 正规式 (0|1)*010(0|1)* 或 (0*1*)*010(0*1*)*
问题:没写全;表达不准确
解:< int,->,
< CInt, “CInt”> ,
< ::,-> ,
< nMulDiv, “nMulDiv”> ,
<(,->,
< int,-> ,
< n1, “n1”> , < , , -> ,
< int,-> ,
< n2, “n2”> ,
< ),-> ,
< {, -> ,
最小化DFA:
a
0b
a
a
2 b3
b
初始: {0,1}, {2,3,4,5}
编译原理(陈火旺第三版)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. 目标代码产生
任务: 把中间代码变换成特定机器上的目 标代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式:
绝对指令代码:
可直接运行 可重新定位指令代码: 需要连接装配 汇编指令代码: 需要进行汇编
重庆邮电大学
三.
《编译原理》(陈火旺版)课后作业参考答案ch6-10
第6章属性文法和语法制导翻译7. 下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值:试设计求的属性文法,其中,已知B的综合属性c, 给出由B产生的二进位的结果值。
例如,输入时,=,其中第一个二进位的值是4,最后一个二进位的值是。
【答案】11. 设下列文法生成变量的类型说明:(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例。
【答案】第7章语义分析和中间代码产生1. 给出下面表达式的逆波兰表示(后缀式):【答案】3. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
【答案】间接码表:(1)→(2)→(3)→(4)→(1)→(5)→(6)4. 按节所说的办法,写出下面赋值句A:=B*(-C+D) 的自下而上语法制导翻译过程。
给出所产生的三地址代码。
【答案】5. 按照7.3.2节所给的翻译模式,把下列赋值句翻译为三地址代码:A[i, j]:=B[i, j] + C[A [k, l]] + d[ i+j]【答案】6. 按7.4.1和节的翻译办法,分别写出布尔式A or ( B and not (C or D) )的四元式序列。
【答案】用作数值计算时产生的四元式:用作条件控制时产生的四元式:其中:右图中(1)和(8)为真出口,(4)(5)(7)为假出口。
7. 用7.5.1节的办法,把下面的语句翻译成四元式序列: While A<C and B<D do if A=1 then C:=C+1 else while A ≦D do A:=A+2; 【答案】第9章 运行时存储空间组织4. 下面是一个Pascal 程序:当第二次( 递归地) 进入F 后,DISPLAY 的内容是什么当时整个运行栈的内容是什么 【答案】第1次进入F 后,运行栈的内容: 第2次进入F 后,运行栈的内容: 109 87 6 5 4 3 2 1 017 1615 14 13 12 11 10 9 8 7 6 5第2次进入F 后,Display 内容为:5. 对如下的Pascal 程序,画出程序执行到(1)和(2)点时的运行栈。
编译原理PPT课件
教学目的与要求:
编译程序是现代计算机系统的基本组成部
分之一。本课程重点讲述编译程序的设计
原理和常用实现技术。通过课程的学习和
实验的完成,应该清楚的理解一个编译程
序是如何工作的;如果在以后遇到了任何
一个程序设计语言,应该知道如何实现这
个语言的多数机制;应具有一定的使用编
译构造工具开发编译程序的经验;会将所
参考书:《程序设计语言 编译原理》(第3 版),陈火旺、刘春林等,国防工业出版社 2000
等等
2021/3/7
CHENLI
2
教学内容
1 编译程序概述 编译程序是现代计算机系统的基本组成部分之 一.编译程序一般由词法分析程序,语法分析程 序,语义分析程序,中间代码生成程序,目标 代码生成程序,代码优化程序,符号表管理程 序和错误处理程序等成分构成。本章概要介绍 编译成分的主要功能以及编译阶段的逻辑关系。
教学内容
5 语法分析程序的构造
自顶向下的语法分析。可以看作是为一个输入串寻找 一个最左推导的过程,也等价于从根开始,按前序生成 结点,为输入串构造分析树的过程。讨论一种有效的 无回溯的自顶向下分析程序,这种分析程序称为预测 分析程序。介绍对于一个文法类:LL(1)文法, 如 何自动的构造预测分析程序。
2 PL/0 编译程序剖析 给出一个简单的类Pascal语言,其编译程序用 高级语言(C和Pascal)实现。通过剖析该高 级语言程序以理解各编译成分的功能及手工实 现方法。
2021/3/7
CHENLI
3
教学内容
3 高级语言的认识
要学习和构造编译程序,理解和定义程序设计语言
是必不可少的。每个程序设计语言都有一定的规则用 以规定合适程序的语法结构,也需要有对一个程序的 含义的描述。上下文无关文法给出程序设计语言的精 确的,易于理解的语法说明。尚没有公认的形式系统 描述程序含义,但也有流行的描述语义规则的方法— 属性文法。
陈火旺编译原理第三版
陈火旺编译原理第三版
陈火旺、刘春林、谭庆平、赵克佳、刘越编著的《程序设计语言编译原理(第3版高等学校电子信息类规划教材)》的参考学时数80学时,其主要内容包括词法分析、语法分析、属性文法与语法制导翻译、语义分析与中间代码产生、符号表与运行时存储空间组织、优化.与目标代码生成、并行编译技术。
本书将编译技术的*发展,例如属性文法、面向对象语言的编译技术、并行编译技术、编译程序自动构造工具等内容系统地融合到教材中。
本书的主要例题和习题均以C、Pascal为语言背景,并在一些重要的章节中增加了必要的例题,以帮助读者理解和自学。
使用本教材时应注意,在学这门课之前,学生必须预修计算引论(程序设计方法)和高级语言(PASCAL、C或C++),并且好具有数据结构和离散数学方面的基本知识。
编译原理第三版课后习题答案解析
目录P36-6 (2)P36-7 (2)P36-8 (2)P36-9 (3)P36-10 (3)P36-11 (3)P64–7 (4)P64–8 (5)P64–12 (5)P64–14 (7)P81–1 (8)P81–2 (9)P81–3 (12)P133–1 (12)P133–2 (12)P133–3 (14)P134–5 (15)P164–5 (19)P164–7 (19)P217–1 (19)P217–3 (20)P218–4 (20)P218–5 (21)P218–6 (22)P218–7 (22)P219–12 (22)P270–9 (24)P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-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*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A AC S →→→ L2:bcbBc B aA A AB S ||→→→εL3:εε||aBb B aAb A AB S →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*1 ε ε 1 0 11 确定化: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,}1 00 0 1 1 00 1 0 1 1 1 最小化:X 1 2 3 4 Y5 X Y60 12 35 4{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}===== 010 0 1 00 1 0 1 1 1P64–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(10P64–12(a)aa,b a确定化:a b {0} {0,1} {1} {0,1} {0,1} {1} {1}{0}φ5 01 2 4 3 01φφ φ给状态编号:a b 0 1 2 1 1 2 2 0 3 333aaa b b bba最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a ab bab (b)b b aa b aa bb aa a已经确定化了,进行最小化0 1 2 3 01 2 02 3 14 5最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a bb b aa baP64–14(1) 01 0 (2):(|)*0100 1 ε ε确定化:0 1 {X,1,Y}{1,Y}{2}1 2 01YX YX 2 1{1,Y} {1,Y} {2} {2} {1,Y} φ φφ φ 给状态编号:0 1 0 1 2 1 1 2 2 1 3 3330 1 01 1 10 最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====1 1 1 0第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T TS T T a S S G '→''→→' 递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='('0 2 13 01 3then begin advance;T;if sym=')' then advance; else error; end else error end;procedure T; begin S;'T end;procedure 'T ; beginif 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 S a →S →^S T →()TT ST →' T ST →' T ST →''T'→T ε '→'T ST ,是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεεFIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φFIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3)+ * ()ab^#EE TE →' E TE →' E TE →' E TE →'E' '→+E E'→E ε '→E εTT F T →' T F T →' T F T →' T F T →'T''→T ε'→T T '→T ε '→T T '→T T '→T T '→T εFF P F →'F P F →' F P F →' F P F →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^(4)procedure E; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error endprocedure E'; beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error endprocedure T'; beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then error endprocedure F; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error endprocedure F'; beginif sym='*'then begin advance; F' end endprocedure P; beginif sym='a' or sym='b' or sym='^' then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advance else error endelse errorend;P81–3/***************(1) 是,满足三个条件。
编译原理课后习题答案(陈火旺+第三版)
编译原理课后习题答案(陈火旺+第三版)第二章P36-6(1)L G ()1是0~9组成的数字串(2) 最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-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*****************/P36-9句子iiiei 有两个语法树: S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T T TS S →→***************/1 ε ε 1 0 11 确定化:1 1111 1 最小化:{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}=====0 1111 1P64–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(10P64–12(a)aa确定化:给状态编号:aaa b b ba0 1最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====aabb ab (b)b baa baa baa a已经确定化了,进行最小化最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a baa baP64–14(1) 00 (2):(|)*0100 1 ε确定化:给状态编号:1 0110 最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====1 11第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T T S T T a S S G '→''→→'递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='(' then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS;'Tend;procedure 'T;beginif sym=','then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序(2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε}FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#} FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b||*|()|^||εεεFIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φFIRST(*F')∩FIRST(ε)={*}∩{ε}=φFIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φFIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ所以,该文法式LL(1)文法.(3)(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^'then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then errorendprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^'then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^'then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^'then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advanceelse errorendelse error end;P81–3/***************(1) 是,满足三个条件。
编译原理课件chap01(陈火旺)
第一章 引 论第一章 引论1.1 1.1 什么叫编译程序什么叫编译程序编译程序编译程序::是指这样的程序,它能够把某种语言的程序转换成另一种语言的程序,而后者与前者在逻辑上是等价的。
如果源语言是诸如源语言是诸如FORTRAN FORTRAN FORTRAN、、Pascal Pascal、、C 、Ada Ada、、Smalltalk Smalltalk或或Java Java这样的这样的“高级语言”,而目标语言如汇编语言之类的“低级语言”这样的翻译程序则称之为编译程序。
本课程主要介绍设计和构造编译程序本课程主要介绍设计和构造编译程序的基本原理和方法。
编译程序又简称为“编译器”•第一个编译器是20世界50年代的后期出现的FORTRAN语言编译器。
•同样,解释程序又简称为“解释器”,但是在概念上与编译器有明显区别:编译程序是源转换系统,而解释程序是源程序的一个执行系统。
编译程序的结果是得到等价源程序的某种目标机程序,而解释程序的结果是得到源程序的执行结果,即它相当于执行源程序的抽象机。
第一章引论注意编译程序与解释程序的区别,一个语言的解释程序是这样的程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
术语“编译”的内涵是实现从源语言表示的 术语算法向目标语言表示的算法的等价变换。
第一章引论高级语言分类及其编译:过程式语言:FORTRAN Pascal Ada C (特点:面向驱动,面向语句,由系列的语句组成)函数式语言:LISP ML ASL(注重程序表示的功能,而不是一个语句接一个语句的执行)从已有的函数出发构造更复杂的函数。
逻辑式语言:PROLOG(检查一定的条件,当满足时,则执行适当的动作。
)对象式语言:SMALLTALK C++(封装性、继承性、多态性)第一章引论这里主要研究过程式语言的编译高级语言分类及其编译:过程式语言:FORTRAN Pascal ADA C函数式语言:LISP ML ASL逻辑式语言:PROLOG对象式语言:SMALLTALK C++函数式语言与逻辑式语言,特别是逻辑式语言,其编译技术与过程式语言的差别比较大;因对象式语言的载体基本上是过程式的,所以其编译程序也不难理解。
编译原理_-_陈火旺版_-_第三章new
预处理 子程序
输入 列表 输入缓冲区
扫描器 扫描缓冲区
单词符号
词法分析器的结构
编译原理
一、输入、预处理
输入串放在输入缓冲区中。
预处理子程序:剔除无用的空白、跳格、 回车和换行等编辑性字符;区分标号区、 捻接续行和给出句末符等
扫描缓冲区
↑
↑
起点 搜索
指示器 指示器
编译原理
二、单词符号的识别:超前搜索
2)对含回路的状态结,可对应一段由WHILE结构 和IF语句构成的程序.
字母或数字
i 其它 j
GetChar( ); while (IsLetter( ) or IsDigit( ))
GetChar( ); …状态j的对应程序段…
输入字符串x=aababb, 是否是该文法的句子? aa babb
SABABA Z
或写为:
(S)a→(A)a→(B)b→(A)a→(B)b→(A)b→Z Z是终止状态,所以,
输入字符串aababb是上述文法的句子。
为什么
可以通过运行状态转换图来识别正则文法的句子?
步骤 当前状态 输入的其余部分
Z
1
如果基本字、标识符和常数(或标号)之间没 有确定的运算符或界符作间隔,则必须使用一 个空白符作间隔。 DO99K=1,10 要写成 DO 99 K=1,10
编译原理
3 状态转换图的实现
思想:每个状态结对应一小段程序。
做法:
1)对不含回路的分叉结,可用一个CASE语句或 一组IF-THEN-ELSE语句实现
基本字:如 begin,repeat, 标识符——表示各种名字:如变量名、数组
名和过程名 常数:各种类型的常数 运算符:+,-,*,/, 界符:逗号、分号、括号和空白
编译原理陈火旺版PPT课件
例有文法G[L]
(1)LE,L (2)LE (3)Ea (4)Eb
要求对输入串a,b,a进行分 析,即分析#a,b,a#
首先应给出LR分析表
为了节省空间,在实际应用中,将动作(Action) 表和状态转换(Goto)表中关于终结符的各列对 应进行合并。
10
例如,本来 Action(S0,a)= “移进”,表示 在状态S0下输入 a时,执行“移
进行分析时,对
为了构造分应析的动表作,是我把们符根据各项目的特点把项 目分成不同类型号,a移分进类符的号栈原。则是根据圆点所在位置
和圆点之后是终结符它还表是明非该状终态结等符进行的。
1.,移进V项*,目a:V圆T,它点此析对之时完待的应,毕后着分已,的为对析把状终非。已终态结分在结为符符移的B进项状目态, A;Sa.Aa.c,Be 2.待约项目:圆点栈之顶,后可为以非按终相结符的项目, A.B ,
(1)应用面广:能够用LR分析程序识别绝大多数的程 序设计语言的语法结构;
(2)实现效率高:虽构造方法复杂,但是实现(执行) 效率高。 (3)查错准确:LR分析器能够及时发现语法错误并准 确指出错误位置。
1
LR(k)分析方法中L是指自左(Left)向右扫描输入单词 串,R指分析过程是最右(Right)推导的逆过程(规 范归约),k是指在决定当前分析动作时需向前察看 的输入符号个数。
输入符号进栈; 归约:用相应的产生
S0
移进
元素元为素空为白a表cc 示表出示错接受
式进行归约;
S1
r5
接受:当归约到只剩下
…
文法开始符号且输入串 结束时分析成功;
Sm
ac c
出错:当状态栈顶为某一状态下,出现了不该出现的
编译原理课件chap08(陈火旺)
• •
8.2.1 栈式存储分配与活动记录 使用栈式存储分配法意味着程序运 行时,每当进入一个过程(或函数)就有一 个相应的活动记录累筑于栈顶,此记录 含有连接数据、形式单元、局部变量、 局部数组的内情向量和临时工作单元等; 在进入过程和执行过程的可执行语句之 前,再把局部数组所需空间累筑于栈顶, 从而形成过程工作时的完整数据区。
TOP
临时工作单元 内情向量 简单变量 形式单元 2 1 参数个数 返回地址 老SP
SP
0
第八章 运行时存储空间组织
4 3 TOP+3 2 1 TOP SP 0
参数个数n
…
T2 T1 P的活动记录 现行SP值
第八章 运行时存储空间组织
8.2 简单的栈式存储分配
• 我们首先考虑一种简单程序语言的 实现,这种语言没有分程序结构,过程 定义不允许嵌套,但允许过程的递归调 用,允许过程含有可变数组。例如,C语 言除不允许含有可变数组外,就是这样 一种语言。C语言的程序结构如下:
第八章 运行时存储空间组织
• • • • • • • • •
第八章 运行时存储空间组织
•
满足这些条件的语言有FORTRAN,还有 BASIC等语言。在这些语言中,编译程序可以完 全确定程序中数据项所在的地址(通常为相对于 各数据区起始地址的位移量)。由于过程调用不 允许递归,因此数据项的存储地址就与过程相联 系。过程调用所使用的局部数据区可以直接安排 在过程的目标代码之后,并把各数据项的存储地 址填入相关的目标代码中,以便在过程运行时访 问这个局部数据区。在此,不存在对存储区的再 利用问题;目标程序执行时不必进行运行时的存 储空间管理,过程的进入和退出变得极为简单。
第八章 运行时存储空间组织
编译原理课后答案(陈火旺)
第二章P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-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*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A ACS →→→ L2:bcbBc B aA A ABS ||→→→ε L3:εε||aBb B aAb A ABS →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*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,}1 00 0 1 1 00 1 0 1 1 1 最小化:X 1 2 3 4 Y5 XY60 12 35 4{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,01234560123451350123451246012345601234135012345601231010==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}===== 0 10 0 1 00 1 0 1 1 1P64–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(10P64–12(a)aa,b a 确定化:a b {0} {0,1} {1} {0,1} {0,1} {1} {1} {0} φ φφφ给状态编号:a b 0125 01 2 4 3 011 12 2 03 333aaa b b bba 最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a ab bab (b)b b aa baa bb aa a 已经确定化了,进行最小化 最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a b0 1 2 3 01 2 0 2 3 14 5b b aa b aP64–14(1) 01 0 (2):(|)*0100 1 ε ε0 确定化:0 1 {X,1,Y} {1,Y} {2} {1,Y} {1,Y} {2} {2} {1,Y} φ φφφ 给状态编号:0 1 0 1 2 1 1 2 2 1 3 33 30 1 01 1 10 最小化:0 1 2 01YX YX2 1 0 2 13{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====1 1 1 0第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T T S T T a S S G '→''→→'递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='(' then begin advance;T;if sym=')' then advance; else error; end else error end;procedure T; begin S;'T end;procedure 'T ; beginif sym=',' then begin advance; S;'T end1 3其中:sym:是输入串指针IP 所指的符号 advance:是把IP 调至下一个输入符号 error:是出错诊察程序 (2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表a^() , # S S a →S →^S T →()TT ST →' T ST →' T ST →''T'→T ε '→'T ST ,是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#}考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεεFIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φFIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3)+ * ( ) a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT F T →' T F T →' T F T →' T F T →'T' '→T ε '→T T '→T ε '→T T '→T T '→T T '→T εF F P F →' F P F →' F P F →' F P F →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^(4)procedure E; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error endprocedure E'; beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error endprocedure T';if sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advanceelse errorendelse errorend;P81–3/***************(1)是,满足三个条件。
编译原理(陈火旺第三版)练习答案
P-36-9 句子:iiiei 有两个语法树: S⇒iSeS⇒iSei⇒iiSei⇒iiiei S⇒iS⇒iiSeS⇒iiSei⇒iiiei 因此 iiiei 是二义性句子,因此 该文法是二义性的。 i i S
S e S i i S i i
S S S i e S i
P-36-10 S→TS|T T→(S)|() P-36-11 L1: G(S): S→AC A→aAb|ab C→cC|ε L2: G(S): S→AB A→aA|ε B→bBc|bc L3: G(S): S→AB A→aAb|ε B→aAb|ε L4: G(S): S→1S0|A A→0A1|ε 或者:S→A|B A→0A1|ε B→1B0|A
a {0} {0,1} {1} Φ
给状态编号:
b {1} {1} Φ Φ
{0,1} {0,1} {0} Φ
a 0 1 2 3 1 1 0 3
B 2 2 3 3
4
本文档由计算机吧【www.jsj8.com】搜集,版权归原作者,不得用于商业活动! 更多计算机考研资料请大家到:www.jsj8.com下载!
1
本文档由计算机吧【www.jsj8.com】搜集,版权归原作者,不得用于商业活动! 更多计算机考研资料请大家到:www.jsj8.com下载!
语法树: E E T E E
E
+
E
+
T
-
T
E
+
T
F i
T F i
T
*
F
E
-
T
F i
T F i i+i+i
F i
F i
i
T F i
F i
i+i*i
编译原理课件chap02(陈火旺)
第二章 文法和语言
〈7〉正闭包(∑+) ∑+ =∑1 ∪ ∑2∪. …∪∑n
∑+称∑的正闭包。
显然:∑*= ∑0∪∑+
∑+
=
∑∑*=∑*∑
第二章 文法和语言
3.文法和语言的形式定义
(用以上术语对文法的概念进行形式化)
1、规则(重写规则、产生式、生成式)
如: ababa
则长度是5
4 、空符号串:用ε表示,长度为 0 (不含任何 符号) 若符号串x ,则有εx = xε= x 5、符号串的运算:
(1)
符号串的头和尾
若z=xy,则x是z的头,y是z的尾。
第二章 文法和语言
例:设z=abc ,则z的头是
ε,a,ab,abc
则z的尾是
ε,c,bc,abc
N个
则xy=abMN
设x是符号串,则z=xx……xx,称z为x的方幂, 记z=xn。 因此 x0=ε, x1=x, x2=xx, x3=xxx 显然n>0时, 有xn =x· x
n-1=
x
n-1· x
第二章 文法和语言
(5)符号串的集合:
若集合 A 中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 两个符号串集合A、B乘积定义: AB={xy| x∈A且y∈b}
编译原理
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 编译程序引论 文法和语言 词法分析 自顶向下语法分析方法 自底向上优先分析方法 LR分析方法 语法制导翻译和中间代码生成 运行时存储空间分配 代码生成
第二章 文法和语言
编译原理课件chap03(陈火旺)
第三章 词法分析
3。2。2 单词符号的识别:超前搜索 词法分析器的结构图如图3。1所示。
源程序串
预处理 子程序
输入缓冲区
列表
扫描缓冲区 扫描器
单词符号
图3。1词法分析器
第三章 词法分析
当词法分析器调用预处理子程序处理 出一串输入字符串放进扫描缓冲区之后, 分析器就从此缓冲区中逐一识别单词符 号。当缓冲区里的字符串被处理完之后, 它又调用预处理程序装入新串。 下面我们来介绍单词符号识别的一 个简单方法-----超前搜索
第三章 词法分析
关键字的识别 像FORTRAN这样的语言,关键字不加保 护(只要不引起矛盾,用户可以用它们作为普 通标识符),关键字和用户自定义的标识符或 标号之间没有特殊的界符作间隔。这使得关键 字的识别甚为麻烦。请看下面例子: 1 DO99K=1,10 2 IF(5.EQ.M)I=10 3 DO99K=1.10 4 IF(5)=55 这四个语句都是正确的FORTRAN语句。 语句1和2分别是DO和IF语句,它们都是以某 基本字开头的。语句3和4是赋值语句,它们都 是以用户自定义的标识符开头的。
第三章
词法分析
编译程序首先是在单词级别上来分析和翻译 源程序的。词法分析的任务是:从左至右逐个字 符地对源程序进行扫描,产生一个个单词符号, 把作为字符串的源程序改造成为单词符号串的中 间程序。因此,词法分析是编译的基础。执行词 法分析的程序称为词法分析器。 •3。1 对词法分析器的要求
3.1.1 词法分析器功能和输出形式 输入源程序,输出单词符号。 程序语言的单词符号一般分为五种:关键字, 标识符,常数,运算符,界符
第三章 词法分析
对于2和4来说,必须超前扫描到与IF后的 左括号相对应的那个右括号之后的第一个字符 为止。若此字符是字母,则得逻辑IF。若此字 符为数字,则得算术IF。否则,应认为是用户 自定义标识符IF. 标识符的识别、常数的识别及算符和界符的 识别相类似可以参考课本P40,P41这里就不再 多述。 3。2。3 状态转换图 使用状态转换图是设计词法分析器的一种好 途径。转换图是一张有限方向图。在转换图中, 结点代表状态,用园圈表示。状态之间用箭弧 连结。箭弧上的标记(字符)代表在射出结点 (即箭弧始结点)状态下可能出现的输入字符 或字符类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业评讲
1
77
CH.3.练习题7(P64.)
(3) 正规式 0*10*10*10*
NFA:
0
0
0
0
X ε 1 ε 2 1 3 ε 4 ε 5 1 6 ε 7 ε 8 1 9 ε 10 ε Y
0
001
11
0
21 最小化DFA:
0
0
0 12
2020/4/5
0
0
3
5
1
0
1
4 16
0
1
41
作业评讲
DFA:
依照字典序排列; 正规式 (a|A)*(b|B)*(c|C)*(d|D)*…(z|Z)*
2020/4/5
99
CH.3.练习题9(P64.)
9.问题:没构造出DFA;没过程;方法没掌握。
(1) {0,1}上的含有子串010的所有串; 至少含一个。 正规式 (0|1)*010(0|1)* 或 (0*1*)*010(0*1*)*
{3,2}
{3,4,2}
2 23
{3,4,2} {3,5,2} {3,4,2}
3 43
{3,5,2} {3,2}
{3,Y,4,2}
4 25
{3,Y,4,2} {3,5,2} 2020/4/5
{3,4,2} 作业评讲
终5
4
3 5
5
CH.3.练习题7(P64.) 初始: {0,1,2,3,4}和{5}
解:证明 U|V=V|U
因为 L(U|V)=L(U)∪L(V) =L(V)∪L(U)
=L(V|U)
解:证明 U(VW)=(UV)W
因为 L(U(VW)) =L(U)L(VW)
= L(U)(L(V)L(W))
=(L(U)L(V))L(W)
= L(UV)L(W) = L((UV)W)
2020/4/5
1
0 1 1 12 031 4
I
I0
{0} 初0
0
I1 {1}
0
1 0 11
DFA: 03
{1} {1,2} {1,3}
1 {1} 1 2 {1,3} 3 3 {1} 1
{1,2} 2 {1,2} 2 {1,2,4} 4
1
0 10
2 14
{1,2,4}终4 {1,3} 3 {1,2} 2
2020/4/5
程序设计语言
CH3.词法分析
《程序设计语言编译原理》
陈火旺等编著
2000年第3版
2020题2(P63.)
2. 给出下面C++程序段中的单词符号及其属性值。
int CInt::nMulDiv(int n1,int n2)
{ if (n3 = = 0) return 0;
< ),-> ,
< {, -> ,
2020/4/5
22
CH.3.练习题2(P63.)
续解: < if,-> , < n3, “n3”> , <0, 0> , < return,-> , < ;,-> , < return,-> , < n1, “n1”> , < n2, “n2”> , </, -> , <;,-> ,
左岸---Z;右岸---U;
状态
左:… 右:…
左岸到右岸, 人或人带一件东西 右岸到左岸, 人或人带一件东西
2020/4/5
+ 人,东西
- 人,东西
12 12
CH.3.练习题10(P64.)
(1) 正规式 1(0|1)*101 ∵{0,1,2,3,4}0={2,4}
DFA:
0
2
0
04
{0,1,2,3,4}1={1,3,5} ∴划分为{0,1,2,3}和{4}
0 11
1 0 1 0 ∵{0,1,2,3}0={2,4}
1
13
15
最小化DFA:
0
1
04
∴划分为{0,1,2}和{3}
∵{0,1,2}1={1,3} ∴划分为{0}和{1,2}
NFA:
I
I0
A 初 0 A,B
I1
1A
0
0,1
0,1
A 0 B 1 C0 D
A,B 1 A,B 1 A,C 2
A,C 2 A,B,D 3 A
0
A,B,D 终3 A,B,D 3 A,C,D 4
A,C,D 终4 A,B,D 3 A,D 5
2020/4/5
A,D 终5 A,B,D 3 A,D
作业评讲
5
10 10
else return (n1*n2)/n3; }
问题:没写全;表达不准确
解:< int,->,
< CInt, “CInt”> ,
< ::,-> ,
< nMulDiv, “nMulDiv”> ,
<(,->,
< int,-> ,
< n1, “n1”> , < , , -> ,
< int,-> ,
< n2, “n2”> ,
作业评讲
44
CH.3.练习题7(P64.)
7. 问题:没构造出DFA;没过程;方法没掌握。
(1) 1(0|1)*101
解1: 正规式对应的NFA:
1
X 1 1ε 3 ε 2 1 4 0 5 1 Y
0
I
I0
I1
I
I0 I1
{X}
{1,3,2}
初0
1
{1,3,2} {3,2}
{3,4,2}
1 23
{3,2}
CH.3.练习题9(P64.)
正规式 (0|1)*010(0|1)*
DFA:
4
1
0
01
00 11 20 3
01 1
1
05
最小化DFA:
1
00
2020/4/5
0
11
1
20
0,1
3
11 11
CH.3.练习题10(P64.)
10. 用FA写出渡河的方法。
设:人---R;狼---L;羊---Y;菜---C;
< (,-> , < ==,-> , < ),-> , < 0,0> , < else,-> , < (,-> , < *,-> , < ),-> , < n3, “n3”> , <},-> 。
2020/4/5
33
CH.3.练习题5(P63.)
5. 证明3.3.1中关于正规式的交换律、结合 律等五个关系。
0 11
1
0
1
0
∵{1,2}0={2} {1,2}1={3} 最后划分得5个子集:
13 1 5
{0}, {1,2}, {3}, {4}, {5}
2020/4/5
1
作业评讲
6
CH.3.练习题7(P64.)
7. 构造下列正规式相应的DFA。 (1) 1(0|1)*101 解2: 正规式对应的NFA:
0
07
0
6 88
CH.3.练习题8(P64.)
8. 给出下面的正规表达式。
(1) 以01结尾的二进制数串; 正规式 (0|1)*01 或 (0*1*)*01
(2) 能被5整除的十进制整数; 正规式 :
(0|1|2|3|4|5|6|7|8|9)*(0|5) 或(0*1*2*3*4*5*6*7*8*9*)*(0|5) 或(0|5)|(1|2|3|…|9)(0|1|2|3|…|9)*(0|5) (3) 英文字母组成的所有符号串, 要求符号串中的字母