#26 25. Juli 2012 AW: RegEx zur Termvalidierung Genau dazu kannst du den Shunting-Yard-Algorithmus verwenden: Shunting-yard algorithm - Wikipedia, the free encyclopedia + Multi-Zitat Zitieren
#27 25. Juli 2012 Zuletzt bearbeitet: 25. Juli 2012 AW: RegEx zur Termvalidierung du kannst den code gerne in der javascript konsole ausführen: Code: const RE_TERM = /[\-]?[(]?([\-]?[(]+)*[\-]?[0-9]+([\.]{1}[0-9]+)?([\+\-\*\/\^\%RL]{1}[(]*[-]?[0-9]+([\.]{1}[0-9]+)?[)]*)+/; RE_TERM.test('^1+1(1(1))1+(()())'); // true RE_TERM.test('5-3)^3)(('); // true /* padding */ Code: 1^(2(3(4))(5) oder kannst du das als multiplikation interpretieren? + Multi-Zitat Zitieren
#28 25. Juli 2012 AW: RegEx zur Termvalidierung Nein, es MUSS laut regex ein operator vorkommen. + Multi-Zitat Zitieren
#29 25. Juli 2012 Zuletzt von einem Moderator bearbeitet: 15. April 2017 AW: RegEx zur Termvalidierung vielleicht hilft dir das weiter: PHP: Shunting - yard algo ( Parser ) in PHP , Java und JavaScript implementiert - RR : Board [/ URL ] von php nach java sollte kein all zu schweres unterfangen sein :) + Multi-Zitat Zitieren
#30 25. Juli 2012 Zuletzt bearbeitet: 25. Juli 2012 AW: RegEx zur Termvalidierung Hab jez mal selber einen Parser für Infix to Postix geschrieben. Kann mit +,-,*,/,^ sowie klammern und double zahlen umgehen. Wen es interessiert: http://pasteit.com/18392 // @Murdoc oh, deinen link gar net gesehen naja jez hab ichs selber gemacht^^ trd danke + Multi-Zitat Zitieren
#31 25. Juli 2012 AW: RegEx zur Termvalidierung Weiss jemand welche Priorität Modulo und Logarithmus haben? + Multi-Zitat Zitieren
#32 25. Juli 2012 AW: RegEx zur Termvalidierung was für eine priorität sollen die haben? + Multi-Zitat Zitieren
#33 25. Juli 2012 AW: RegEx zur Termvalidierung in welcher reihenfolge abgearbeitet werden muss. erst potenzen, dann strichrechnung dann +/- wo gehören da Modulo und Log rein^^ + Multi-Zitat Zitieren
#34 25. Juli 2012 Zuletzt bearbeitet: 25. Juli 2012 AW: RegEx zur Termvalidierung modulo und log sind doch funktionen die sich auf bestimmte eingabewerte beziehen und dann einen wert zurückgeben. den behandelst du dann ganz normal ?( vllt meinst du das hier: a mod b * c ich denke mal, man berechnet zuerst b*c und dann a mod b*c das kommt allerdings drauf an, wie man bei dir den modulo eingeben muss. wenn das so aussieht: mod(a,b) isses doch eig klar oder? und log naja da gibt man ja normalerweise log(4+5) ein oder nich? da wir halt der logarithmus von 9 berechnet und damit weitergerechnet. + Multi-Zitat Zitieren
#35 25. Juli 2012 AW: RegEx zur Termvalidierung und was ist mit 5%6 oder Log von 5 zur Basis 2 ? Also die zu erst? + Multi-Zitat Zitieren
#36 25. Juli 2012 AW: RegEx zur Termvalidierung wie sieht mod und log denn bei dir in der eingabe aus? ist die basis vom log fest definiert oder kann der user sie angeben? + Multi-Zitat Zitieren
#37 26. Juli 2012 AW: RegEx zur Termvalidierung Ist variabel. Syntax: Für Log: <value1>L<value2> // Log von value2 zur Basis value1 Für Mod: <value1>%<value2> // value1 Modulo value2 + Multi-Zitat Zitieren
#38 26. Juli 2012 AW: RegEx zur Termvalidierung ok, dann würde ich es so machen wie ich oben schon beschrieben hab. 5%2*3 = 5%6 = 5 (5%2)*3 = 3 Log analog das hängt allerdings auch von deiner definition ab denke ich^^ du kannst es auch so implementieren, dass L und % stärker binden, als alle anderen operatoren. dann wäre das so: 5%2*3 = (5%2)*3 = 3 5%(2*3) = 5%6 = 5 usw^^ ich weiss nicht, wie es am sinnvolsten wäre, aber ich denke das kommt ganz drauf an wie es implementiert wird. 1 Person gefällt das. + Multi-Zitat Zitieren
#39 26. Juli 2012 AW: RegEx zur Termvalidierung Genau das ist ja mein Problem. Ich denke, dass ich deine erste Variante nehme. Danke dafür. + Multi-Zitat Zitieren
#40 26. Juli 2012 Zuletzt bearbeitet: 26. Juli 2012 AW: RegEx zur Termvalidierung normalerweise hat % die selbe gewichtung wie * und / zumindest hab ich das so gemacht. lediglich ^ ist eins höher. das stand so im wiki-artikel log würde ich an deiner stelle als funktion definieren. 1 Person gefällt das. + Multi-Zitat Zitieren
#41 26. Juli 2012 AW: RegEx zur Termvalidierung So hier nun nochmal mein vollendeter Parser: http://pasteit.com/18393 Optimierungsmöglichkeiten? + Multi-Zitat Zitieren
#42 26. Juli 2012 AW: RegEx zur Termvalidierung Code: postfix.contains(new String("("))) -> postfix.contains("(") Ansonsten hat das nicht viel mit Clean Code zu tun, was du da machst. Aber das ist ein eigenes (dennoch sehr wichtiges) Kapitel. Anfangen könntest du hier: Clean Code Developer - Clean Code Developer Ist für professionelle Entwicklung unumgänglich. Je eher du damit anfängst desto besser. (Das geht übrigens auch ohne sich diese bescheuerten Bändchen zu kaufen :lol: ) 1 Person gefällt das. + Multi-Zitat Zitieren
#43 26. Juli 2012 AW: RegEx zur Termvalidierung Bin für jede Hilfe dankbar^^ Wieso ist das nicht clean? Hab schon versucht "sauber" zu arbeiten..^^ + Multi-Zitat Zitieren
#44 26. Juli 2012 AW: RegEx zur Termvalidierung Code: public List<String> parseInfix(String infix) Die Funktion (also der Body) ist viel zu lang. Versuch das irgendwie aufzuspalten. Code: Stack<Character> st = new Stack<Character>(); Variablennamen sind nicht wirklich aussagekräftig. Was für ein Stack ist das? etc etc. Den Rest siehst du relativ schnell, wenn du angefangen hast das Aufzuspalten. Damit muss man sich wirklich beschäftigen ( Clean Code Developer - Clean Code Developer) Bei mir hat das nicht anders ausgesehen (und sieht es noch nicht, wenn ich irgendetwas schnell mache). Allerdings bringt es merkliche Vorteile, wenn du daran weiterarbeiten oder es, wie hier, zeigen willst. + Multi-Zitat Zitieren
#45 26. Juli 2012 AW: RegEx zur Termvalidierung Okay, danke für den Ratschlag Alex, ich werde mal versuchen das umzusetzen! Da ich z.Z. Information Engineering studiere muss ich da wohl so oder so ran, obwohl mein Prof noch schlechter programmiert -.-" + Multi-Zitat Zitieren
#46 29. Juli 2012 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: RegEx zur Termvalidierung Soo, für alle die das hier noch interessiert: Auch wenn es inzwischen eigentlich komplett vom Thema abweicht, ich habe mein ganzes Konzept nochmal etwas überarbeitet. Der Rechner beherrscht jetzt +, -, *, /, ^, % sowie Klammern. Der einzige rechts-assoziative Operator z.Z. ist das unäre '-'. Muss mir da noch was einfallen lassen für die anderen. Habe es jetzt auf 4 Klassen augespaltet: Token: Jeder einzelne "Teil" des Terms wird als Token angelegt. Dieser bekommt einen Typ, 0 für Zahl 1 für Operator 2 für "Klammer auf" 3 für "Kalmmer zu" 4 für unäres '-' Scanner: Zerlegt den als String vorhandenen Term in einzelne Tokens und gibt diese in einer ArrayList wieder. Parser: Konvertiert die "Infix-List" zu einer "Postfix-List" und kann diese auch evaluieren. Ergebnis kommt als Double zurück. Operation: Ein Objekt für Berechnung. Nimmt entweder zwei Zahlen + Operator oder eine Zahl+Operator entgegen und liefert das Ergebnis Sources: Download: zCalc_0.1.zip | www.xup.in Ist aber teilweise unkommentiert und noch etwas durcheinander, mach ich die Tage noch. gn8 + Multi-Zitat Zitieren