2016-04-05 3 views
0

Ich verwendete Bison und Flex für die Generierung eines C Parser mit einer Grammatik.y-Datei. Es kompiliert richtig und so schnell in ungefähr 10 Sekunden. Ich habe meine bison und flex Argumente geändert, um C++ Ausgabe zu erhalten, obwohl es korrekte Ergebnisse erzeugt, aber es dauert ungefähr 1 Minute, um CPP-Ergebnis der Grammatik zu kompilieren und auszugeben. Hat jemand eine Idee, dieses Problem zu lösen? Die Grammatikdatei ist ungefähr 6000 Zeilen.Langsame Kompilation von Bison und Lex Grammatik

Antwort

1

Es ist durchaus üblich, C++ - Kompilierung langsam als Melasse auszuführen, abhängig von der Komplexität des C++ - Codes. Der C++ - Compiler hat viel zu tun, um die Dinge herauszufinden. Viel Arbeit mehr als ein C-Compiler zu tun hat. Ich habe etwas C++ Code, der einige Minuten dauert, und in der Nähe von einem Gig von RAM, um durchzukauen.

Mit einem ROBO-generierten LALR (1) -Parser, der Bison aus einem 6000-Zeilen-Regelsatz spuckt, ist das nicht völlig ein unerwartetes Ergebnis. Sie könnten die Dinge wahrscheinlich beschleunigen, indem Sie die -O -Optimierungsoptionen für die robo-generierte Grammatikdatei löschen, wenn die Laufzeitleistung des Parsers nicht kritisch ist. Das wird die Dinge wahrscheinlich etwas beschleunigen.

Sie könnten auch versuchen, Ihren Compiler zu aktualisieren. gcc hat seine Leistung in den letzten Releases merklich verbessert. Wenn Sie also ein älteres gcc verwenden, sehen Sie möglicherweise eine Verbesserung.

Willkommen bei C++.

+0

Sam, ich bin kein C++ Programmierer, aber verstehen Sie das MSVC-Konzept von vorkompilierten Headern (der Precompiler setzt alle Klassen zusammen), wenn er also alle Typ-/Klassendefinitionen außerhalb der Grammatikdatei hält, würde das nicht beschleunigen Kompilierung als die Klassenversammlung ändert sich nicht? –

+0

@PaulOgilvie: Es ist ziemlich wahrscheinlich, dass vorkompilierte Header für die Bison/Lex-Kompilierung wenig ausmachen würden. –