编译原理课程作业2

Posted Dystopia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理课程作业2相关的知识,希望对你有一定的参考价值。

NFA匹配字符串,突然意识到可以用多层的list,然后整个作业就没有难度了,递归部分一直错我都怀疑人生了,结果发现是类里的递归声明要加类名。。

# -*- 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

 

以上是关于编译原理课程作业2的主要内容,如果未能解决你的问题,请参考以下文章

编译原理作业

编译原理第一次作业

编译原理作业

对于编程原理的自我看法-0909上机作业

20155324 《信息安全系统设计基础》课程总结

编译原理教学日历