构造词法分析器(从正规式到词法分析器)的一般方法和步骤:
- 设计正规式:
用正规式描述模式; - 构造一个NFA:
为每个正规式构造一个NFA,它识别正规式所表示的正规集; - 确定化:
将构造的NFA转换成等价的DFA - 最小化:
优化DFA,使其状态数最少 - 从优化后的DFA构造词法分析器。
一、构造一个NFA(Thompson 算法)
将正规式分解成小部分,再组合
例2.11 用Thompson算法构造正规式
r=(a|b)*abb的NFA N(r)
二、确定化(从NFA到DFA)
1.概念
- 状态全体:即状态的集合
- smove(S, a):从状态集S出发,标记为a的下一状态全体(即状态集)。与move(s, a)的唯一区别:用状态集取代状态
- ε-闭包(T):从状态T出发,不经任何字符达到的状态全体。
要满足:
(1) T中所有状态属于ε-闭包(T);
(2) 任何smove(ε-闭包(T),ε)属于ε-闭包(T);
(3) 再无其他状态属于ε-闭包(T)。
ε-闭包(T)的示例:
根据定义,ε-闭包({s2})应包括:
s2自身 {s2} (1)
s4 {s2, s4} (2)
s5 {s2, s4, s5}(3)