编译原理之有限自动机解析

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

2.2 词法记号的描述与识别
无符号数的转换图
num digit+ (.digit+)? (E (+ | )? digit+)?
E
digit
digit
digit digit
开始
12
digit
13
.
digit
14
15
E
+/ digit
16
17
18
other
other
other
*
19
return( install_num( ) )
2.2 词法记号的描述与识别
标识符和保留字的转换图
id letter (letter | digit )* letter或digit
开始
9
letter
10
other
*
11 return(install_id( ))
1、检查保留字表,如果在表中发现该词法单元则返回 相应的记号并退出,否则转向2 2、该词法单元是标识符,在符号表中查找,若找到该 词法单元则返回该条目的指针并退出,否则执行3 3、在符号表中建立一个新的条目,把该词法单元填入, 并返回此新条目的指针
• 唯一的初态 s S;
• 终态集合F S;
b
优点:1、输入字 符不包括
2、一个状态对于 某个字符,只可能 存在唯一条输出边
b
识别语言
(a|b)*ab 的DFA
开始
a
0
b
1
2
a a
2.3 有 限 自 动 机
2.3.3 NFA到DFA的变换
子集构造法 DFA的一个状态是NFA的一个状态集合 读了输入a1 a2 … an后,
状态
A B
输入符号 ab B
a
2
3
开始
0
1
a
b
6
7
8
9
b
4
5
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8} C = {1, 2, 4, 5, 6, 7}
状态
A B
输入符号 ab BC
a
2
3
开始
0
1
a
b
6
7
8
9
b
4
5
2.3 有 限 自 动 机
识别器:是一个程序,取串x作为输入,当 x是语言的句子时,它回答“是”,否则回 答“不是”。 状态转换图(有限自动机)识别器 确定/不确定有限自动机——时空权衡问题
确定有限自动机:快,空间大
2.3 有 限 自 动 机
2.3.1 不确定的有限自动机(简称NFA)
一个数学模型,它包括: 状态集合S;
缺点:1、输入字 符包括
• 关系算符的转换图
=
2 return(relop, LE)
1
>
3 return(relop, NE)
<
开始 0
=
other
* return(relop, LT) 4
5 return(relop, EQ)
>
=
7 return(relop, GE)
6
other 8 * return(relop, GT)
温故知新
源程序 字符流
集 字母合
顺 序 词法 模 组 单元 式 合
词法 记号
状态 转换 图
非形式 形式化
化描述 描述 名

?
正规式
字母表

计算机 实现
LUM
组 合

集 合
连接 指数
语言
连接 LM 闭包 L* 正闭包 L+
词法记号的识别
词法记号的识别
等同于对字符串的匹配过程
这个匹配过程可以基于有限状态机来完成
输入符号 ab BC BD
a
2
3
开始
b
4
5
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8}
状态 A
输入符号 ab B
a
2
3
开始
0
1
a
b
6
7
8
9
b
4
5
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8}
NFA能到达的所有状态:s1, s2, …, sk,则 DFA到达状态{s1, s2, …, sk}
2.3 有 限 自 动 机
输入符号
状态 a
b
a
Βιβλιοθήκη Baidu2
3
开始
0
1
a
b
6
7
8
9
b
4
5
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7}
状态 A
输入符号 ab
a
2
3
开始
0
1
a
b
6
7
8
9
2.2 词法记号的描述与识别
空白的转换图
delim blank | tab | newline ws delim+
开始
delim
delim
other
*
20
21
22
2.3 有 限 自 动 机
? 正规式
状态转换图
有限自动机
计算机 实现
等价
不确定有 限自动机
确定有限 自动机
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8} C = {1, 2, 4, 5, 6, 7}
状态
A B C
输入符号 ab BC
a
2
3
开始
0
1
a
b
6
7
8
9
b
4
5
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8} C = {1, 2, 4, 5, 6, 7}
状态
A B C
输入符号 ab BC B
a
2
3
开始
0
1
a
b
6
7
8
9
b
4
5
2.3 有 限 自 动 机
A = {0, 1, 2, 4, 7} B = {1, 2, 3, 4, 6, 7, 8} C = {1, 2, 4, 5, 6, 7} D = {1, 2, 4, 5, 6, 7, 9}
状态
A B C
a
b
0
{0, 1}
{0}
1
{2}
2
识别语言
(a|b)*ab 的NFA
a
开始
a
0
1b
2
b
2.3 有 限 自 动 机
例 识别aa*|bb*的NFA
a
a
1
2
开始
0
b
b
3
4
2.3 有 限 自 动 机
2.3.2 确定的有限自动机(简称DFA)
一个数学模型,包括:
• 状态集合S;
• 输入字母表;
• 转换函数move : S S;
输入符号集合;
2、一个状态对于 某个字符,可能有
转换函数move : S ({}) P(S); 多条输出边
状态s0是开始状态;
F S是接受状态集合。
a
识别语言 (a|b)*ab
开始 0
a
1b
2
的NFA
b
2.3
• NFA的转换表
状态
有限自动机 优点:快速定位 缺点:字母表过大 或大部分转换状态 为空集时浪费空间 输入符号
简单的正则式d->a
a
0
1
正则式d->ab
a
b
0
1
2
正则式d->a|b
a
0
1
b
正规式d->a*
a 0
自动机的定义
正规式d->a?
字符a出现一次或者0次
a
0
1
练习
正规式d->a(a|b)*
请画出它的状态转换图
a
a
0
1
b
2.2 词法记号的描述与识别
2.2.4 转换图 relop < | < = | = | < > | > | > =
相关文档
最新文档