词法分析
词法分析
回顾
正则表达式(RE)
每个正则表达式$r$定义(表示)一个语言,记为$L(r)$
- 一个正则语言可以对应多个正则文法
正则定义
给一些RE命名,并在之后的RE中像使用字母表中的符号一样使用这些名字
有穷自动机(FA)
- 组成
- 输入带、读头、有穷控制器
- 表示
- 转换图:初始状态、终止状态、有向边
- 转换表
- FA接受的语言–$L(M)$:由一个有穷自动机$M$接受的所有串构成的集合
- 最长字串匹配原则
- 由输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配
- 与正则表达式等价
确定的有穷自动机(DFA)
- $M=(S, \Sigma, \delta, s_0, F)$
- (有穷状态集,输入字母表,转换函数,开始状态,接受状态)
- 容易实现
非确定的有穷自动机(NFA)
- $M=(S, \Sigma, \delta, s_0, F)$
- 直观
带$\varepsilon$的NFA
等价性
正则文法 $\Longleftrightarrow$ 正则表达式 $\Longleftrightarrow$ FA
转换
构造分析器时,真正实现模拟的是DFA,所以需要将正则表达式转换到DFA
(1) 根据RE构造NFA
(2) 从NFA到DFA的转换
- 子集构造法
词法分析阶段的错误处理
- 错误类型
- 单词拼写错误、非法字符
错误检测
如果当前状态与当前输入符号在转换表对应项中的信息为空,而当前状态又不是终止状态,则调用错误处理程序
错误处理
查找已扫描字符串中最后一个对应于某终态的字符
- 如果找到,将该字符与前面的字符识别成一个单词,然后将输入指针退回到该字符,扫描器重新回到初始状态,继续识别下一个单词
- 如果没找到,则确定出错,采用错误恢复策略
错误恢复策略
- “恐慌模式”
- 从剩余的输入中不断删除字符,知道词法分析器能够在剩余输入的开头发现一个正确的字符为止
This post is licensed under CC BY 4.0 by the author.