编译原理课程作业2
2016-04-04 21:25
911 查看
NFA匹配字符串,突然意识到可以用多层的list,然后整个作业就没有难度了,递归部分一直错我都怀疑人生了,结果发现是类里的递归声明要加类名。。
读入的文件nfa.txt
# -*- coding: utf-8 -*- import sys class io(): """read the NFA from file""" def __init__(self,strlist): self.strlist = strlist def i(self): if(len(sys.argv)!=3): print "there are some errors" exit(0) file_name = sys.argv[1] self.strlist = list(sys.argv[2]) file = open(file_name) """ M = (K ,E ,f ,S0 ,Z ) """ self.K = file.readline().strip().split(' ') self.E = file.readline().strip().split(' ') self.f = [] for i in range(len(self.K)): listks = file.readline().strip().split(' ') listks2 = [] for listk in listks: listks2.append(listk.strip().split(',')) self.f.append(listks2) self.S0 = file.readline().strip().split(' ') self.Z = file.readline().strip().split(' ') #print self.K ,self.E ,self.f ,self.S0 ,self.Z,self.strlist if (not(set(self.strlist)<=set(self.E))): print "no" sys.exit() def nfa2str(self,numstr = 0,state = 's0'): if(numstr==len(self.strlist) and (state in self.Z)): print "yes" sys.exit() elif(numstr<len(self.strlist)): statex = self.K.index(state) statey = self.E.index(self.strlist[numstr]) statesNow = self.f[statex][statey] if(statesNow!=['N/A']): for stateNow in statesNow: x = io.nfa2str(self,numstr+1,stateNow) str = [] m = io(str) m.i() m.nfa2str() print "no"
读入的文件nfa.txt
s0 s1 a b s0,s1 s1 N/A s0,s1 s0 s1
相关文章推荐
- 如何用Eclipse查看Hadoop源码
- 区间覆盖问题
- Java反射---获取field信息跟构造函数信息
- 子对象的派生类构造函数以及变量的输入
- Linux安装memcache
- 将单向链表按某值划分成左边小,中间相等,右边大
- jvm(13)-线程安全与锁优化(转)
- C++时间和日期
- 百度前端技术学院-task2.18-2.19源码以及个人总结
- 浏览器缓存机制
- 全排列-递归
- STL与泛型编程<六>:map和multimap
- 整数的补码表示及其运算分析
- Java synchronized的实现原理与应用
- 最快速度求两个数组之交集算法与hash
- 黑马程序员-学习笔记03
- codeforces #305 div1 done
- 构建c/c++项目时添加宏定义
- c++中使用外部库exe,.dll与.lib文件的生成与使用的详解
- 53. Maximum Subarray