词法分析总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a
{0}
a
a
{0, 2}
{0, 1}
开始
0 b
a
1
b
2
b
b 未画完
子集构造法
子集构造法
• ε-closure(s) 从NFA的状态S出发,只用ε转换就能 到达的状态的集合 • ε-closure(T) 从NFA的状态集合T中每个状态出发, 只用ε转换就能到达的状态的集合 • Move(T,a) 状态集合T中每个状态通过a能到达的 所有状态集合
0
b
a
1DFA)
• 一个符号标记离开同一状态只有一条边 • 1、有限的状态集合S • 2、输入字母集合 • 3、转换函数move : S S,且可以是部分函 数 • 4、唯一的开始状态 s0 b b • 5、接受状态集合F S 识别语言 (a|b)*ab 的DFA
• 字母表:符号的有限集合, 例: Σ= { 0, 1} • 串:符号的有穷序列,例:0110, ε • 语言:字母表上的一个串集
• {ε, 0, 00, 000, …}, {ε},
• 句子:属于语言的串 • 串的运算
• 连接(积) xy, s ε = ε s = s • 幂 s0为ε ,si为si-1s(i > 0)
DFA的化简
• 构造最简DFA:
• 构造状态集合的初始划分π:两个子集——接受状态 子集F和非接受状态子集S – F • 应用下面的过程构造πnew
• 如果πnew = π,则πfinal = π;否则令π = πnew ,转上步 • 在πfinal的每个状态子集中选一个状态代表它,即为最 简DFA的状态
正则表示->NFA
开始
i
f
开始
i
a
f
识别正则式的NFA
识别正则式a的NFA
正则表示->NFA
N (s) N (t) f
开始 i
识别正则式s | t 的NFA
正则表示->NFA
开始
i
N (s)
N (t)
f
识别正则式 st 的NFA
正则表示->NFA
开始 N (s )
• For π 中的每个子集G ,do begin • 把G划分为若干子集,G的两个状态 s 和 t 在同一子集中,当 且仅当对任意输入符号 a ,s 和 t 的 a 转换都到 π 的同一子集 中 • 在πnew 中,用G的划分代替G • End
DFA的化简
• 把G划分为若干子集,G的两个状态 s 和 t 在同一 子集中,当且仅当对任意输入符号 a ,s 和 t 的 a 转换都到同一子集中
i
f
识别正则式 s* 的NFA
作业
• 1. 构造下列正则式的NFA,给出他们处理输入串 ababbab的状态转换序列
• (a|b)* • (a*|b*)* • ((ε|a)b*)*
• 2. 将上述NFA转换为DFA,并给出处理串的状态 转换序列 • 3. 可以从正则式的最简DFA同构来证明两个正则 式等价。证明(a|b)* 、(a*|b*)* 和((ε |a)b*)*等价。
有限自动机
不确定的有限自动机(简称NFA)
一个符号标记离开同一状态有多条边 一个数学模型,它包括: 1、有限的状态集合S 2、输入符号集合 3、转换函数move : S ( {} ) P(S) 4、状态s0是唯一的开始状态 a 5、F S是接受状态集合 识别语言 (a|b)*ab 的NFA 开始
代码 . \w 说明 匹配除换行符以外的任意字符 匹配字母或数字或下划线或汉字
\s
\d \b ^ $ * + ? {n} {n,} {n,m}
匹配任意的空白符
匹配数字 匹配单词的开始或结束 匹配字符串的开始 匹配字符串的结束 重复零次或更多次 重复一次或更多次 重复零次或一次 重复n次 重复n次或更多次 重复n到m次
子集构造法
• 找出U=ε-closure(T)
• 对于U,以及任意符号a,找出U通过a能到达的集合 V=Move(U,a) ,并计算V'=ε-closure(V) • U通过a到达的状态即为V',U- a -> V'
a 开始 0 2 3 1 b 4 5 6 7 a 8 b 9
开始 0 a
b
1 a a 2
从正则式到有限自动机
从正则式建立识别器的步骤
• 从正则式构造NFA • 把NFA变成DFA (子集构造法) • 将DFA化简 (合并不可区别状态)
NFA->DFA: 子集构造法
• DFA的一个状态是NFA的一个状态集合 • 读了输入a1 a2 … an后,
• NFA能到达的所有状态:s1, s2, …, sk,则 • DFA到达状态{s1, s2, …, sk}
词法分析总结
词法分析在编译器中的位置
记号(token)
源程序 词法分析器 取下一个记号 语法分析器
符号表
本章主要内容
• 词法分析器
• 把构成源程序的字符流翻译成记号流,还完成和用户 接口的一些任务
• 围绕词法分析器的自动生成展开 • 介绍正则式、状态转换图和有限自动机概念
串,语言,正则表达式
串和语言
语言的运算
• 并: • 连接: • 幂: • 闭包: • 正闭包: L M = {s | s L 或 s M } LM = {st | s L 且 t M} L0是{},Li是Li-1L L = L0 L1 L2 … L+ = L1 L2 …
正则表达式-元字符