编译原理词法分析(二)

正规式与正规集

正规式与正规集的关系:

  • 正规集可以用正规式表示
  • 正规式是表示正规集一种方法
  • 一个字集合是正规集当且仅当它能用正规式表示

什么是正规式与正规集:

  • 对给定的字母表Σ
    • ε和Ø都是Σ上的正规式,它们所表示的正规集为{ε}和Ø;
    • 任何a∈Σ , a是Σ上的正规式,它所表示的正规集为{a};
    • 假定e1和e2都是Σ上的正规式,它们所表示的正规集为L(e1)和L(e2) ,则
      • (e1|e2)为正规式 ,它所表示的正规集为L(e1)UL(e2)
      • (e1.e2)为正规式 ,它所表示的正规集为L(e1)L(e2)
      • (e1)* 为正规式,它所表示的正规集为(L(e1))*

仅由有限次使用上述三步骤而定义的表达式才是Σ上的正规式,仅由这些正规式表示的字集才是Σ上的正规集。

正规式的等价性

若两个正规式所表示的正规集相同,则称这两个正规式等价。如:
b(ab)* =(ba)*b

b(ab)* =L(b(ab)*)== L(b)L((ab)*)=L(b) (L(a)L(b))*={b} {ab}*= {b} {ε, ab, abab, ababab, …}= {b, bab, babab, bababab, …}

(ba)*b=L( (ba)b)= (L(ba))*L(b)== (L(b)L(a))* L(b)= {ba} {b}= {ε, ba, baba, bababa, …} {b}= {b, bab, babab, bababab, …}

正规式的性质

对正规式,下列等价成立

  • e1|e2= e2|e1 交换律
  • e1 |(e2|e3) = (e1|e2)|e3 结合律
  • e1(e2e3) = (e1e2)e3 结合律
  • e1(e2|e3) = e1e2le1e3 分配律
  • (e2|e3)e1= e2e1|e3e1 分配律
  • eε=εe=e
  • e1e2 <> e2e1

确定有限自动机(DFA)

确定有限自动机是对状态图进行形式化定义
确定有限自动机(Deterministic Finite Automata DFA) M是一个五元式M=(S, Σ,f, S0,F),其中:

  • S:有穷状态集,就是状态图的各个状态结点
  • Σ :输入字母表(有穷),就是所有出现在状态转移弧上的字母
  • f: 状态转换函数,为SxZ- >S的单值部分映射, f(s,a)=S’表示:当现行状态为S ,输入字符为a时,将状态转换到下一-状态s’ , s’称为S的一个后继状态
  • S0∈S是唯一 的一个初态
  • F⊆S :终态集(可空)

例子:
DFA M=({0,1,2,3},{a,b},f,0,{3}),其中f定义如下:
f(0 , a)=1 f(0 , b)=2
f(1 , a)=3 f(1 , b)=2
f(2 , a)=1 f(2 , b)=3
f(3 , a)=3 f(3 , b)=3
将f转化为状态转化矩阵:

a b
0 1 2
1 3 2
2 1 3
3 3 3

根据状态转化矩阵画出状态图:
编译原理词法分析(二)_第1张图片

  • 对于Σ*中的任何字a ,若存在一条从初态到某一终态的道路,且这条路上所有弧上的标记符连接成的字等于a ,则称a为DFA M所识别(接收)
  • DFA M所识别的字的全体记为L(M)

非确定有限自动机(NFA)

非确定有限自动机也是对状态图进行形式化定义
非确定有限自动机((Nondeterministic Finite Automata , NFA)) M是一个五元式M=(S, Σ,f, S0,F),其中:

  • S:有穷状态集,就是状态图的各个状态结点
  • Σ :输入字母表(有穷),就是所有出现在状态转移弧上的字母
  • f: 状态转换函数,为SxZ- >2S的部分映射, f(s,a)=S’表示:当现行状态为S ,输入字符为a时,将状态转换到下一状态集合s’ , s’称为S的一个后继状态集合
  • S0⊆S是非空的初态集
  • F⊆S :终态集(可空)

非确定有限自动机(NFA)与确定有限自动机(DFA)有三点不同:

  • NFA可以有多个初态
  • 弧上的标记可以是Σ*中的一个字(甚至可以是一一个正规式) ,而不一定是单个字符
  • 同一个字可能出现在同状态射出的多条弧上

我们可以说DFA是NFA的特例。

你可能感兴趣的:(编译原理词法分析(二))