Erste Schritte Sollte ich hier lieber Cases verwenden oder wäre eine If-Bedingung besser?

Luccia

Mitglied
Ich versuche für einen Term-Compiler gerade einen Lexer zu programmieren.
Dieser soll einen String aus Nummern, Klammern und Rechenzeichen lesen, unterteilen und in Tokens verwandeln.
Für mich stellt sich gerade aber die frage, ob es für mich mehr sinn macht die einzelnen Bedingungen als Cases zu bewerten oder If- bedingungen zu erstellen.

(also sollte ich

case Num : (ES.matches([0-9]))
case RZ : (ES.matches([+,-,/,*]))
usw

oder sollte ich es lieber so machen:

if (ES.matches([0-9]))
else if (ES.matches ([+,-,/,*])

usw. )

Macht es überhaupt einen unterschied?

Vielen dank für die Hilfe im Vorraus 🙂
 
Also in der Tutorial die ich zu java gelesen habe stand das so:

Umfangreiche Verschachtelungen von If - Bedingungen erweisen sich häufig als umständlich. Aus diesem Grund gibt es die sogenannte Mehrfachauswahl in Form der Switch - Bedingung. Sie entspricht in ihrem Ablauf dem der Else - Bedingungen, übernimmt allerdings das Kriterium als Parameter und testet es in verschiedenen Zweigen jeweils extra

da hab ich einfach angenohmen, dass es keinen unterschied macht, ob ich eine If bedingung oder Cases nehme. Und da es ja relativ viele bedingungen sein werden (ich werd rechenzeichen glaub ich noch trennen, aber da bin ich mir noch nicht so sicher) dachte ich mir mit cases würde es übersichtlicher werden.

Auf die Case bezeichnung kam ich durch das was jeder Case machen sollte (also Case Num soll ja einen Zahl aus dem String erkennen und in den Token Num verwandeln)
 
Das Problem ist, dass du in deinem Fall kein Case verwenden kannst. Oder ich würde zumindest keine einfache Lösung kennen.
Ich würd eher eine Klasse schreiben, welche im Konstruktor den Input ([c]123.452534[/c], [c]*[/c], [c]([/c], ...) parst und intern alles handelt. Die Instanz könnte dann auch eine Methode [c]Type getType()[/c] anbieten, wobei Type ein enum ist. Je nach belieben mit den Gruppen
Java:
enum Type { OP, BRACKET, NUM }
oder mit allen allfällig brauchbaren Infos:
Java:
enum Type { OP_PLUS, OP_MINUS, ..., BRACKET_OPEN, BRACKET_CLOSE, NUM }
Bei letzterem Beispiel müsste nur noch ein [c]double getNumber()[/c] implementiert werden, welches im Fall von [c]getType() == Type.NUM[/c] benötigt werden würde.
 
Also würdest du anstelle von einem Lexer und einem Parser nur einen Parser machen?
Ein Enum dachte ich arbeitet mit Cases :/ oder kann es auch mit if-bedingungen arbeiten?


----
Entschuldige, falls meine fragen ein bisschen Naiv sind, aber ich bin noch etwas neu in java und muss alles noch ein bisschen besser verstehen 🙂.
Aber danke für die hilfe.
 
Also würdest du anstelle von einem Lexer und einem Parser nur einen Parser machen?
Versteh die Frage nicht.
Ein Enum dachte ich arbeitet mit Cases :/ oder kann es auch mit if-bedingungen arbeiten?
Ein Enum arbeitet mit gar nichts. Aber ein Switch kann mit Enums arbeiten 😉

Entschuldige, falls meine fragen ein bisschen Naiv sind, aber ich bin noch etwas neu in java und muss alles noch ein bisschen besser verstehen 🙂.

Ich merke, dass du die Zusammenhänge noch nicht ganz verstehst. Ist dieser Parser eine Hausaufgabe oder machst du den aus Eigeninteresse? Wenn letzteres, dann beginn bei etwas kleinerem. Die ersten paar Kapitel eines beliebigen Javabuches könnten allenfalls helfen.
 
Es ist leider eine Hausaufgabe, sonst würde ich etwas leichteres machen. Aber mich interessiert Java und es macht mir sehr viel Spaß etwas neues zu lernen, also würde ich sagen, dass es nicht ganz ohne eigenes Interesse ist. Wenn ich die Hausaufgabe habe, werde ich danach noch ein leichteres Projekt beginnen (oder vll etwas schweres, weil ich es dann hinbekommen habe 😀?).
Okay ich les mir noch eine weitere Tutorial durch. Irgentwann fällt der Groschen auch bei mir 😉
....

Mit nur parser meine ich:

Ich hab schon einige fertige Termcompiler im Internet gefunden. Die meisten Programmieren nicht Objekt orientiert und teilen den Parser und den Lexer nicht auf. Sie nutzen nur einen parser für alles (also der kann dann sowohl erkennen ob alle Zeichen i.O. sind, als auch ob die Reihenfolge ok ist).

.....
Naja, also geh ich jetzt noch ein paar weitere Tutorials lesen und fange dann mit dem Schreiben an. Hab ja auch noch ein bisschen Zeit.

danke für die hilfe 🙂
 

Zurück
Oben