示例#1
0
	def toDFA(self):
		newStates = []
		initialState = self.getInitialState()
		newStates.append( '|'.join( list( map(lambda x: x.label, self.clausura(initialState) ) ) ) )

		alphabet = self.alphabet.split(',')
		stableTable = []

		x = 0
		for state in newStates:
			stableTable.append([None]*len(alphabet))
			y = 0
			for a in alphabet:
				stateTo = getStateTo(self, state, a)

				if(stateTo):
					stableTable[x][y] = stateTo
					newStates.append(stateTo)
				y = y+1
			x = x+1

		newDFA = DFA(self.name+"-toDFA", alphabet)
		newDFA.addState(normalizeState(newStates[0]), True)
		for i in range(1, len(newStates)):
			newDFA.addState(normalizeState(newStates[i]), False, lookForFinal(self, newStates[i]))

		for i in range( len(newStates) ):
			for j in range( len(stableTable[i]) ):
				if(stableTable[i][j]):
					newDFA.addTransition(alphabet[j], normalizeState(newStates[i]), normalizeState( stableTable[i][j]) )

		return newDFA
示例#2
0
文件: Lua.py 项目: winkie/semester_7
def _NumberDFA():
    dfa = DFA()
    dfa.addStates(["number_0", "NUMBER"])
    dfa.state = dfa.states[0]
    dfa.final = dfa.states[-1]
    dfa.addTransition("number_0", "NUMBER", DIGITS)
    dfa.addTransition("NUMBER", "NUMBER", DIGITS)
    return dfa
示例#3
0
文件: Lua.py 项目: winkie/semester_7
def _IdentifierDFA():
    dfa = DFA()
    dfa.addStates(["id0", "idfin"])
    dfa.state = dfa.states[0]
    dfa.final = dfa.states[-1]
    dfa.addTransition("id0", "idfin", LETTERS + "_")
    dfa.addTransition("idfin", "idfin", DIGITS + LETTERS + "_")
    return dfa
示例#4
0
def createDFA():
    newDFA = DFA("newDFA", alphabet)
    print("nodes addState")
    for node in nodeList:
        newDFA.addState(str(node.label.text()), node.first, node.final)
    for con in conList:
        newDFA.addTransition(str(con.name), str(con.node.label.text()),
                             str(con.nextNode.label.text()))
    return newDFA
示例#5
0
文件: Lua.py 项目: winkie/semester_7
def _LineCommentDFA():
    dfa = DFA()
    dfa.addStates(["lc0", "lc1", "lcloop", "lcfin"])
    dfa.state = dfa.states[0]
    dfa.setFinal("lcfin")
    dfa.addTransition("lc0", "lc1", "-")
    dfa.addTransition("lc1", "lcloop", "-")
    dfa.addTransition("lcloop", "lcloop", LETTERS + DIGITS + OTHERS + " \t")
    dfa.addTransition("lcloop", "lcfin", "\n")
    return dfa
示例#6
0
    def toDFA(self):
        newStates = []
        initialState = self.getInitialState()
        newStates.append(initialState.label)

        alphabet = self.alphabet.split(',')
        stateTable = []
        x = 0
        stateTmp = ''
        for state in newStates:
            stateTable.append([None] * len(alphabet))
            y = 0
            for a in alphabet:
                print("ALPHAB ", a, " state ", state, " -- ", stateTmp)
                if stateTmp != state:
                    stateTo = getStateTo(self, state, a)
                    if stateTo:
                        print("YES")
                        stateTmp = state
                        stateTable[x][y] = stateTo
                        newStates.append(stateTo)
                y = y + 1
            x = x + 1
        newDFA = DFA(self.name + "-toDFA", alphabet)
        newDFA.addState(normalizeState(newStates[0]), True)
        for i in range(1, len(newStates)):
            newDFA.addState(normalizeState(newStates[i]), False,
                            lookForFinal(self, newStates[i]))

        for i in range(len(stateTable)):
            for j in range(len(stateTable[i])):
                if (stateTable[i][j]):
                    newDFA.addTransition(alphabet[j],
                                         normalizeState(newStates[i]),
                                         normalizeState(stateTable[i][j]))

        return newDFA
示例#7
0
文件: Lua.py 项目: winkie/semester_7
def _MultiLineCommentDFA():
    dfa = DFA()
    dfa.addStates(["q0", "q1", "q2", "q3", "qloop", "q4", "q5"])
    dfa.state = "q0"
    dfa.setFinal("q5")
    dfa.addTransition("q0", "q1", "-")
    dfa.addTransition("q1", "q2", "-")
    dfa.addTransition("q2", "q3", "[")
    dfa.addTransition("q3", "qloop", "[")
    loopchars = (LETTERS + DIGITS + OTHERS + " \t\n\r").replace("]", "")
    dfa.addTransition("qloop", "qloop", loopchars)
    dfa.addTransition("qloop", "q4", "]")
    dfa.addTransition("q4", "qloop", loopchars)
    dfa.addTransition("q4", "q5", "]")

    return dfa
示例#8
0
文件: Lua.py 项目: winkie/semester_7
def _LiteralDFA():
    dfa = DFA()
    dfa.addStates(["l0", "lloop", "lescape", "lfin"])
    dfa.state = dfa.states[0]
    dfa.setFinal("lfin")
    dfa.addTransition("l0", "lloop", "\"")
    loopchars = (LETTERS + DIGITS + OTHERS + " \n\r\t").replace("\\", "").replace("\"", "")
    dfa.addTransition("lloop", "lloop", loopchars)
    dfa.addTransition("lloop", "lescape", "\\")
    dfa.addTransition("l0", "lescape", "\\")
    dfa.addTransition("lescape", "lloop", "ntr\"\'\\")
    dfa.addTransition("lloop", "lfin", "\"")
    return dfa