2013-10-03 4 views
7

Ich habe genug von Regex-Notation. Es ist hässlich, unlesbar und unmöglich zu debuggen. Mathematiker verwenden jedoch seit Jahrzehnten Finite-State-Maschinen, um reguläre Ausdrücke zu entwerfen.Gibt es ein Programm, mit dem ich einen Regex mit einem Finite State Machine Graph entwerfen kann?

Finite State Machines

Wenn ich von Regexes verärgert immer, ich werde es gehen und ziehen als endlicher Automat mit der Hand und dann die Finite State Machine übersetzen müssen in das, was scheußlich regex Syntax I‘ m heute benutzen.

Gibt es ein Programm, mit dem ich endliche Automaten entwerfen und eine Regex ausspucken kann?

+1

Es gibt etwas, das von regulären Ausdrücken unterstützt wird, die sich nicht in endlichen Automaten befinden. –

+0

Ich habe noch nie von einem solchen Programm gehört; Sie müssen es möglicherweise selbst erstellen. Vielleicht ein Skript für Inkscape? – Marcin

+1

In den Tagen, als Sussman ein Novize war, kam Minsky einmal zu ihm, als er am PDP-6 hackte. "Was machst du?" fragte Minsky. "Ich trainiere ein zufällig verdrahtetes neuronales Netz, um Tic-Tac-Toe zu spielen." "Warum ist das Netz zufällig verdrahtet?" fragte Minsky. "Ich möchte nicht, dass es Vorurteile darüber hat, wie man spielt." Minsky schloss die Augen. "Warum schließt du deine Augen?" Sussman fragte seinen Lehrer. "Damit der Raum leer ist." – FrankieTheKneeMan

Antwort

1

JFLAP ist eine Software für formale Sprachen Themen wie nichtdeterministischen endlichen Automaten, nichtdeterministischen Kellerautomaten, Mehrband-Turingmaschinen, verschiedene Arten von Grammatiken zu experimentieren, Parsen und L-Systemen. Zusätzlich zum Erstellen und Testen von Beispielen für diese ermöglicht JFLAP das Experimentieren mit Konstruktionsbeweisen von einem Formular zum anderen, z. B. das Konvertieren eines NFA zu einem DFA in einen minimalen DFA-Zustand in einen regulären Ausdruck oder eine normale Grammatik.

JFLAP

+0

ah, registerware. Süss :-) –

2

Wenn Sie Python kennen, können Sie greenery versuchen. Das Paket fsm ist für endliche Automaten und lego für Objekte mit regulärem Ausdruck. Die beiden können frei ineinander umgerechnet werden.

>>> from greenery import fsm 
>>> x = fsm.fsm(
...  alphabet={"1", "2"}, 
...  states={"A", "B", "C", "D", "E"}, 
...  initial="A", 
...  finals={"E"}, 
...  map={ 
...   "A": {"1": "C", "2": "A"}, 
...   "B": {"1": "B", "2": "D"}, 
...   "C": {"1": "E", "2": "C"}, 
...   "D": {"1": "A", "2": "B"}, 
...   "E": {"1": "C", "2": "D"} 
...  } 
...) 
>>> print(x.lego()) 
(1(11|2)*12(21*2)*1|2)*1(11|2)*1 

Ich glaube, ich möchte darauf hinweisen, dass Ihr Beispiel Finite-State-Maschine fehlt sowohl einen Anfangszustand und alle Endzustand, so dass ich vermutete sie. Außerdem wird eine willkürliche FSM normalerweise in einen ziemlich schrecklichen regulären Ausdruck umgewandelt, und die Vereinfachung eines regulären Ausdrucks ist rechnerisch schwierig ...

Verwandte Themen