Parser-generator für mathematische Funktionen

Status
Nicht offen für weitere Antworten.

DaDave

Mitglied
Hallo zusammen,

ich werde in den nächsten Monaten meine Bachelor-Arbeit schreiben und soll in Java ein Programm schreiben was mathematische Ausdrücke auswertet.
Auch durchaus komplexere Sachen wie z.B. "(5*23.9+x)-44/2.6" (natürlich mit vorher definierten x). Es sollen auch Funktionen und variablen abgespeichert werden können.

Jetzt ist mir ja schon klar das ich sinnvoller Weise einen Paser-Generator benutzen sollte. Allerdings ist das Angebot doch recht groß. (JavaCC, ANTLR, SableCC, etc.)

Und überall ist von einem AST die Rede, welcher erstellt wird. Da ich allerdings wirklich auf Speicherplatz und Performanz achten muss wäre mir eine Art ByteCode lieber...

Habt Ihr irgendwelche Ideen welcher Parser-Generator dafür am sinnvollsten wäre?
Oder sich gut oder eher nicht dafür eignen würde?


Das wär echt schon eine große Hilfe!

Danke und mit freundlichen Grüßen
DaDave
 

DaDave

Mitglied
erstmal danke an diggaa1984 für den Tipp^^

und dann zu dem ByteCode:

ich stelle mir darunter vor das ich mir eine Codierung ausdenke oder nutze um dann die geparsten Ausdrücke oder variablen Definition im langfristigen Speicher ab zu legen.
Und dieser Code kann dann ohne weiteres verändern oder analysieren von einer Stackmaschine abgearbeitet werden...wenn er benötigt wird....
 

0x7F800000

Top Contributor
ich werde in den nächsten Monaten meine Bachelor-Arbeit schreiben und soll in Java ein Programm schreiben was mathematische Ausdrücke auswertet.
Bachelor arbeit in was? Wenn das Informatik ist, dann ist die Diskussion imho unangebracht, weil ja eigentlich du uns erzählen solltest, wie man am besten parser generatoren schreibt, nicht andersrum ;)
Wenn das Mathe sein soll, dann verstehe ich nicht ganz, wieso du dich um das parsen selbst kümmern musst? Für mathematiker gibt's doch tonnen verschieden gearteter numerischer- und CAS-systeme, die manchmal mehr oder weniger brauchbar sind: wenn du irgendein spezielles Algo implementieren willst, dann nimm einfach die passendste mathematische DSL und gut ist...
Auch durchaus komplexere Sachen wie z.B. "(5*23.9+x)-44/2.6" (natürlich mit vorher definierten x). Es sollen auch Funktionen und variablen abgespeichert werden können.
das ist noch nicht wirklich "komplex", wie man sowas baut hat Beni mal in der FAQ beschrieben, solche Ausdrücke kann man auch rein intuitiv als erstsemestler ohne jegliche compilerbau-vorkenntnisse wunderbar parsen.
Jetzt ist mir ja schon klar das ich sinnvoller Weise einen Paser-Generator benutzen sollte. Allerdings ist das Angebot doch recht groß. (JavaCC, ANTLR, SableCC, etc.)
Was ist nochmal das Ziel? Wie gesagt, wenn es um Parsergeneratoren an sich geht, ist verwendung eines fertigen irgendwie bisschen witzlos imho :bahnhof:
Und überall ist von einem AST die Rede, welcher erstellt wird.
Selbstverständlich, darum geht's ja beim Parsen: aus einer Kette von Tokens ein AST herzustellen. Was wolltest du denn stattdessen?
Da ich allerdings wirklich auf Speicherplatz und Performanz achten muss wäre mir eine Art ByteCode lieber...
solang der parser in linearer Zeit durch den code durchrennt, ist die performance brutalst egal (bei diggaa1984 ist der Ansatz wesentlich mächtiger, aber leider nicht mehr linear, da muss man schon genauer hinschauen ;) )
Das mit der performance ist so: wenn du fleißig bist und 1000 zeilen code schreibst, ist der parser nach 0 ms fertig. Wenn du ganz fleißig bist, und 10000 zeilen code schreibst, dann ist der parser immer noch nach ungefähr 0ms fertig.... Alles was du jemals manuell eintippen kannst, sollte den parser eigentlich nicht überfordern. Worauf man stattdessen lieber achten sollte, ist eine vernünftig ausformulierte grammatik, bei der die produktionen irgendeinen anschaulichen Sinn haben, damit man die eigentliche funktionalität leichter implementieren kann, wenn der parser-generator mit dem wilden herumjonglieren fertig ist.

und dann zu dem ByteCode:

ich stelle mir darunter vor das ich mir eine Codierung ausdenke oder nutze um dann die geparsten Ausdrücke oder variablen Definition im langfristigen Speicher ab zu legen.
Und dieser Code kann dann ohne weiteres verändern oder analysieren von einer Stackmaschine abgearbeitet werden...wenn er benötigt wird....
ööhm, das war jetzt noch weniger verständlich? ???:L
 
Zuletzt bearbeitet:

DaDave

Mitglied
hehe, also fange ich nochmal von vorne an :)

ich schreibe eine Bachelorabrbeit in Informatik...
Und klar sollt ihr hier nicht meine arbeit schrieben :D


bin leider durch nachholveranstaltungen etwas hinter dem Zeitplan.. :(
ich soll so eine Art programmierbaren Taschenrechner programmieren...
...der halt eine Umfangene Bibliothek von Funktionen besitzt und sich auch welche hinzufügen lassen etc..
Die Abneigung gegen die ASTs ist eine der vorlagen..die ich erfüllen muss...
Daher dachte ich halt an eine Art ByteCode :rtfm:

Ich bräuchte nur ein bischen Hilfe bei der Auswahl der des Parser-generators... :autsch:
 

0x7F800000

Top Contributor
hehe, also fange ich nochmal von vorne an :)
öhm, ja, hallo erstma^^
Die Abneigung gegen die ASTs ist eine der vorlagen..die ich erfüllen muss...
Daher dachte ich halt an eine Art ByteCode :rtfm:
Informatik Bachelor... Okay, und was hast du dir zum Compilerbau alles angehört? So wie ich das grad verstehe, sollst du eine komplett neue sprache für mathematische berechnungen entwerfen, und einen compiler dafür konstruieren, der code als eifache textdatei entgegennimmt, lext, parst, in AST umwandelt, den AST lange und kompliziert umwurschtelt und optimiert, in irgendeinen anderen Baum übersetzt, und das ganze am ende als Bytecode (etwa für die JVM?) ausgibt. Geile Sache. Wenn du das hinbekommst, rast es wirklich allen Interpretern davon, das ist eine durchaus hübsche idee...

Ein üblicher Fehler, der bei praktisch jeder "mathematiker-programmiersprache" auftritt: die fangen mit dem design der bibliothek an, statt sich gedanken über die sprache selbst zu machen. Am ende kommen dann irgendwelche behinderte Konstrukte heraus, die Syntaktisch etwa so "hochentwickelt" wie bat-stapelverarbeitungsanweisungen sind, dafür aber irgendwelchen krassen scheiß für die algebraische forschung können.
Das ist eigentlich auch ok, solange man diese sachen dann wirklich lediglich als "programmierbare taschenrechner" betrachtet: als Programmiersprachen sind sie meistens zum wegschmeißen... for-abfrage dort if-schleife da, und das war's schon :autsch:

Okay, wie du aus der Compilerbau Vorlesung evtl. weisst, fürhrt meistens kein Weg um AST's drumherum, als zwischenschritt werden sie doch überall benötigt... Was ist dann eigentlich deine frage dann: schreib den parser-generator entweder selbst, oder nimm halt AntLR oder so... AST's produzieren die alle. Automatische Übersetzung in bytecode ist afaik bisher zukunftsmusik und aktuelles forschungsgebiet. Also, ein Programm, das dir aus einer grammatik einen fertigen compiler anfertigt, solltest du nicht finden können, höchstens irgendwas experimentelles unausgereiftes & unbrauchbares... Sowas muss man afaik leider wohl selbst erledigen.
 

diggaa1984

Top Contributor
@ 0x7F800000:
manchmal weiss ich echt nich ob ich bei deinen Beiträgen lachen oder heulen soll, aber der hier war noch zum lachen :D ... die sind immer so derbe direkt und nicht durch die Blume :D

aber danke fürs lob wegen mächtigkeit und nich vorhandener performance .. ich hoffe dass wirft mich später nich so zurück ^^
 

0x7F800000

Top Contributor
@ 0x7F800000:
manchmal weiss ich echt nich ob ich bei deinen Beiträgen lachen oder heulen soll, aber der hier war noch zum lachen :D
öhm, echt? ja, dann lieber lachen, das ist gut für die gesundheit ;)
die sind immer so derbe direkt und nicht durch die Blume :D
die Aussage war eigentlich völlig neutral gemeint. O(n³) ist nun mal nicht linear, und wesentlich mächtiger ist es, weil es komplett alle kontextfreie grammatiken erschlägt, was ich, wie gesagt, ziemlich cool finde. Hab's einfach gesagt so wie es ist ;)
aber danke fürs lob wegen mächtigkeit und nich vorhandener performance .. ich hoffe dass wirft mich später nich so zurück ^^
das hoffen wir doch ;) Aber wie extrem lange soll so eine Logische Formel schon werden? Irgendwann passt sie doch nicht mehr ins hirn, da sind die menschlichen kapazitäten etwas schneller erschöpft, als etwa bei java-code, oder? Daher wird es wohl auch mit O(n³) locker hinhauen ;) Und wenn das Programm eh spezialisiert und selten, und ohne viel konkurrenz ist, dann werden sich die forscher ja wohl evtl. auch paar minuten gedulden können, wenn's wirklich sein muss :)
 

diggaa1984

Top Contributor
ja das mit der blume bezog sich eigentlich zB auf den beitrag vor meinem :D

der kommentar zu meinem algo war ja auch völlig neutral und so, das wollte ich gar nich anzweifeln

ich bin sogar am überlegen ob ich es ermögliche, dass der Nutzer selbst ne jar oder ne .class angeben kann, in welcher er nen eigenen Parser unterbringt. Und im Programm kann er wählen zwischen dem langsamen CYK-Algorithmus oder seiner eigenen Variante :D Fänd ich n fetziges Feature, auch wenns gar nich gefordert wird, aber zumindest wird das Programm dann nur noch attraktiver
 
Zuletzt bearbeitet:

Landei

Top Contributor
Schau dir den Shunting-Yard-Algorithmus an, der macht aus Infix-Notation einen Stack mit Postfix-(oder Umgekehrt Polnische Notation)-Notation, also:
(a + b) * (c + d) wird zu a b + c d + *, Klammern fallen alle weg, und man kann dann ganz einfach von links nach rechts durchrechnen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
W CSV-Parser Allgemeine Java-Themen 1
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
offi EDIFACT Parser Allgemeine Java-Themen 7
Neumi5694 Parser - Zerlegen verschachtelter Funktionen Allgemeine Java-Themen 2
RalleYTN Lua Parser? Allgemeine Java-Themen 2
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
Thallius Simple JSON Parser Error null Allgemeine Java-Themen 6
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
F Parser Framework/Plugin für Datei in Custom-Format Allgemeine Java-Themen 2
H Best Practice Ideensuche: Flexibel hinzufügbare eigene Parser Allgemeine Java-Themen 6
J Best Practice Parser für Taschenrechner Allgemeine Java-Themen 4
V String nicht im String literal pool speichern - Parser Allgemeine Java-Themen 30
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
H Kleiner HTML Parser (Facharbeit) Allgemeine Java-Themen 11
G REST Client / URL Parser Allgemeine Java-Themen 2
F ical4j Parser Allgemeine Java-Themen 7
M String tokenizer / parser Allgemeine Java-Themen 3
M Übergabe mehrer Files an selbstprogrammieren Parser Allgemeine Java-Themen 4
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
S HTML => DOM - Welcher Parser für meine Zwecke? Allgemeine Java-Themen 3
E Parser basteln mit CUP Allgemeine Java-Themen 6
T HTML Parser Allgemeine Java-Themen 7
R Script parser Allgemeine Java-Themen 6
T Mathematik Parser Library? Allgemeine Java-Themen 4
N DOM Parser Allgemeine Java-Themen 2
J Parser / Scanner / Tokenizer gesucht Allgemeine Java-Themen 3
S Textfeld Parser sinnvoll? Allgemeine Java-Themen 3
B Parser für logische Ausdrücke Allgemeine Java-Themen 9
D CSV Parser Allgemeine Java-Themen 12
T Webseite (HTML) Parser gesucht Allgemeine Java-Themen 8
R Parser: Datei auslesen, Datei erstellen - Geschwindigkeit Allgemeine Java-Themen 16
T Parser für BBCode? Allgemeine Java-Themen 3
S html parser Allgemeine Java-Themen 3
G Parser erstellen Allgemeine Java-Themen 12
T Suche BBCode-Parser in Java Allgemeine Java-Themen 2
A Parser für \ Allgemeine Java-Themen 12
J Java Parser Tool verfügbar? Allgemeine Java-Themen 3
A api latex bzw. latex parser Allgemeine Java-Themen 2
B tipps zum schreiben eines mathematischen parser Allgemeine Java-Themen 13
Buroto Arrays generator Allgemeine Java-Themen 10
E Random Generator Allgemeine Java-Themen 6
1 Name Generator für Videos Allgemeine Java-Themen 1
S QR-Code generator Allgemeine Java-Themen 2
A Audio Rechteck Generator Allgemeine Java-Themen 5
borobudur MVC Model Generator Allgemeine Java-Themen 2
boxi Registartions CodeBild generator Allgemeine Java-Themen 2
G Scanner-Generator zur Erkennung von Java Tokens Allgemeine Java-Themen 7
B Von neumann generator Allgemeine Java-Themen 7
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben