So wie man halt in einer BNF rekursiv die ganze Grammatik von den einfachsten Strukturen nach oben aufbaut, wendest du einfach die Produktionsregeln beim Parsen "rückwärts" an.
Mathematische Formeln sind da noch eine extrem einfache Grammatik.
Du hast NUR Operanden und Zeichen, die diese Operanden gruppieren.
Das können NUR Klammern, oder andere Operatoren, oder Zeilenbeginn und -ende sein.
Da alle einfachen Rechenoperationen binäre Operatoren sind, matcht man auf den simpelst möglichen Ausdruck und ersetzt von innen nach aussen, bis keine weitere Ersetzung möglich ist. Das coole ist ja grade, dass man bei binären Operatoren immer 3 Matching-Groups hat.
Wenn man ganz schlau sein will, wendet man die Regex dann auch noch in einer solchen Reihenfolge an, dass Gesetze wie Punkt- vor Strichrechnung beachtet werden und voila...there we go...wir haben einen Parser für Ausdrücke mit oder ohne Klammern und beliebig vielen Operanden in beliebiger Reihenfolge.
Die einzige elegantere Lösung, die mir da noch einfällt ist ein Syntaxbaum, oder ein Compiler in einer funktionalen Programmiersprache wie Haskell...aber das wäre mit Todessternen auf Spatzen geschossen in dem Fall hier
— geändert am 23.09.2011, 11:55:01
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.