编译原理之将正则表达式变为有穷自动机

编译原理之将正则表达式变为有穷自动机

从正则表达式变为NFA
  • 首先先看看简单的基本的正则表达式是如何对应的相关的NFA的
    • 字母表中的符号a对应的NFA

编译原理之将正则表达式变为有穷自动机_第1张图片

  • r = r1r2对应的NFA

在这里插入图片描述

  • r = r1|r2对应的NFA

在这里插入图片描述

  • r = (r1)*对应的NFA

编译原理之将正则表达式变为有穷自动机_第2张图片

实例将对应的r=(a|b)*abb转成对应的NFA
  • 将r当作一个正则表达式,直接带入整体
    在这里插入图片描述
  • 将与连接的直接分解成顺序结构

在这里插入图片描述

  • 将克林闭包转成经过自己的循环

在这里插入图片描述

  • 将或运算进行拆解
    在这里插入图片描述

基本思路就是不断地增加新地点,有的可能会用不同地方式进行替代,如采用Thompson法进行替代

  • 用下图代替a|b

编译原理之将正则表达式变为有穷自动机_第3张图片

  • 用下图代替ab
    在这里插入图片描述
  • 用下图代替a*
    在这里插入图片描述
例题

构建((0|1*)|0)*11对应的NFA

编译原理之将正则表达式变为有穷自动机_第4张图片
编译原理之将正则表达式变为有穷自动机_第5张图片
编译原理之将正则表达式变为有穷自动机_第6张图片
编译原理之将正则表达式变为有穷自动机_第7张图片
编译原理之将正则表达式变为有穷自动机_第8张图片
编译原理之将正则表达式变为有穷自动机_第9张图片

你可能感兴趣的:(编译原理)