一、正则表达式(RE)
语言
正则表达:
正则表达式可以由较小的正则表达式递归构建。每个正则表达式r定一个语言记作L(r)。
正则表达式优先级为:克林闭包>连接>或。
二、正则定义
简单来说就是重定义。
例如:
letter -> 字母
number -> 数
\d -> 整数
三、有穷自动机(FA)
系统根据当前状态与当前的输入信息决定后继行为。
每当处理完当前输入后,状态也发生改变。
1. FA的表示
![](https://img.haomeiwen.com/i6532223/7a5bb5356376ed10.png)
2. FA定义的语言
如果给定输入串x,如果存在对于该串从初始状态到某个终止状态的转换序列,则该串被该FA接收。
例:对于FA
![](https://img.haomeiwen.com/i6532223/3144118b7e21c821.png)
abbaabb
是被接收的,而abbaaba
则不被接收。
-
由一个有穷自动机M接收的所有串构成的集合被称为该FA定义的语言,记作L(M)。
-
最长匹配:输入有多个前缀匹配时,会选择最长的前缀进行匹配。
四、有穷自动机的分类
- 确定的FA(DFA)
- 非确定的FA(NFA)
重点:转换表;
一个有穷自动机可以由转换表表示。
1. DFA
![](https://img.haomeiwen.com/i6532223/78dae49d0274d888.png)
![](https://img.haomeiwen.com/i6532223/25188a928dd2cbb5.png)
2. NFA
![](https://img.haomeiwen.com/i6532223/a43a63248214a9cf.png)
![](https://img.haomeiwen.com/i6532223/e4a012f0dc835386.png)
3. DFA与NFA的等价性
- 对于任何NFA,存在识别同一语言的DFA
- 对于任何DFA,存在识别同一语言的NFA
例:
![](https://img.haomeiwen.com/i6532223/644034dc648c158b.png)
以上两种自动机都可以用正则表达式来表示。
事实上,正则表达式与有穷自动机是等价的。
4. 含有空边的NFA
![](https://img.haomeiwen.com/i6532223/9c67642fdc2db597.png)
5. DFA的算法实现
从人的角度看,NFA比DFA更加直观;但对于程序来说,DFA比NFA容易实现。
五、从正则表达式RE到有穷自动机FA
直接从RE转换到DFA是比较困难的,所以一般通过NFA作为中介。
![](https://img.haomeiwen.com/i6532223/66c85d4ae7564d05.png)
1. 从RE到NFA
![](https://img.haomeiwen.com/i6532223/6153437304e8b8d5.png)
2. 从NFA到DFA
DFA中的每个状态都是NFA中状态集合的一个子集。
![](https://img.haomeiwen.com/i6532223/c01e9ea196f9ea41.png)
即,先写出NFA的转换表,再通过新的状态构建出DFA。
2.1 从带有空边的NFA转换为DFA
例:
![](https://img.haomeiwen.com/i6532223/f3c3f195cb8c7717.png)
3. 子集构造法
![](https://img.haomeiwen.com/i6532223/d82ee1e8a873d7c5.png)
六、识别单词的DFA
1. 标识符
记数字为,字母为
,那么标识符的正则表达式为:
这个正则表达式转换为NFA,表示如下:
![](https://img.haomeiwen.com/i6532223/ca8190eaef1f4795.png)
这个NFA同时也是一个DFA,所以不用再进行转换。
2. 无符号数
记:
数字
数字串
小数部分
指数部分
数
即一个数由一个数字串+可选的小数部分+可选的指数部分构成。
转换为NFA,表示如下:
![](https://img.haomeiwen.com/i6532223/4d7146cd77982ee9.png)
通过子集构造法,将NFA转换为DFA:
![](https://img.haomeiwen.com/i6532223/2362de24256e6078.png)
3. 识别各进制无符号整数的DFA
可以表示10进制、8进制、16进制的DFA:
![](https://img.haomeiwen.com/i6532223/17605f801796cab9.png)
4. 识别注释的DFA
![](https://img.haomeiwen.com/i6532223/2d48e87d8b81fa15.png)
5. 词法分析阶段的错误处理
- 单词拼写错误
- 非法字符
- 错误恢复
网友评论