Пример #1
0
 def _save_SFTransducer(tr, io):
     io.write("@Transducer ")
     for s in tr.Final:
         io.write("{0:>s} ".format(statePP(tr.States[s])))
     io.write("* ")
     for s in tr.Initial:
         io.write("{0:>s} ".format(statePP(fa.States[s])))
     io.write("\n")
     for sin in tr.delta:
         for syin in tr.delta[sin]:
             for (syout, sout) in tr.delta[sin][syin]:
                 io.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format(statePP(tr.States[sin]), str(syin), str(syout),
                                                                 statePP(tr.States[sout])))
     io.write("\n")
Пример #2
0
 def _save_SFTransducer(tr, io):
     io.write("@Transducer ")
     for s in tr.Final:
         io.write("{0:>s} ".format(statePP(tr.States[s])))
     io.write("* ")
     for s in tr.Initial:
         io.write("{0:>s} ".format(statePP(fa.States[s])))
     io.write("\n")
     for sin in tr.delta:
         for syin in tr.delta[sin]:
             for (syout, sout) in tr.delta[sin][syin]:
                 io.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format(
                     statePP(tr.States[sin]), str(syin), str(syout),
                     statePP(tr.States[sout])))
     io.write("\n")
Пример #3
0
 def _saveFA(aut, io):
     if isinstance(aut, DFA):
         io.write("@DFA ")
         NFAp = False
     elif isinstance(aut, NFA):
         io.write("@NFA ")
         NFAp = True
     else:
         raise common.DFAerror()
     if not NFAp and aut.Initial != 0:
         foo = {0: aut.Initial, aut.Initial: 0}
         aut.reorder(foo)
     for sf in aut.Final:
         io.write("{0:>s} ".format(statePP(aut.States[sf])))
     if NFAp:
         io.write(" * ")
         for sf in aut.Initial:
             io.write("{0:>s} ".format(statePP(aut.States[sf])))
     io.write("\n")
     for s in xrange(len(aut.States)):
         if s in aut.delta:
             for a in aut.delta[s].keys():
                 if isinstance(aut.delta[s][a], set):
                     for s1 in aut.delta[s][a]:
                         io.write("{0:>s} {1:>s} {2:>}\n".format(
                             statePP(aut.States[s]), str(a),
                             statePP(aut.States[s1])))
                 else:
                     io.write("{0:>s} {1:>s} {2:>s}\n".format(
                         statePP(aut.States[s]), str(a),
                         statePP(aut.States[aut.delta[s][a]])))
         else:
             io.write("{0:>s} \n".format(statePP(aut.States[s])))
Пример #4
0
 def _saveFA(aut, io):
     if isinstance(aut, DFA):
         io.write("@DFA ")
         NFAp = False
     elif isinstance(aut, NFA):
         io.write("@NFA ")
         NFAp = True
     else:
         raise common.DFAerror()
     if not NFAp and aut.Initial != 0:
         foo = {0: aut.Initial, aut.Initial: 0}
         aut.reorder(foo)
     for sf in aut.Final:
         io.write("{0:>s} ".format(statePP(aut.States[sf])))
     if NFAp:
         io.write(" * ")
         for sf in aut.Initial:
             io.write("{0:>s} ".format(statePP(aut.States[sf])))
     io.write("\n")
     for s in xrange(len(aut.States)):
         if s in aut.delta:
             for a in aut.delta[s].keys():
                 if isinstance(aut.delta[s][a], set):
                     for s1 in aut.delta[s][a]:
                         io.write("{0:>s} {1:>s} {2:>}\n".format(statePP(aut.States[s]),
                                                                str(a), statePP(aut.States[s1])))
                 else:
                     io.write("{0:>s} {1:>s} {2:>s}\n".format(statePP(aut.States[s]), str(a),
                                                              statePP(aut.States[aut.delta[s][a]])))
         else:
             io.write("{0:>s} \n".format(statePP(aut.States[s])))
Пример #5
0
    def _save_SFTransducer(tr):
        """Writes transducer to a file

        :param tr: the transducer
        :type tr: Transducer"""
        f.write("@Transducer ")
        for s in tr.Final:
            f.write("{0:>s} ".format(statePP(tr.States[s])))
        f.write("* ")
        for s in tr.Initial:
            f.write("{0:>s} ".format(statePP(fa.States[s])))
        f.write("\n")
        for sin in tr.delta:
            for syin in tr.delta[sin]:
                for (syout, sout) in tr.delta[sin][syin]:
                    f.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format(statePP(tr.States[sin]), str(syin), str(syout),
                                                                   statePP(tr.States[sout])))
        f.write("\n")
Пример #6
0
    def _save_SFTransducer(tr):
        """Writes transducer to a file

        :param tr: the transducer
        :type tr: Transducer"""
        f.write("@Transducer ")
        for s in tr.Final:
            f.write("{0:>s} ".format(statePP(tr.States[s])))
        f.write("* ")
        for s in tr.Initial:
            f.write("{0:>s} ".format(statePP(fa.States[s])))
        f.write("\n")
        for sin in tr.delta:
            for syin in tr.delta[sin]:
                for (syout, sout) in tr.delta[sin][syin]:
                    f.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format(
                        statePP(tr.States[sin]), str(syin), str(syout),
                        statePP(tr.States[sout])))
        f.write("\n")
Пример #7
0
    def _saveFA(aut):
        """Writes one fa to a file

        :param aut: the automaton
        :type aut: FA or list"""
        if isinstance(aut, DFA):
            f.write("@DFA ")
            NFAp = False
        elif isinstance(aut, NFA):
            f.write("@NFA ")
            NFAp = True
        else:
            raise DFAerror()
        if not NFAp and aut.Initial != 0:
            foo = {0: aut.Initial, aut.Initial: 0}
            aut.reorder(foo)
        for sf in aut.Final:
            f.write("{0:>s} ".format(statePP(aut.States[sf])))
        if NFAp:
            f.write(" * ")
            for sf in aut.Initial:
                f.write("{0:>s} ".format(statePP(aut.States[sf])))
        f.write("\n")
        for s in xrange(len(aut.States)):
            if s in aut.delta:
                for a in aut.delta[s].keys():
                    if isinstance(aut.delta[s][a], set):
                        for s1 in aut.delta[s][a]:
                            f.write(
                                "{0:>s} {1:>s} {2:>}\n".format(statePP(aut.States[s]), str(a), statePP(aut.States[s1])))
                    else:
                        f.write("{0:>s} {1:>s} {2:>s}\n".format(statePP(aut.States[s]), str(a),
                                                                statePP(aut.States[aut.delta[s][a]])))
            else:
                f.write("{0:>s} \n".format(statePP(aut.States[s])))
Пример #8
0
    def _saveFA(aut):
        """Writes one fa to a file

        :param aut: the automaton
        :type aut: FA or list"""
        if isinstance(aut, DFA):
            f.write("@DFA ")
            NFAp = False
        elif isinstance(aut, NFA):
            f.write("@NFA ")
            NFAp = True
        else:
            raise DFAerror()
        if not NFAp and aut.Initial != 0:
            foo = {0: aut.Initial, aut.Initial: 0}
            aut.reorder(foo)
        for sf in aut.Final:
            f.write("{0:>s} ".format(statePP(aut.States[sf])))
        if NFAp:
            f.write(" * ")
            for sf in aut.Initial:
                f.write("{0:>s} ".format(statePP(aut.States[sf])))
        f.write("\n")
        for s in xrange(len(aut.States)):
            if s in aut.delta:
                for a in aut.delta[s].keys():
                    if isinstance(aut.delta[s][a], set):
                        for s1 in aut.delta[s][a]:
                            f.write("{0:>s} {1:>s} {2:>}\n".format(
                                statePP(aut.States[s]), str(a),
                                statePP(aut.States[s1])))
                    else:
                        f.write("{0:>s} {1:>s} {2:>s}\n".format(
                            statePP(aut.States[s]), str(a),
                            statePP(aut.States[aut.delta[s][a]])))
            else:
                f.write("{0:>s} \n".format(statePP(aut.States[s])))
Пример #9
0
def toJson(aut):
    """
    Json for a FA
    :param fa:
    :return:
    """
    io = cStringIO.StringIO()
    if isinstance(aut, DFA):
        jtype = "DFA"
    elif isinstance(aut, NFA):
        jtype = "NFA"
    elif isinstance(aut, Transducer):
        jtype = "Transducer"
    elif isinstance(aut, ADFA):
        jtype = "ADFA"
    io.write("{ \"automaton\": {\n\t\"title\": \"\", \n\t\"version\": \"\",\n")
    io.write("\t\"type\": \"{0:>s}\",\n".format(jtype))
    io.write("\t\"states\": [\n")
    sn = 0
    for s in xrange(len(aut.States)):
        if sn == 0:
            io.write("{ \n")
        else:
            io.write(",\n{ \n")
        io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(s)))
        io.write("\t\t\"label\": \"{0:>s}\",\n".format(statePP(aut.States[s])))
        io.write("\t\t\"output\": \"\",\n")
        if aut.initialP(s):
            io.write("\t\t\"initial\": true,\n")
        else:
            io.write("\t\t\"initial\":false,\n")
        if aut.finalP(s):
            io.write("\t\t\"final\": true\n")
        else:
            io.write("\t\t\"final\": false\n")
        io.write("}")
        sn += 1
    io.write("], \n")
    io.write("\t\"trans\": [\n")
    trn = 0
    for s in xrange(len(aut.States)):
        if s in aut.delta:
            for a in aut.delta[s].keys():
                if isinstance(aut.delta[s][a], set):
                    for s1 in aut.delta[s][a]:
                        if trn == 0:
                            io.write("{ \n")
                        else:
                            io.write(",\n{ \n")
                        io.write("\t\t\"name\": \"{0:>s}\,\n".format(str(trn)))
                        io.write("\t\t\"orig_name\": \"{0:>s}\,\n".format(
                            statePP(aut.States[s])))
                        io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format(
                            statePP(aut.States[s1])))
                        io.write("\t\t\"label\": \"{0:>s}\",\n".format(
                            str(a))),
                        io.write("\t\t\"weight\": \"\"\n")
                        io.write("}")
                        trn += 1
                else:
                    if trn == 0:
                        io.write("{ \n")
                    else:
                        io.write(",\n{ \n")
                    # io.write(", \n{ \n")
                    io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(trn)))
                    io.write("\t\t\"orig_name\": \"{0:>s}\",\n".format(
                        statePP(aut.States[s])))
                    io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format(
                        statePP(aut.States[aut.delta[s][a]])))
                    io.write("\t\t\"label\": \"{0:>s}\",\n".format(str(a))),
                    io.write("\t\t\"weight\": \"\"\n")
                    io.write("}")
                    trn += 1
    io.write("],\n")
    io.write("\t\"alphabet\": {0:>s} \n".format(alphabetPP(aut.Sigma)))
    io.write(" } ")
    return io.getvalue()
Пример #10
0
def toJson(aut):
    """
    Json for a FA
    :param fa:
    :return:
    """
    io = cStringIO.StringIO()
    if isinstance(aut, DFA):
        jtype="DFA"
    elif isinstance(aut, NFA):
        jtype="NFA"
    elif isinstance(aut, Transducer):
        jtype="Transducer"
    elif isinstance(aut, ADFA):
        jtype="ADFA"
    io.write("{ \"automaton\": {\n\t\"title\": \"\", \n\t\"version\": \"\",\n")
    io.write("\t\"type\": \"{0:>s}\",\n".format(jtype))
    io.write("\t\"states\": [\n")
    sn = 0
    for s in xrange(len(aut.States)):
        if sn ==0:
            io.write("{ \n")
        else:
            io.write(",\n{ \n")
        io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(s)))
        io.write("\t\t\"label\": \"{0:>s}\",\n".format(statePP(aut.States[s])))
        io.write("\t\t\"output\": \"\",\n")
        if aut.initialP(s):
            io.write("\t\t\"initial\": true,\n")
        else:
            io.write("\t\t\"initial\":false,\n")
        if aut.finalP(s):
            io.write("\t\t\"final\": true\n")
        else:
            io.write("\t\t\"final\": false\n")
        io.write("}")
        sn += 1
    io.write("], \n")
    io.write("\t\"trans\": [\n")
    trn = 0
    for s in xrange(len(aut.States)):
        if s in aut.delta:
            for a in aut.delta[s].keys():
                if isinstance(aut.delta[s][a], set):
                    for s1 in aut.delta[s][a]:
                         if trn == 0 :
                             io.write("{ \n")
                         else:
                             io.write(",\n{ \n")
                         io.write("\t\t\"name\": \"{0:>s}\,\n".format(str(trn)))
                         io.write("\t\t\"orig_name\": \"{0:>s}\,\n".format(statePP(aut.States[s])))
                         io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format(statePP(aut.States[s1])))
                         io.write("\t\t\"label\": \"{0:>s}\",\n".format(str(a))),
                         io.write("\t\t\"weight\": \"\"\n")
                         io.write("}")
                         trn += 1
                else:
                    if trn == 0 :
                        io.write("{ \n")
                    else:
                        io.write(",\n{ \n")
                    #io.write(", \n{ \n")
                    io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(trn)))
                    io.write("\t\t\"orig_name\": \"{0:>s}\",\n".format(statePP(aut.States[s])))
                    io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format(statePP(aut.States[aut.delta[s][a]])))
                    io.write("\t\t\"label\": \"{0:>s}\",\n".format(str(a))),
                    io.write("\t\t\"weight\": \"\"\n")
                    io.write("}")
                    trn +=1
    io.write("],\n")
    io.write("\t\"alphabet\": {0:>s} \n".format(alphabetPP(aut.Sigma)))
    io.write(" } ")
    return io.getvalue()