- 3
- 0
- 约9.75千字
- 约 38页
- 2018-10-19 发布于山东
- 举报
主要内容
扫描处理
正则表达式
有穷自动机
从正则表达式到DFA
TINY扫描程序的实现
利用Lex 自动生成扫描程序
• 有穷自动机 (有穷状态的机器)是描述(或“机
器” )特定类型算法的数学方法。有穷自动机可描
述在输入串中识别模式的过程,用作构造扫描程
序。有穷自动机与正则表达式有着很密切的关
系。
例: identifier = letter ( letter | d i g i t) *
代表以一个字母开头且其后为任意字母或数字
序列的串。识别该串的过程可表示为图2 – 1,标
明数字1和2 的圆圈表示的是状态 (state ),表示
记录已被发现的模式的数量在识别过程中的位
置。
• 带有箭头的线代表记录由一个状态向另一个状态
的转换(transition ),依赖于所标字符的匹配。
状态1是初始状态(start state )或识别过程开始
的状态。初始状态表示为一个“不来自任何地方”
且指向它的未作标识的箭头线。状态2代表单个字
母被匹配的点(表示为从状态1到状态2 的转换且
其上标有letter )。在状态2 中,任何数量的字母
或数字的匹配又回到状态2 。代表识别过程结束的
状态称作接受状态(accepting state ),在图中它
表示为在状态的边界画出双线,可能不止一个。
状态2就是一个接受状态,表示在看到一个字母之
后,随后的任何字母和数字序列(也包括根本没
有)都表示一个正规的标识符。
将真实字符串识别为标识符的过程可通过列出在
识别过程中所用到的状态和转换的序列来表示。
例如,将x t e m p识别为标识符的过程。
• 2.3.1 确定性有穷自动机的定义
• 确定性(deterministic )有穷自动机即下一个状态
由当前状态和当前输入字符唯一给出的自动机。
• 定义:DFA (确定性有穷自动机)M 由字母表、
状态集合S 、转换函数T:S ×→S 、初始状态
s ∈S 以及接受状态的集合A S 组成。由M接受的
0
且写作L(M) 被定义为字符c1c2 . . . cn 串的集合,其
中每个c ∈,存在状态s = T (s , c ), s = T (s ,
i 1 0 1 2 1
c ), . . . , s = T(s , c ) ,其中s (一个接受状态)
2 n n-1 n n
是A 的一个元素。
注意:S ×指的是S和的笛卡尔积或叉积:集合
对(s, c ),其中s ∈S且c ∈。如果有一个标为c的
由状态s到状态s‘ 的转换,则转换记录为T (s, c) =
s 。与M相应的示图如下:
• 当状态序列s = T (s ,c ), s = T (s ,c ), . . . , s = T
1 0 1 2 1 2 n
(s ,c )存在,且s 是一个接受状态时,表示为:
n-1 n n
• 两图一样?
• DFA定义和标识符示例图示之间的区别:
1:标识符图中的状态使用数字,而定义并未用数
字对状态集合作出限制。实际可为状态使用任何
标识系统包括名字。初始状态为start,接受状态
为in_id (发现了一个字母并识别其后的任何字母
和数字后面的标识符)。状态集合变成了
{start ,in_id},而不是{1 , 2} 。
2 :转换不是用字符标出而是表示为字符集合的名
字。例如名字letter表示根据正则定义的字母表中
的任意字母。
3 :定义将转换表示为一个函数T:S ×→S 。这
意味着T (s,c )必须使
原创力文档

文档评论(0)