java 实现nfa的化简_编译原理复习文档

复习

?题型:填空、选择、简答题、综合题

第一章编译器概述

复习要点:

1、编译程序的总框架,编译程序工作的大致过程。

2、理解一下概念:编译、解释、翻译、编译前端、后端、遍

?计算机执行用高级语言编写的程序主要有两种途径:解释和编译

?编译:专指由高级语言转换为低级语言

?编译和解释的区别:是否产生目标程序

?编译程序的五个阶段:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成?此外还包括:表格处理和出错处理

第二章词法分析

复习要点:

1、了解词法分析器的任务

2、掌握状态转换图

3、正规式:与正规集的转换,判断等价

4、有限自动机:NFA确定化、DFA最简化、正规式到DFA的转换

?词法分析器(扫描器)的任务:从源程序中识别出一个个具有独立含义的最小语法单位。

?扫描器的输出格式:二元式序列(单词种别,单词符号的属性值)

?状态转换图:结点代表状态,用圆圈○表示。

状态之间用箭弧→连结,弧上的标记指明在射出弧的结点状态下可能出现的输入字符

初始状态接受状态

c5bd3405ed96a9c6d0ff6169f8950bf6.png

?正规式和有限自动机

●正规式和正规集的转换

●给出正规式,要求写出相应的NFA、DFA

●给出正规集,要求写出相应的NFA、DFA

1、正规式和正规集

●三种运算:“∣”读为“或”,“?”读为“连接”“*”读为“闭包”

●转换

●正规式等价:两个正规式所表示的正规集相同,则称两个正规式等价

令Σ是一个有限字母表,则Σ上的正规式及其表示的集合递归定义如下:

1. ε和?都是Σ上正规式,它们表示的正规集为{ε}和?

2. 若a是Σ上的字符,则a是正规式,它表示的正规集为{a}

3. 若r和s都是Σ上的正规式,他们表示的正规集记为L(r)和L(s),则

(a)r|s是正规式,表示集合L(r)∪L(s),

(b)rs是正规式,表示集合L(r)L(s),

对于Java实现NFA化简,首先你需要将NFA转换成DFA,然后再对DFA进行化简。关于NFA转换成DFA的实现,可以使用子集构造法,具体步骤如下: 1. 将NFA的开始状态作为DFA的开始状态,并将该状态加入到一个新的集合中,该集合作为DFA的开始状态集合。 2. 对于该集合中的每个状态,遍历其所有可以到达的状态,如果该状态还未加入到集合中,则将其加入集合中。 3. 对于该集合中的每个状态,遍历其所有可能的输入符号,得到一个新的状态集合,该集合中的状态都是可以由该集合中的某个状态通过该输入符号转移得到的状态。 4. 如果该集合还未被访问过,则将其作为一个新的状态,并将其加入到DFA中。 5. 将该状态集合和对应的输入符号与上一步中得到的新状态建立转移关系。 6. 重复以上步骤,直到所有状态集合都被访问过。 对于DFA的化简,可以使用Hopcroft算法,具体步骤如下: 1. 将DFA中所有状态分为两个初始的等价类:终态和非终态。 2. 对于每个输入符号,将每个等价类分成更小的等价类。如果某个等价类不能再分,则认为该等价类已经是最小等价类。 3. 将新的等价类覆盖原来的等价类,重复以上步骤,直到不能再分。 4. 对于每个等价类,选择一个代表状态。 5. 构造新的DFA,其中每个等价类代表一个状态,转移关系和原来的DFA相同。 关于编译实验三nfa转换成dfa和dfa化简.doc的具体内容,需要具体阅读文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值