2009-08-25 6 views
0

Ich mache formale Methode und eines der Projekt ist es, eine endliche Maschine Interpreter mit Java zu erstellen. Es muss NFA aus einer Textdatei lesen und anschließend von NFA in DFA konvertieren. Außerdem muss DFA in eine Textdatei ausgegeben werden. Dann geht es durch die Symboleingabe und verarbeitet DFA mit dem Ergebnis, ob es akzeptiert oder abgelehnt wird.Finite Maschine Interpreter

Ich habe nicht viel von einem Problem mit der Codierung, sondern mit dem Design. Ich meine, ich bekomme einen netten, reibungslosen Weg, es zu implementieren. Was soll ich anfangen? Welche Klassen sollte ich haben?

Antwort

1

Eine Möglichkeit, eine Anwendung zu entwickeln, besteht darin, das Problem zu betrachten und die Lösung in Englisch zu beschreiben. Beschreiben Sie jeden einzelnen Schritt, einschließlich aller Annahmen, die Sie auf dem Weg bemerken. Jeder Absatz wahrscheinlich sollte eine andere Methode sein. Methoden, die sehr ähnliche Arbeit leisten, sollten Klassen sein.

Also, können Sie Ihre Antwort zu verbal beschreiben, in Absatzform, was Ihr Programm tun muss?

Oh, und nur um einen kleinen Hinweis zu geben: Wenn Sie das NFA/DFA in Absatzform beschreiben, versuchen Sie es zu beschreiben, als ob Sie ein Bild zeichnen würden (Sie können das "Zeichnen" später durch etwas ersetzen) , in der tatsächlichen Anwendung, aber es kann ein netter Platzhalter für jetzt sein)

0

Ich würde das Design darauf basieren, wie die Stream-Klassen arbeiten. Sie könnten einen NFA-Eingabestream und einen DFA-Ausgabestream haben. Dann könnte eine Konverterklasse eine Instanz von jedem verwenden.

1

Sie könnten den "Encoder" neu schreiben, den ich verwende, um meins zu erstellen.

Ich entwarf es, um eine endliche Zustandstabelle (im Code ausgelegt) zu nehmen, aber ich abstrahierte den Parser ziemlich gut und Sie konnten gerade diesen Teil umschreiben, der Rest der Klassen sollte ziemlich gut arbeiten, wie es ist.

http://code.google.com/p/state-machine/