假定一个输入符号(symbol),可以得到2个或者2个以上的可能状态,那么这个finite automaton就是不确定的,反之就是确定的。例如:

  这就是一个不确定的无限自动机,在symbol a输入的时候,无法确定状态应该转向0,还是1

  不论是确定的finite automaton还是非确定的finite automaton,它们都可以精确的描述正规集(regular sets)

  我们可以很方便的把正规表达式(regular expressions)转换成为不确定 finite automaton

  2. NFA(Nondeterministic Finite Automaton)

  非确定的无限自动机,我们用NFA这个术语表示,它是一个数学模型(model):

  1.       一个关于状态的集合S

  2.       一个关于输入符号(input symbols)的集合Σ

  3.       函数 move : (状态, 符号) -> P(S)

  4.       一个开始状态s0,是一个唯一的状态

  5.       一个结束(接受)状态集合F

  注意,P(S),表示S的幂集(所谓幂集, 就是原集合中所有的子集(包括全集和空集)构成的集族)。在NFA中,input symbol可以为 ε

  转换函数(transition function)的含义就是,一个确定的状态已经从这个状态出发的一条边的标签(符号symbol),可以确定它的下一个状态组成的集合,比如上图(这个转换图就是NFA的一种表示方式),0状态,a符号,确定了一个状态的集合{0,1}

  3. 转换图(transition graph)的表示

  我们知道,计算机是无法直接表示一个图,我们应该如何来表示一个转换图?使用表格就是一个最简单的方法,每行表示一个状态,每列表示一个input symbol,这种表格被叫做 transtion table(转换表)

  可以说使用表格是最简单的表示方式,但是我们可以注意到在这个图中状态1和input symbol a,是没有下一个状态的(空集合),也就是,对于一个大的状态图,我们可能花费大量的空间,而其中空集合会消耗不少空间,但是这种消耗又不是必须的,所以,作为最简单的一种实现方式,却不是最优的

  语言(language)被NFA定义成为一个input string的集合,而这个集合中的元素则是被NFA受接受的所有的字符串(那些可以从开始状态到某接受状态的input string)

  至于存储的方式,可以试试邻接表。注意,使用什么样的数据结构来保存NFA按情况不同而不同,在一些特殊情况下,某些数据结构会变得很方便使用,而换入其他情况,则不可以使用了。

词法分析(2)---NFA相关推荐

  1. 词法分析(4)---NFA与DFA的转化

    1. 子集构造(Subset Construction) 这是一个转换NFA到DFA的算法.我们知道NFA和DFA的区别最主要的就是一个状态和一个input symbol是否能够确定一个状态的问题,对 ...

  2. 词法分析(NFA与DFA)

    词法分析(1)---词法分析的有关概念以及转换图 词法分析是编译的第一个阶段,前面简介中也谈到过词法分析器的任务就是: 字符流------>词法记号流 这里词法分析和语法分析会交错进行,也就是说 ...

  3. 实现一个正则表达式引擎in Python(一)

    前言 项目地址:Regex in Python 开学摸鱼了几个礼拜,最近几天用Python造了一个正则表达式引擎的轮子,在这里记录分享一下. 实现目标 实现了所有基本语法 st = 'AS342abc ...

  4. 编译原理笔记 导言和目录

    本学期编译原理的学习也差不多快结束了,在学习过程中也做了不少笔记. 为了准备即将来到的考试,我想把学习笔记再整理一遍.借此机会创建了这个专栏--为了满足创建专栏之前必须发布15篇以上的原创文章,我还特 ...

  5. 【编译原理】山东大学编译原理复习提纲

    涵盖所有考点,复习绝对高效,点赞+留邮箱获取pdf版本. 山东大学编译原理复习提纲 一.简答与计算 1.1 必考 1. 编译过程 画图表示编译过程的各阶段,并简要说明各阶段的功能: 词法分析器:输入源 ...

  6. 编译原理 理论知识点

    第一章 引论 编译程序和解释程序是两类重要的高级语言处理程序. 机器语言:计算机可以直接执行的代码形式的指令系统称为机器语言. 翻译程序:源程序 --- 目标程序 汇编程序:汇编语言 --- 机器语言 ...

  7. 【编译原理笔记03】词法分析:正则表达式、有穷自动机(FA)、DFA与NFA及RE的相互转换、DFA识别单词、语法检测

    本次笔记内容: 3-1 正则表达式 3-2 正则定义 3-3 有穷自动机 3-4 有穷自动机的分类 3-5 从正则表达式到有穷自动机 3-6 从NFA到DFA的转换 3-7 识别单词的DFA 文章目录 ...

  8. 编译原理——词法分析(3)有穷自动机中DFA与NFA的理解

    1.1词法分析器生成工具Lex 虽然在学习上,我们学习的是Lex,但是最近经常使用的是词法分析器生成工具是Flex,它可以为C语言生成代码,Vern Paxson于1987年以C语言写作了Flex,他 ...

  9. 编译原理词法分析(正规式转NFA)

    文章目录 [问题描述] [基本要求] [测试用例] [解决步骤] 正规式转NFA方法步骤: 图的构建过程: 完整代码: [问题描述] 正规表达式→NFA问题的一种描述是: 编写一个程序,输入一个正规表 ...

最新文章

  1. 找回 macOS Sierra 中的“任何来源”选项
  2. C++基础-string截取、替换、查找子串函数
  3. 易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之外网客户端
  4. 基于Boost::beast模块的异步WebSocket服务器
  5. 统计正数和负数的个数然后计算这些数的平均值(循环、数组解法)
  6. 怎么用eclipse编写python_python用eclipse开发配置
  7. 【Swift 4.0】扩展 WCDB 支持 SQL 语句
  8. CentOs 设置静态IP 方法[测试没问题]
  9. python爬虫爬取慕课网中的图片
  10. acl审计软件_现在有多少种比较常用的审计软件 ?
  11. 理解Android中的MeasureSpec
  12. 赛门铁克管理密码忘记卸载工具
  13. mapabc 国人推荐
  14. 计算机综合应用技能,系统测评计算机综合应用技能期末作业.doc
  15. python如何爬取煎蛋图片(js)
  16. 第二十三篇-ubuntu18.04怎么下载播放器以及如何设置默认播放器
  17. oracle之trunc函数
  18. 去除 element-ui 中 Dialog 对话框遮罩层的方法
  19. 2019上海理工大学c语言答案,上海理工大学C语言实验7答案.doc
  20. 电力系统继电保护基础知识

热门文章

  1. mysql主从日志的定期清理
  2. vnc连接linux时出现黑屏
  3. ubuntu apache2配置
  4. HD_I Hate It
  5. poj 3189 Steady Cow Assignment(二分+最大流)
  6. Linux vi编辑器的使用
  7. NYOJ 1067 Compress String(区间dp)
  8. 第3讲--3.1旋转矩阵
  9. Java 集合 之 房屋出租实例
  10. 第一阶段站立会议05