neogeo
2010-11-23, 18:13:24
Hallo erstmal! :)
Um gleich zur Sache zu kommen: Ich habe logische Ausdrücke a la
"((A | B) & C)"
als Strings vorliegen. Die Buchstaben repräsentieren dabei Mengen, genauer gesagt handelt es sich dabei um Sets, also die Abbildung von Mengen in der Sprache Java.
Das logische "und" bzw. "oder", also | und &, wird durch union und intersect ausgedrückt. Sets in Java haben dafür ja schon Methoden wie z.B. addAll oder retainAll.
Desweiteren habe ich schon eine Methode gebaut, um die Stringausdrücke in ein String-Array zu überführen und alles unnötige (Leerzeichen z.B.) zu entfernen, außerdem wird die korrekte Klammerung überprüft.
Ich hab aus obigen also ein Array erzeugt erzeugt wie:
["(","(","A","|","B",")","&","C",")"]
Soweit, so gut. Jetzt soll der Ausdruck ausgewertet werden. Als Rahmenbedingung ist vorgegeben, dass das ganze zeichenweise durchlaufen werden soll und mit 2 Stacks funktionieren soll und bei jeder schließenden Klammer berechnet werden soll.
Und hier weiß ich nicht weiter, habt ihr eine Idee?
Bäume, irgendwelche anderen Notationen etc. sollen nicht verwendet werden!
Bisher haue ich alle Operanden (also Mengen) auf Stack 1, alle Operatoren auf Stack 2 und bei jeder schliessenden Klammer werden die 2 letzten Mengen und der letzte Operator gepoppt, das ganze verbandelt und die Ergebnismenge wieder auf den Operandenstack gelegt.
Für obigen Ausdruck funktioniert das, für die meisten anderen Ausdrücke natürlich nicht. Öffnende Klammern betrachte ich z.B. noch garnicht und bei einer schließenden Klammer werden auch immer nur die letzten beiden Operanden verarbeitet.
Irgendwas habe ich auf jeden Fall nicht beachtet.
Vielen Dank :)
Um gleich zur Sache zu kommen: Ich habe logische Ausdrücke a la
"((A | B) & C)"
als Strings vorliegen. Die Buchstaben repräsentieren dabei Mengen, genauer gesagt handelt es sich dabei um Sets, also die Abbildung von Mengen in der Sprache Java.
Das logische "und" bzw. "oder", also | und &, wird durch union und intersect ausgedrückt. Sets in Java haben dafür ja schon Methoden wie z.B. addAll oder retainAll.
Desweiteren habe ich schon eine Methode gebaut, um die Stringausdrücke in ein String-Array zu überführen und alles unnötige (Leerzeichen z.B.) zu entfernen, außerdem wird die korrekte Klammerung überprüft.
Ich hab aus obigen also ein Array erzeugt erzeugt wie:
["(","(","A","|","B",")","&","C",")"]
Soweit, so gut. Jetzt soll der Ausdruck ausgewertet werden. Als Rahmenbedingung ist vorgegeben, dass das ganze zeichenweise durchlaufen werden soll und mit 2 Stacks funktionieren soll und bei jeder schließenden Klammer berechnet werden soll.
Und hier weiß ich nicht weiter, habt ihr eine Idee?
Bäume, irgendwelche anderen Notationen etc. sollen nicht verwendet werden!
Bisher haue ich alle Operanden (also Mengen) auf Stack 1, alle Operatoren auf Stack 2 und bei jeder schliessenden Klammer werden die 2 letzten Mengen und der letzte Operator gepoppt, das ganze verbandelt und die Ergebnismenge wieder auf den Operandenstack gelegt.
Für obigen Ausdruck funktioniert das, für die meisten anderen Ausdrücke natürlich nicht. Öffnende Klammern betrachte ich z.B. noch garnicht und bei einer schließenden Klammer werden auch immer nur die letzten beiden Operanden verarbeitet.
Irgendwas habe ich auf jeden Fall nicht beachtet.
Vielen Dank :)