当前位置: 首页>>代码示例>>Python>>正文


Python Node.addTransition方法代码示例

本文整理汇总了Python中node.Node.addTransition方法的典型用法代码示例。如果您正苦于以下问题:Python Node.addTransition方法的具体用法?Python Node.addTransition怎么用?Python Node.addTransition使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在node.Node的用法示例。


在下文中一共展示了Node.addTransition方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: noAceptarVacia

# 需要导入模块: from node import Node [as 别名]
# 或者: from node.Node import addTransition [as 别名]
    def noAceptarVacia(self):
        # Verificamos que el AFD acepta una palabra vacia
        if self.validateSecuence(""):
            # Transiciones que tenemos que agregar al nuevo nodo inicial
            transitions = self.nodes[self.getFirst()].getTransitions()

            # Buscamos un nombre valido para el nuevo nodo
            nodesCounter = 0
            newNodeName = "Q" + str(nodesCounter)

            while self.nodes.has_key(newNodeName):
                nodesCounter += 1
                newNodeName = "Q" + str(nodesCounter)

            # Seteamos el nuevo nodo como final y agregamos la transicion al inicial actual
            node = Node(newNodeName, True)
            for symbol, transitionsToAdd in transitions.iteritems():
                for destination in transitionsToAdd:
                    node.addTransition(symbol, destination)

            # Reiniciamos el listado de nodos (No podemos agregar una entrada al inicio en un orderecDict)
            newNodes = collections.OrderedDict()

            # Agregamos el nodo al AF usando el nombre del nodo como llave
            newNodes[node.getName()] = node
            self.first = node.getName()

            # Agregamos el resto de los elementos al nuevo listado de nodos
            for nodeName, node in self.nodes.iteritems():
                newNodes[nodeName] = node

            # Reemplazamos el listado de nodos
            self.nodes = newNodes
开发者ID:jpverdejo,项目名称:plf,代码行数:35,代码来源:af.py

示例2: kleene

# 需要导入模块: from node import Node [as 别名]
# 或者: from node.Node import addTransition [as 别名]
    def kleene(self):
        first = self.getFirst()

        # Buscamos un nombre valido para el nuevo nodo
        nodesCounter = 0
        newNodeName = "Q" + str(nodesCounter)

        while self.nodes.has_key(newNodeName):
            nodesCounter += 1
            newNodeName = "Q" + str(nodesCounter)

        # Seteamos el nuevo nodo como final y agregamos la transicion al inicial actual
        node = Node(newNodeName, True)
        node.addTransition("E", first)

        # Reiniciamos el listado de nodos (No podemos agregar una entrada al inicio en un orderecDict)
        newNodes = collections.OrderedDict()

        # Agregamos el nodo al AF usando el nombre del nodo como llave
        newNodes[node.getName()] = node
        self.first = node.getName()

        # Agregamos el resto de los elementos al nuevo listado de nodos
        for nodeName, node in self.nodes.iteritems():
            newNodes[nodeName] = node

            # Si es final agregamos la transicion vacia al nodo inicial
            if node.isFinal():
                node.addTransition("E", first)

        # Reemplazamos el listado de nodos
        self.nodes = newNodes
开发者ID:jpverdejo,项目名称:plf,代码行数:34,代码来源:af.py

示例3: _loadFromFile

# 需要导入模块: from node import Node [as 别名]
# 或者: from node.Node import addTransition [as 别名]
    def _loadFromFile(self, af, filename):
        if not os.path.isfile(filename):
            print "El archivo indicado no existe."
            sys.exit()

        f = open(filename)

        # Leemos el archivo linea a linea
        for line in f:
            # Removemos el salto de linea final
            line = line.rstrip()

            # Dividimos la linea usando un espacio como separacion
            data = line.split()

            # Verificamos que tenga mas de 1 parametro
            # (Se requiere por lo menos el nombew y si es final o no)
            if len(data) > 1:
                # Usamos la primera palabra como nombre del nodo
                nodeName = data[0]

                # Usamos la segunda palabra para verificar si es un nodo final o no
                # Si es "S", es final, en otro caso no lo es
                final = True if data[1] == "S" else False

                # Creamos el nodo con esos 2 parametros y los borramos de la lista
                # Para luego iterar sobre las transiciones
                node = Node(nodeName, final)

                del data[:1]

                # Analizamos transicion a transicion
                for transition in data:
                    # Separamos la palabra usando ":", si la lista resultante tiene 2 entradas
                    # (Simbolo y estado al que avanza)
                    transition = transition.split(":")
                    if len(transition) == 2:
                        # Si es valido se agrega la transicion al nodo
                        node.addTransition(transition[0], transition[1])

                # Se agrega el nodo al AF
                af.addNode(node)
开发者ID:jpverdejo,项目名称:plf,代码行数:44,代码来源:plf.py

示例4: union

# 需要导入模块: from node import Node [as 别名]
# 或者: from node.Node import addTransition [as 别名]
    def union(self, af):
        currentNodes = copy.copy(self.getNodes().keys())
        extraNodes = af.getNodes()

        nodesCounter = 1

        renames = {}

        # Renombramos los nodos del nuevo AF que existen en el primero
        for nodeName, node in extraNodes.iteritems():
            if nodeName in currentNodes:
                newNodeName = "Q" + str(nodesCounter)

                while newNodeName in currentNodes:
                    nodesCounter += 1
                    newNodeName = "Q" + str(nodesCounter)

                renames[nodeName] = newNodeName
                node.setName(newNodeName)
                nodesCounter += 1

        for oldNodeName, newNodeName in renames.iteritems():
            for nodeName, node in extraNodes.iteritems():
                node.replaceTransition(newNodeName, oldNodeName)

        firstNodeAF = af.getFirst()

        if renames.has_key(firstNodeAF):
            firstNodeAF = renames[firstNodeAF]

        # Buscamos un nombre valido para el nuevo nodo
        newNodeName = "Q" + str(nodesCounter)

        while self.nodes.has_key(newNodeName) or renames.has_key(newNodeName):
            nodesCounter += 1
            newNodeName = "Q" + str(nodesCounter)

        # Seteamos el nuevo nodo como no-final y agregamos la transicion al inicial de cada AF
        node = Node(newNodeName, False)
        node.addTransition("E", self.getFirst())
        node.addTransition("E", firstNodeAF)

        # Reiniciamos el listado de nodos (No podemos agregar una entrada al inicio en un orderecDict)
        newNodes = collections.OrderedDict()

        # Agregamos el nodo al AF usando el nombre del nodo como llave
        newNodes[node.getName()] = node
        self.first = node.getName()

        # Agregamos los elementos del AF actual al nuevo listado de nodos
        for nodeName, node in self.nodes.iteritems():
            newNodes[nodeName] = node

        # Agregamos los elementos del nodo que se une al nuevo listado de nodos
        for nodeName, node in af.nodes.iteritems():
            # Tenemos que reescribir la variable, cuando cambiamos el nombre no cambiamos
            # el indice en el listado de nodos
            nodeName = node.getName()
            newNodes[nodeName] = node

        # Reemplazamos el listado de nodos
        self.nodes = newNodes

        # Actualizamos el listado de simbolos validos
        self.updateSymbols()
开发者ID:jpverdejo,项目名称:plf,代码行数:67,代码来源:af.py

示例5: toAFD

# 需要导入模块: from node import Node [as 别名]
# 或者: from node.Node import addTransition [as 别名]
    def toAFD(self):
        # Si el AF ya es un AFD devolvemos la instancia
        if self.isAFD():
            return self

        # Iniciamos un contador para los nodos que usaremos para eliminar
        # las secuencias con longitud mayor que 1
        tempNodeID = 1

        # Iteramos sobre los nodos
        for nodeName, node in self.nodes.iteritems():
            # Obtenemos las transiciones de cada nodo
            for symbol, transition in node.getTransitions().iteritems():
                # Revisamos si a secuencia tiene longitud mayor que 1
                if len(symbol) > 1:
                    # Invertimos la secuencia
                    reverseSymbol = symbol[::-1]

                    # Cada nodo que vayamos creando apuntara al ultimo creado
                    # en el primer caso es a la transicion completa del simbolo
                    lastNode = transition

                    # Seteamos una variable con el nombre del ultmo nodo temporal creado
                    # para usarlo en la transicion del nodo inicial
                    tempNodeName = None

                    # Leemos la secuencia invertida caracter a caracter, excepto por el ultimo
                    # (o sea, el primero de la secuencia) ya que ese lo usaremos en el nodo inicial
                    for i in range(0, (len(reverseSymbol) - 1)):
                        # Obtenemos el caracter de la secuencia
                        singleSymbol = reverseSymbol[i]

                        # Creamos un nodo temporal de nombre "tempID", donde ID lo obtenemos 
                        # de un contador incremental. El nodo no es final.
                        tempNodeName = "temp%s" % (tempNodeID)
                        tempNode = Node(tempNodeName, False)

                        # Si es la primera iteracion haremos la transicion desde el nodo
                        # a todos los que apuntaba la secuencia inicial, si es un una iteracion mayor
                        # apuntaremos el nodo al ultimo nodo temporal creado
                        for nextNode in lastNode:
                            tempNode.addTransition(singleSymbol, nextNode)

                        # Agregamos el nodo al AF
                        self.addNode(tempNode)

                        # Seteamos la variable lastNode con el nodo recien creado para la siguiente iteracion
                        lastNode = [tempNodeName]

                        #Aumentamos el contador del nodo intermedio
                        tempNodeID += 1

                    # Luego de desarmar la secuencia eliminamos la transicion del nodo original
                    # y creamos una transicion al ultimo nodo temporal creado
                    node.removeTransition(symbol)
                    node.addTransition(symbol[0], tempNodeName)

        # Actualizamos el listado de simbolos validos
        self.symbols = []
        self.updateSymbols()

        # Instanciamos un nuevo AF para el AFD
        newAF = AF()
        # Creamos un contados para los nombres de los nodos
        nodesCounter = 0
        # Creamos diccionarios para asociar grupos de nodos con su nombre y vice-versa
        nodeNameByTransitions = {}  # Get nodeName using the group of nodes
        transitionsByNodeName = {}  # Get group of Nodes using the nodeName
        # Creamos un directorio de nodos
        nodes = {}
        # Creamos una lista con los nuevos nodos que crearemos, como solo agregaremos
        # nodos no hay problemas en modificarlo mientras iteramos
        nodesToIterate = []

        # Asumimos que el primer nodo del AFD es el nodo inicial (Premisa)
        firstNode = self.nodes.itervalues().next()

        # Obtenemos la clausura del nodo inicial
        transitions = self._getClausura([firstNode.getName()])
        # Creamos un string con los nodos obtenidos en la clausura, porque las llaves de los
        # diccionarios no pueden ser mutables
        transitionString = '|'.join(str(v) for v in transitions)

        # Seteamos el nombre del nodo inicial
        nodeName = "Q" + str(nodesCounter)
        # Asociamos el nombre del nuevo nodo con los nodos primitivos que lo componen
        nodeNameByTransitions[transitionString] = nodeName
        transitionsByNodeName[nodeName] = transitions
        # Agregamos el nodo al listado de nodos por iterar
        nodesToIterate.append(nodeName)
        # Determinamos si el nuevo nodo sera final
        isFinal = self._newNodeIsFinal(transitions)

        # Creamos un nuevo nodo y lo agregamos al AFD
        node = Node(nodeName, isFinal)
        newAF.addNode(node)

        # Agregamos el nodo al listado de nodos usango el nombre como llave
        nodes[nodeName] = node

#.........这里部分代码省略.........
开发者ID:jpverdejo,项目名称:plf,代码行数:103,代码来源:af.py


注:本文中的node.Node.addTransition方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。