第3章编译原理答案(主编张晶)

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

others *
1/
2*
3* 4/ others
5
others others
all
6 all
others *
1/
2*
3* 4/ others
5
状态1:注释开始状态。 状态2:进入注释体前的中间状态。 状态3:表明目前正在注释体中的状态。 状态4:离开注释前的中间状态。 状态5:注释结束状态,即接受状态。
(1)分析和识别单词及属性, 包括识别语言的关键字、标识符、常数、运算符等;
(2)跳过各种分隔符,如空格,回车,制表符等; (3)删除注释; (4)进行词法检查,报告所发现的错误; (5)建立符号表。
main( )/*ADD*/ {int x=10,y=20,sum; sum=x+y; }
词法分析
正则表达式也是描述单词的重要工具。
【例2】设Σ={a,b}
正规式 ba* a(a|b)* (a|b)*abb (a|b)*(aa|bb) (a|b)* (aa|ab|ba|bb) * (a|b)(a|b)(a|b) *
正规集 所有以b为首后跟任意多个a的符号串 所有以a为首的符号串 所有以abb为尾的a,b符号串 所有含有两个相继的a或相继的b的符号串 空串和任何长度为偶数的符号串 任何长度大于等于2的符号串
转换
正规文法
main、(、)、{、int、 x、=、10、,、y、=、 20、,、sum、;、sum、 =、x、+、y、;、}
词法分析程序的设计与实现?
词法规则
状态图
词法分析程序
为识别单词而专门设计的有向图, 是设计词法分析程序的一种好途径。
(1)根据词法规则写出正规文法; (2)将正规文法转换成状态图; (3)将状态图转换成流程图。
a
S0 a S1
ab
a
S0
S1
b S2
a
a|b
S0
S1
b
√ a* √ (ab)*
(ab)* b
a
S0 ε S1 ε S2
ε
S0 a S1 b S2
a b
S0 a S1 b S2 b S3
a
例:为R=(a|b)* abb构造NFA,使得L(N)=L(R)
S (a|b) * A abb Z它能接受bababab与 abababb吗?
3.2 正规集、正规文法和正规式
3.2.1 正规式与正规集
正规式:单词符号的一种表示方法,它的集合叫正规集。 正则运算符: (闭包,连接,并)
| -----或(选择)
• ----连接(可以省略 )
* ---闭包 () ----括号
▪ 3.1 有穷自动机
1.状态图 (补充)
定义在∑上的有向图,满足以下条件
a.至少存在一个初始结点 b.存在一些终止结点(也可为空) c.每条边上标有∑上的符号(也可为ε)
一张状态图包含有穷个 状态,至少有一个初态,
S
至少要有一个终态(用
0
双圈表示)
V
1 U
1
0
0
Z 1
例3-1:
ba
S0
b
S1
bb
其中: (S,a)=A, (S,b)=B (A,a)=Z, (A,b)=B (B,a)=A, (B,b)=Z (Z,a)=Z
②状态转移函数 可用一矩阵来表示
输入 字符
状态
a
b
SA
B
AZ
B
BA
Z
ZZ
Φ
例3-1文法G[Z]:
Z→Za|Aa|Bb A→Ba|a B→Ab|b
a
A
Sb a
b
B
a
Za
3.4 正规式与NFA
正规式和有穷自动机在语言上是等价的
(1)对NFA M构造一个广义的状态图,其中只有一个初态S和终态Z,连 接S和Z的有向弧标记为正规式。
(2)对正规式依次进行分解,分解的过程是一个不断加入结点和弧的过程, 直到转换图上的所有弧标记上都是字母表Σ上的元素或为止。
ε
S0 ε S1
a
正则文法:
Z→Cb C→b|Bb B→Ab A→a|Ba
?正规文法构造正规式
例3:G=({A},{α,β},A,P)
P:A→ αA| β
S0
S1
答:
L(G[A])={β, α β, α α β,…}={ β | n≥n0}
用正则表达式 * β 正则集 L( *β)={β, α β, α α β,…}
▪ 练习: 1.设Σ={0,1},写出描述下列语言的正规式。 (1)以01结尾的所有串 (2)只包含一个0的所有串 (3)包含偶数个1且不含0的所有串 ▪ 2.设Σ={x,y},描述正规式所定义的语言。 (1) x(x|y)*x (2) (x|y)* (xx|yy) (x|y)*
性质:设r,s,t均是正规式 (1)交换律: r|s= s|r (2)结合律: r|(s|t)=(r|s)|t (rs)t=r(st) (3)分配律: (r|s)t=rt|st (4)同一律: εr= rε= r
1
S
babbabb
B
2
B
abbabb
A,B
3
A
bbabb
B
4
B
babb
Z
5
Z
abb
A,Z
6
A
bb
B
7
B
b
Z
8
.
选择状态 B A B Z A B Z
由此可见,在NFA中由于某些状态的转换需从 若干个可能的后继状态中进行选择,这种不确定 性给识别过程带来反复,影响了工作效率。
3.1.4 NFA到DFA的等价转换
非确定的有穷自动机与确定的有穷自动机从功能上来说是 等价的,也就是说,我们能够从:
构造成一个
NFA M
DFA M
使得 L(M)=L(N)
DFA是NFA的特例。有一种算法,将NFA转换成接受同样语 言的DFA.
例3-2: M = (Q,Σ, ,Ѕ,Z)
b
a
S0
b
S1
bb
S2
从NFA的矩阵表示中可以 看出,表项通常是一状态 的集合,而在DFA的矩阵 表示中,表项是一个状态。
NFA到相应的DFA的构造 的基本思路是: DFA的每 一个状态对应NFA的一组 状态.
NFA到DFA的转换算法(重点)
1. 将NFA的初始状态集S出发,作为DFA的初态
S'=[S1 ,S 2 ,…,Sk ]
2. 从S'出发,把遇到输入符号a所转移到的后继状 态集作为DFA的新状态
3. 如此重复,直到不再有新的状态出现为止。 4. 在DFA中,含有NFA终止状态的状态均为DFA
例1: Σ={a,b}
正则表达式:ε,Φ, a , b , a | b,ab, a*
a(ab)* , (ab)* ,…
正则集:
L(ε)={ε}, L(Φ)= Φ, L(a)={a} L(a |b)={a,b}, L(a b)={ab}
L( a*)={ε,a,aa,aaa, …}
L( (ab)* )={ε,aa,ab,aab, …} L( a(ab)*)={a,aab,aabab, …}
Σ:有穷字母表,它的每个元素称为一个输入符号 Q:有穷集,它的每个元素称为一个状态 S∈K,是唯一的初态 Z K是一个终态集,终态也称可接受状态或结束状态 δ是转换函数,是Q×Σ→Q上的单值映射:
δ (q1,a)=q2
例3-1状态转换图 ①构造DFA如下:
M=({S,Z,A,B},{a,b}, ,S,{Z})
运算符的优先级:先*, 后 • , 最后 |
例: a* , (01|10)
▪ 字母表, 定义在 上的正规式和正规集递归定义如下: 1. 和都是 上的正规式, 它们所表示的正规集分别为:{}和; 2. 任何a , a是 上的正规式,它所表示的正规集为:{a}; 3. 假定U和V 上的正规式, 它们所表示的正规集分别记为L(e1) 和L(e2), 那么e1|e2, e1•e2和e1*也都是 上的正规式, 它们所表 示的正规集分别为L(e1) L(e2)、 L(e1) • L(e2)和(L(e1))* 4. 任何 上的正规式和正规集均由1、2和3产生。
3.1.2 不确定的有穷自动机(NFA) M=(Σ, Q, δ, S, Z)
δ是一个多值函数,是从Q×Σ*到Q的子集的映射: δ :Q×Σ→2Q
其中2Q是Q的幂集,即Q中所有子集组成的集合。
有穷自动机的不确定性表现在在某个状态下,对于某个输入 字符存在多个后继状态,即状态的转向是不确定的
例3-6 : M = (Κ,Σ, ,Ѕ,F)
的终止状态 。
例3-2 AN =(Q,Σ, ,Ѕ,Z)
其中 S={ S 0 ,S1 } Q={ S 0 ,S1 , S 2 }
Σ={a, b} Z={S 2 }
b
a
S0
b
S1
bb
S2
(1)转换: ① S =[ S 0, S1 ]
(2) 重命名
1 以原NFA初始 状态集为源点,
写入列中。
2 分别横向计算转换状态, 新衍生出的状态依次写 入表的列中。
3 直到计算到蓝色框中所 有状态均在表列中出现 为止。
(3) 状态图
b
B,
b
S,
a
a
A
a
b
b
C
D
b
练习1:有NFA A=({q0,q1,q2},{a,b},M,{q0},{q1})
▪ M=(q0,a)={q1,q2} ▪ M=(q1,a)={q1,q0}
M=(q2,a)={q0,q2}
M=(q0,b)={q0} M=(q1,b)=Φ
状态------文法的非终 结符
③对于形如Q→q的规则,
S
q
Q
终止状态-----文法开 始符号
对于形如Q→Rq的规则,
Rq
Q 边------转换关系------
④以文法开始符号为终止状态
终结符号
例3-2: 文法G[Z]: Z→Za|Aa|Bb A→Ba|a B→Ab|b
a
A
Sb a
b
B
a
Za
b
例3-3
b
若存在一条初始状态到某一终止状态的路径,且这条路径 上所有弧的标记符号连接成符号串α,则称α为DFA M(接 受)识别。
DFA M所能接受的符号串的全体记为L(M)
例3-4 DFA的状态图表示:
a1 a
0b
a
3 a,b
b2 b
符号串abaab?和 abab?能被此DFA 识别吗?
例3-5 画出能够识别C语言注释/* */的DFA
S2
∑={a,b}
结点代表状态,用圆圈表示。 有向弧表示状态转移 弧上的标记表示在射出弧的结点状态下可能出现的输入字 符
识别的符号串:从某一初始结点到某一终止结点的序列。 L(TG)={ab,bab,babbb,abbb,……}
2. 正规文法(左线性文法)转换状态图(重点):教材3.3
①构造S 做初始状态 ②以每个非终结符号做其它状态
教学内容
3.1 有穷自动机 3.2 正规式正规文法和正规集 3.3 正规文法与有穷自动机 3.4 正规式与DFA 3.5 DFA的化简
3.6 3.7 3.8 词法分析器的构造
S.P
词法分析程序

语法分析程序


语义分析及生成中间代码程序


代码优化程序
错 误 处 理
代码生成程序 O.P
课程导入:词法分析的任务
已知文法G[Z]: Z→U1|V1 U→Z0|1 V→Z0|0 ▪ (1)画出状态图(5分) ▪ (2)是NFA吗?为什么?(3分)
0型文法(图灵机)
1型文法(不确定的 界限自动机)
2型文法(不确定的 下推自动机)
3型文法(有限 自动机)
✓ 有穷自动机是一种数学模型,具有离散的输入与输出, 它能准确地识别正规集,即识别正规文法所定义的语言 和正规式所表示的集合
✓ 引入有穷自动机这个理论,正是为词法分析程序的自动 构造寻找特殊的方法和工具
有穷自动机分为两类: 确定的有穷自动机(DFA) (Deterministic Finite Automata) 不确定的有穷自动机(NFA) (Nondeterministic Finite Automata)
3.1.1 确定的有穷自动机(DFA) M=(Q, Σ, δ, S, Z)
不确定性表现在在某 个状态下,对于某个 输入字符存在多个后 继状态
b
a
S0
b
S1
bb
S2
例3-2 由正则文法构造NFA
G[Z]: Z → Za|Aa|Bb A → Ba|Za|a B → Ab|Ba|b
aA a
a
S
ab
Za
b Bb
a
识别符号串babbabb的过程:
步骤 当前状态 输入串余留部分 可能的后继状态
A bb Z
a S a A b B b Z
b
练习题:
1. 给出下列在字母表{0,1}上的DFA (A)所有以00结束的符号串集合
(B)所有具有三个0的符号串集合
?正规集构造正规文法:
正则语言 → 状态转换图 → 正则文法
例2 正则语言{ (ab)n b2|n≥0 }
b
SaA b B b C b Z
第3章 词法分析
教学目标
1. 本章介绍编译第一个阶段词法分析的设计原理和设 计方法,要求明确此阶段的任务。
2. 理解通常的单词分类和构词规则。 3. 会使用单词的描述和识别机制。 4. 要求掌握正规文法、状态图、DFA、NFA、正规式
和正规集的基本概念和它们之间的关系。 5. 掌握词法分析程序的手工实现方法。
相关文档
最新文档