词法分析程序之正规式转换成NFA
来源:互联网 发布:双乾网络支付有限公司 编辑:程序博客网 时间:2024/05/29 04:47
词法分析程序之正规式转换成NFA
本篇依据Thompson方法,运用C语言编写而成。
实验环境:windows7和VS2013
源码下载地址:http://pan.baidu.com/s/1kVPkYDD
接口
Thompson构造法:从正规表达式构造NFA
输入:字母表Σ上的一个正规表达式r
输出:接受L(r)的NFA N
Thompson原理
方法:将r分解成最基本的子表达式,使用下面的规则1和2为r的每个基本符号( ε 或Σ中的符号)构造NFA。用规则3逐步组合前面构造的NFA,直到获得整个正规表达式的NFA为止。
规则1. 对ε, 构造NFA 。
这里 i 是新的开始状态,f是新的接受状态。很明显这个NFA识别{ε}。
规则2. 对于Σ中的每个符号a,构造NFA。
同样,i 是新的开始状态, f 是新的接受状态。 这个NFA识别 {a}。
规则3 . 如果N(s) 和 N(t) 是正规表达式s和t的NFA,则:
①对于正规表达式 s | t, 可构造复合的NFA N(s|t):
②对于正规表达式 st, 可构造复合的NFA N(st):
③对于正规表达式 s*, 构造复合的NFA N(s*):
④对于括起来的正规表达式 (s), 使用N (s) 本身作为它的NFA。
在构造过程中,每次构造的新状态都要赋予不同的名字。这样,任何NFA的两个状态都具有不同的名字。即使同一符号在r中出现多次,我们也要为该符号的每个实例创建一个独立的带有自己状态的NFA。
程序图
测试案例
实验中待识别的正规式:
单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
ID = letter (letter | digit)(程序中写成a(a|b),a属于a~z,A~Z;b属于0~9)
NUM = digit digit* (写成bb*)
结果
控制台显示的结果:
换成NFA即为:
- 词法分析程序之正规式转换成NFA
- 词法分析(5)---从正规式到NFA
- 词法分析(2)---NFA
- 词法分析(2)---NFA
- 编译原理词法分析之NFA与自动机的最小化
- 词法分析(NFA与DFA)
- 词法分析☞NFA语言识别
- 编译原理学习周入门教程--(9)编译程序第一个工作阶段-词法分析(NFA和DFA转换) .
- 词法分析(4)---NFA与DFA的转化
- 词法分析(4)---NFA与DFA的转化
- 自动构造词法分析器的步骤——正规式转换为最小化DFA
- 正规式转确定有穷自动机(NFA)
- 给定正规式转化为等价的NFA代码实现
- 正规式转确定有穷自动机(NFA)
- 编译原理学习周入门教程--(7)编译程序第一个工作阶段-词法分析(正规式)
- 词法分析程序
- 一个词法分析程序
- 词法分析程序
- 关于ToolBar和Actionbar左上角返回箭头的问题
- 多态特性笔记
- gson的@Expose注解和@SerializedName注解
- python科学运算库numpy,pandas学习记录
- ServletConfig对象用法
- 词法分析程序之正规式转换成NFA
- Unity解决脚本相互调用的几种方法
- 《Photoshop智能手机APP界面设计》学习笔记
- 连接游戏(poj 2084)
- web.xml文件初始化过程
- STL常用容器浅谈
- 枚举类型的讲解
- 关于点点滴滴这个系列
- java设计模式的学习(1)