《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析

解题步骤:

  • NFA 状态转换图
  • 子集法
  • DFA 的状态转换矩阵
  • DFA 的状态转图

解:

已给正规式:(0|1)*01

画出 NFA 状态转换图如下:

子集法的表格:

I状态\字符 I0 I1
{S, A, B} 求法: 表示开始符号,以及开始符号识别 n 个 ε 可以到达的状态集合。如本题中: 开始符号 S,通过识别 ε 可以到达的转态有 A, B,所以集合为 {S, A, B} {A, B, C} 求法: 表示改行最左端的状态集,识别最上端的符号可以到达的状态,以及这些状态识别 n 个 ε 可以到达的状态的集合。如本题中: 有 {S, A, B},逐个判断 S 识别 0 弧没有可以到达的状态;A 识别 0 可以到达 A,B 识别 0 可以到达 C;现在已有 A, C 状态,又因为 A 状态识别 ε 可以到达 B,所以整个集合为 {A, B, C} {A, B} 求法: 同相邻左测表格求法。如本题中: 有 {S, A, B},S 状态识别 1 没有可以到达的状态,A 识别 1 可以到达 A,B 识别 1 没有可以到达的状态。所以此时只有 A。又因为 A 状态识别 ε 可以到达 B,所以整个集合为 {A, B}
{A, B, C} 求法: 这个为什么是 {A, B, C}?因为 相邻右上方表格为 {A, B, C} 为什么用相邻右上方表格的状态集?因为 它是初始态,仅识别 0 和 ε 就能到达的状态集。所以,可以将该状态集视为识别一条弧所到达的状态集。可以看做是下一状态,为起状态别名做准备。 {A, B, C} 注: 有 A 就有 B {A, B, T}
{A, B} {A, B, C} {A, B}
{A, B, T} {A, B, C} {A, B}

对状态中间重命名,求新的状态转换矩阵:

(1)因为 S 是初态,重命名为 S',也是终态

(2)设 {A, B, C} 为 A'

(3)设 {A, B} 为 B'

(4)因为 T 是终态,此时 {A, B, T} 不是相当于 A' 识别 1 弧所到达的状态,T 是终态,{A, B, T} 也是终态,重命名为 T'

I状态\字符 I0 I1
S' A' B'
A' A' T'
B' A' B'
T' A' B'

画出 NFA 状态转换图如下:

验证

(0|1)*01 正规式对应的正规集元素特点是:

  • 以 0 或 1 的任意组合,任意数量为开头
  • 以 01 为结尾

当结尾为终结符时,可认为识别成功

《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析的更多相关文章

  1. 编译原理 | 构造LR(1)自动机的注意事项

    在画图之前,有时候要先对产生式集合进行某些操作. 下图所示的情况,不需要补一条拓广产生式,因为开始符Z没有出现在某条产生式的右侧. 即,如果开始符出现在某条产生式的右部,需要增加拓广产生式.

  2. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

  3. 有穷自动机(NFA、DFA)&正规文法&正规式之间的相互转化构造方法

    在编译原理(第三版清华大学出版社出版)中第三章的词法分析中,3.4.3.5.3.6小节中分别讲解了 1.什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机) 2.如何将  不确定的有穷自动机 ...

  4. 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集

    <编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...

  5. 编译原理-词法分析04-NFA & 代码实现

    编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...

  6. [Vue源码]一起来学Vue模板编译原理(一)-Template生成AST

    本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...

  7. [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串

    本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...

  8. 编译原理根据项目集规范族构造LR(0)分析表

    转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...

  9. 编译原理LR(0)项目集规范族的构造详解

    转载于https://blog.csdn.net/johan_joe_king/article/details/79051993#comments 学编译原理的时候,感觉什么LL(1).LR(0).S ...

随机推荐

  1. weak_ptr用法

    http://note.youdao.com/noteshare?id=39c10fda83320b2851e2073a5f69321c

  2. 从gopath到go mod的一次尝试

    windows下的尝试: gomod初尝试下载官方包1.11(及其以上版本将会自动支持gomod) 默认GO111MODULE=auto(auto是指如果在gopath下不启用mod)go mod h ...

  3. Tensorflow 多层全连接神经网络

    本节涉及: 身份证问题 单层网络的模型 多层全连接神经网络 激活函数 tanh 身份证问题新模型的代码实现 模型的优化 一.身份证问题 身份证号码是18位的数字[此处暂不考虑字母的情况],身份证倒数第 ...

  4. python-https状态码

    HTTP状态码状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误. 状态码的类别 >>>状态码 类别 说明 ...

  5. AS将一个项目导入到另一个项目中

    需求:有项目A,B.需要将B集成到A中,作为A的一个模块. 方法: 1.将B工程的app下面的build.gradle文字中  apply plugin: 'com.android.applicati ...

  6. HDU 1260 Tickets (动态规划)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  7. docker端口映射和容器互相访问

    端口映射 容器运行时如果没有指定端口,与外界是无法通信的,比如当前我们的有一台MySQL的docker container,当前容器正在运行mysql并提供3306端口 # docker ps CON ...

  8. 有关于eclipse启动调试时出现EOFexpetion错误的解决办法

    1.打开调试透视窗 2.找到所有断点 3.清空所有断点后再去打断点,再去调试 网上说法:这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文 ...

  9. Head First PHP&MySQl第一章代码

    HTML: <!doctype html> <html lang="zh-cn"> <head> <meta charset=" ...

  10. python基础之 线程_进程关系

    上图