Frage

Ich versuche, auf eine Art Code-Generator zu arbeiten Komponententests ein Legacy-C / C ++ blended Projekt zu helfen. Ich finde nicht, jede Art von unabhängigem Tool kann Stubcode von der Deklaration erzeugen. Also entscheide ich mich ein zu bauen, sollte es nicht so schwer sein.

Bitte, jemand kann mir einen Standard-Grammatik Link verweisen, besser durch yacc Sprache beschrieben.

Hope Ich bin nicht Rad neu zu erfinden, bitte helfen Sie mir in diesem Fall aus.

Mit freundlichen Grüßen, Kevin

War es hilfreich?

Lösung

Von der C ++ FAQ Lite :

38.11 Gibt es eine yacc-able C ++ Grammatik?

  

Die primäre yacc Grammatik Sie wollen   ist von Ed Willink. Ed glaubt, dass sein   Grammatik ist vollständig kompatibel mit   ISO / ANSI C ++ Standard , aber er   es nicht rechtfertigen: „Die Grammatik   nicht“, sagt er,‚im Zorn eingesetzt.‘   Sie können die Grammatik erhalten, ohne    Handlungsroutinen oder die Grammatik   mit Blindaktionsroutinen . Sie   auch die entsprechende   Lexer . Für diejenigen, die sind   daran interessiert, wie er erreicht ein   kontextfreie Parser (durch alle drängen   die Mehrdeutigkeiten und eine kleine Anzahl von   Reparaturen später werden nach Parsing getan   abgeschlossen ist), möchten Sie vielleicht lesen   Kapitel 4 von seine These .

     

Es gibt auch eine sehr alte yacc Grammatik   dass keine Unterstützung für Vorlagen,   Ausnahmen, noch Namensraum; plus es   weicht von der Kernsprache in   einige subtile Art und Weise. Sie können das bekommen   Grammatik hier oder hier .

Andere Tipps

Ich habe vor kurzem einige Grammatikdateien für C ++ gefunden (C ++ 1998: ISO / IEC 14882: 1998 und C ++ 2008: ISO / IEC SC22 / WG21 N2723 = 08-0233 ) an der grammarware Website . Die Grammatiken sind in Enahnced BNF, DMS BNF, BGF, SDF und Rascal Notation dargestellt. Es ist schade, aber, dass die C ++ Grammatiken scheinen nicht aktualisiert werden (kein C ++ 2003 oder C ++ 11).

Jareds Link ist die nächste Sache zu einer kontextfreien Grammatik Sie bekommen können. Bestimmte Dinge müssen für später verzögert werden, aber das ist durch einige Argumente besser als die kontextsensitiven Grammatik von C ++.

Um die Dinge noch schlimmer, C ++ 1x signifikant die Grammatik complexify wird. Um so weit wie eine perfekte Parse von C ++ zu bekommen, ein Parser muß genug von dem Standard implementieren, um richtig Überlastung Auflösung zu tun, einschließlich Abzug Template-Arguments, was wiederum die Konzepte Mechanismus, Lambda-Ausdrücke erfordern, und in der Tat fast alle der Sprache, mit Ausnahme von zweistufigen Namen-Suche und Exception-Spezifikationen, die, wenn ich mich recht erinnere, ein Programm erfolgreich zu analysieren nicht die tatsächliche Implementierung benötigen.

In der Tat sind Sie auf halbem Weg zu einem Compiler, wenn Sie C ++ analysieren kann.

Für einen anderen Ansatz, könnten Sie huckepack auf einem vorhandenen Compiler berücksichtigen.

GCC-XML wird "kompilieren" C ++ in XML-Dateien mit vielen nützliche Informationen; es kann für Ihre Zwecke ausreichen.

Leider GCC-XML ist nur ein Viertel gepflegt, und immer es sein kann, arbeiten ... interessant. Viel Glück, wenn Sie gehen diesen Weg.

Ich fand dieses vor kurzem. Ich habe es nicht ausprobiert, so bin nicht sicher, ob es funktioniert. Könnten Sie mehr Informationen über das Werkzeug geben Sie zu entwickeln sind versuchen? Ich heruntergeladen diese Grammatik, weil ich auf einem Instrumenten Werkzeug gerade arbeite, damit ich Abdeckung Infos für meine Unit-Test rel="nofollow Rahmen .

Nach dem Re-Lektüre Ihres Kommentar ...

Ich denke, dieses Tool genau Ihre Bedürfnisse anzupassen.

Unser DMS Software Reengineering Toolkit kann mit einem robusten erhalten werden, voll funktionsfähige C ++ Parser. Sehen http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html Dies baut Äste und Symboltabellen und kann den Typen eines Ausdrucks schließen. DMS ermöglicht eine beliebige Analysen durchzuführen und Transformationen auf dem C ++ Code.

Eine „einfache“ Transformation instrumentiert den Code Testabdeckung zu sammeln Daten; Wir bieten dies als COTS-Tool. Sehen Sie dieses Papier zu verstehen, wie DMS tut es: http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf

EDIT September 2013 (Diese Antwort war immer ein wenig abgestanden): DMS des C ++ Parser / Namensauflösung / Steuerflussanalyse behandelt voll C ++ 11, in der ISO-, GNU- und Microsoft-Varianten. Es wird auch analysieren (und behalten) Quellcode meisten Präprozessor conditionals enthält. Es hat eine explizite Grammatik Antreiben des Parsing-Prozess, im Gegensatz zu GCC oder Clang.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top