Erfahrungen mit boost::spirit und großen Grammatiken
-
[Gehören boost-Fragen hierher?]
Hallo,
ich schaue mir momentan die Spirit-Bibliothek an, um damit den Parser für eine komplette Programmiersprache zu implementieren. Die Programmiersprache ist relativ komplex (aktueller Stand der Sprachreferenz: über 130 Produktionen, inklusive Symbolen). In Anbetracht der Spirit-FAQ Compilation Time stellt sich mir die Frage, ob Spirit zur Implementierung einer solchen Grammatik verwendet werden sollte. Ich möchte keine Compilierzeit von mehr als 30 Minuten allein für das Parser-Framework in Kauf nehmen müssen. Das Aufteilen in unterschiedliche Compilereinheiten ist nur sehr begrenzt möglich.
Konkret meine Frage: Sollte ich Spirit nehmen? Ist die Compilezeit vielleicht gar nicht unbedingt so schlimm? Oder sollte ich sie in Kauf nehmen?
Als Alternativen wäge ich Parsergeneratoren ab (GOLD ...) oder die Implementierung per Hand, dann allerdings als Recursive Descent Parser, was massive refaktorisierung der Grammatik bedeuten würde.
-
Also ich denke einen handgeschriebenen Parser bei einer komplexen Grammatik zu verwenden bedeutet noch mehr Zeitaufwand.
Ich denke spirit ist dafür optimal geeignet und schließlich brauchen ja nur bei Veränderungen an den Header-Dateien die Dateien neu übersetzt werden.Und schließlich kannst du sicherlich die Grammatik auf verschiedene Header-Dateien aufteilen (wie in der FAQ beschrieben, am besten Zugriff dann mit forward-Referenzen).
-
Danke für Deine Antwort.
Ich glaube ich habe mich in Spirit verliebt. Ich will ein Kind von Spirit. Ich glaube, ich würde es auch verwenden, wenn das Kompilieren 24 Stunden bräuchte.
-
Schau mal im Artikelforum des Forumsmagazin (weiter unten) nach, da hat schon jemand einen Artikel zu Spirit geschrieben.