资源简介
使用JAVA实现编译原理的NFA确定化为DFA的文档报告和java源代码
代码片段和文件信息
import java.util.*;
import java.io.*;
public class NToDDemo {
public static void main(String[] args) throws IOException{
ArrayList SList=new ArrayList();//初态集
ArrayList charList=new ArrayList();//符号集
ArrayList fList=new ArrayList();//变换规则
ArrayList endList=new ArrayList();//终态集
String c;
Scanner sc=new Scanner(System.in);
//输入初态集
System.out.println(“请输入NFA的初态集并以END结束:“);
do{
c=sc.next();
SList.add(c);
}while(!c.equals(“END“));
SList.remove(“END“);
//输入符号集
System.out.println(“请输入NFA的符号集:“);
charList.add(sc.next());
charList.add(sc.next());
//输入终态集
System.out.println(“请输入NFA的终态集并以END结束:“);
do{
c=sc.next();
endList.add(c);
}while(!c.equals(“END“));
endList.remove(“END“);
//输入变换规则集
System.out.println(“请输入NFA的变换规则并以END结束(格式:如A0B):“);
do{
c=sc.next();
//判断是否终止
if(!c.equals(“END“)){
String lastchnext;
char[] temp=c.toCharArray();
last=String.valueOf(temp[0]);
ch=String.valueOf(temp[1]);
next=String.valueOf(temp[2]);
NToDDemo nt=new NToDDemo();
fList.add(nt.new Nfanode(lastchnext));
}
else break;
}while(true);
//显示
NToDDemo nt1=new NToDDemo();
Nfa N=nt1.new Nfa(SListcharListfListendList);
System.out.println(“-------------------------------------------------“);
System.out.println(“当前的NFA如下:“);
N.display();
N.NfaToDfa();
}
//创建NFA节点类,储存 状态-符号-状态 信息并设置显示格式
class Nfanode{
private String last;//当前状态
private String ch;//转换符号
private String next;//转换后的状态
public Nfanode(String lastInString chInString nextIn) {
last=lastIn;
ch=chIn;
next=nextIn;
}
public String getLast() {
return last;
}
public String getCh() {
return ch;
}
public String getNext() {
return next;
}
@Override
public String toString() {
// TODO 自动生成的方法存根
return (last+“->“+ch+next);//重写toString方法设置该类的显示格式
}
}
//创建Nfa类,储存初态集,符号集,变换规则集终态集,设置转换方法
class Nfa{
private ArrayList SList;//初态集
private ArrayList charList;//符号集
private ArrayList fList;//变换规则
private ArrayList endList;//终态集
public Nfa(ArrayList SListInArrayList charListInArrayList fListInArrayList endListIn){
SList=SListIn;
charList=charListIn;
fList=fListIn;
endList=endListIn;
}
public void display(){
System.out.println(“初态集是:“+SList);
System.out.println(“符号集是:“+charList);
System.out.println(“终态集是:“+endList);
System.out.println(“变换规则是:“);
Iterator it =fList.iterator();
while(it.hasNext())
{
Nfanode element=(Nfanode)it.next();
System.out.println(element);
}
}
//核心代码,NFA转化为DFA,子集法
public void NfaToDfa(){
ArrayList i=new ArrayList();
ArrayList i0=new ArrayList();
ArrayList i1=new ArrayList();
i.add(SList);
for(int j=0;j ArrayList item=(ArrayList)i.get(j);
ArrayList item0=new ArrayList();
ArrayL
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 230912 2015-10-24 18:02 NFA确定化DFA\NFA确定化为DFA.wps
文件 6392 2015-10-24 16:20 NFA确定化DFA\NToDDemo.java
目录 0 2015-10-24 18:02 NFA确定化DFA
----------- --------- ---------- ----- ----
237304 3
评论
共有 条评论