Parser der C++ Code ausgibt
-
Hallo liebe c++ Gemeinde,
ich arbeite gerade an einem Projekt in einer Firma mit folgender Aufgabenstellung:
"Betriebsintern wird eine eigene Programmiersprache benutzt. Schreiben Sie zu dieser Programmiersprache einen Parser in C++"
Jetzt wollte ich euch fragen ob ihr einen Parser kennt, der die fertige Syntax dann nachdem ich die Betriebsinterne Sprache in die BNF umgewandelt hab in einen C++ code ausgibt.
Ich danke euch schonmal
MfG
Spearmint
-
mit lex und yacc kann man parser erstellen. bison kann auch sowas, aber ich kenn mich damit nicht aus. und auf die schnelle wirst du das auch nicht lernen können

-
bison ist nur ein yacc Clone von GNU. Analog verhält es sich mit lex und flex. Es gibt desweiteren noch ANTLR und den Boost Spirit LL. Aber das sind alles Parser Generatoren und keine Compiler. Die Codeerzeugung muß man dann noch selbst programmieren.
-
Die Aufgabenstellung ist nicht eindeutig, weil da nicht gesagt ist, welche Informationen der Parser extrahieren soll. Wörtlich genommen ist das nur eine Syntaxprüfung mit dem Ergebnis true oder false, das wird aber nicht gemeint sein, das stünde da.
-
Also wir sollen eben einen Parser programmieren, der die Syntax der Programmiersprache analysiert und einige vorgegebenen Fakten extern in einer Datenbank abspeichert...
Im Moment arbeiten wir hier mit dem Gold Parser Generator wofür es wohl auch eine c++ Engine geben soll, allerdings kommen wir damit nicht allzusehr parat und erhoffen uns daher von hier Hilfe.
Die Syntax der Programmiersprache haben wir wie schon erwähnt analysiert und in die BNF Form umgeschrieben. An sich läuft der Parser schon im Gold-Generator, allerdings fragen wir uns jetzt ob es einen Weg gibt, diesen Code in C++ automatisiert umzuwandeln.
Habt ihr noch ne Idee?
MfG
-
Spearmint schrieb:
Also wir sollen eben einen Parser programmieren, der die Syntax der Programmiersprache analysiert...
Die Syntax der Programmiersprache haben wir wie schon erwähnt analysiert
Also was denn nu?

Wenn du die BNF schon vorliegen hast und (fast) nur checken musst, ob ein vorliegender Text der Syntax deiner Sprache genuegt, dann duerfte Boost::Spirit ein Schneller Weg dorthin sein. Nach ein wenig drumherum werden in Spirit naemlich die Parser in einer an C++ angepassten Form der EBNF definiert. Schau dir dazu am besten mal die Spirit Doku an.
-
Ich verstehe nicht ganz was du jetzt hier in C++ haben willst.
Die Aufgabenstellung verlangt keinen C++ Output, sondern nur einen C++ Parser.
Was der Output sein soll steht da nicht.