Frage

Ich habe eine Idee für ein Hobby-Projekt, das einige Code-Analyse und Manipulation durchführt. Dieses Projekt erfordert sowohl die konkrete und abstrakte Syntaxbäume einer bestimmten Quelldatei. Zusätzlich bidirektionale Verweise zwischen den beiden Bäumen wäre hilfreich. Ich möchte die Arbeit zu transkribieren eine Grammatik vermeiden, meine eigenen Lexer und Parser zu konstruieren.

Gibt es ein Standardformat für entweder konkrete oder abstrakte Syntaxbäume beschreiben? Führen Sie eine weit verbreiteten Werkzeugketten Unterstützung Ausgabe von diesen Formaten?

Ich habe keine bestimmte Ziel Programmiersprache im Auge behalten. All populär wird man für einen Prototyp tun, aber ich würde es vorziehen, den ich gut kenne. Python, C #, JavaScript oder C / C ++

Ich mag die Möglichkeit, eine Quelldatei durch ein Werkzeug oder eine Bibliothek und wieder beide Bäume zu laufen. In einer idealen Welt wäre es sinnvoll sein, dieses Tool auf Code auszuführen, wie es von einem Benutzer und seinen fehlertolerant bearbeitet wird. Noch einmal, ich bin einfach, einen Prototyp zu entwickeln versuchen, so sind diese Anforderungen ziemlich lax.

Danke!

War es hilfreich?

Lösung

unser Projekt wir das AST-Metamodell in UML definiert und verwenden ANTLR (Java) die zum Auffüllen Modell. Wir halten auch die Token-Informationen von ANTLR nach dem Parsen, aber wir haben noch nicht versucht, die zugrunde liegende Text-Datei mit Änderungen am Modell vorgenommen zu aktualisieren.

Dies hat eine scheußliche Overhead (in der Infrastruktur, wie Eclipse UML2 / EMF), aber unser Ziel ist es High-Level-Tools für die modellbasierte / Getriebene Entwicklung (MDD, MDA) ohnehin zu verwenden, so dass wir beschlossen, es zu benutzen auf jeder Ebene.

Ich denke, eine unserer Schüler einmal gespielt mit openarchitectureware und verwaltet Änderungen aus der Eclipse-basierten zu erhalten , Editor zurück in den Syntaxbaum erzeugt (nicht auf dem UML-Modell oben verwandt) automatisch, aber ich weiß nicht, die Details darüber.

Sie möchten vielleicht auch sehen ANTLR des Baum Grammatiken.

Andere Tipps

Die Forschungsgemeinschaft beschlossen, dass Graph Austausch war das Richtige zu tun, wenn Informationen von einem Programm-Analyse-Tool zum anderen. Siehe http://www.gupro.de/GXL

In jüngerer Zeit hat die OMG einen Standard für die Vertauschung Abstract Syntax Trees definiert. Siehe http://www.omg.org/spec/ASTM/1.0/Beta1/

Dieses Problem scheint zu bekommen gelöst immer und immer wieder. Es gibt ein halbes Dutzend „-Tool Bus“ Vorschläge im Laufe der Jahre dass alle gelöst es, mit niemand jemals die Industrie überholt. Das Problem ist, dass a) es ist leicht Ast darstellt mit jede Art von nestbarer Notation [Klammern wie Lisp,  wie XML, ...], damit die Menschen leicht ihre eigene Lösung rollen, und b) für ein Werkzeug, um eine AST mit einem anderen auszutauschen, sie beide haben im Wesentlichen zu vereinbaren, was der AST-Knoten bedeuten; aber die meisten Äste sind eher zufällig aus dem jeweiligen abgeleiteten Grammatik / Parsing-Technologie von jedem Werkzeug verwendet wird, und es gibt fast immer Uneinigkeit darüber, dass zwischen den Werkzeugen. Also, ich habe diesen Austausch ASTs Bedeutung nur sehr wenige Werkzeuge gesehen.

Wenn Sie ein Hobby, was tun, ich mit einem Lisp-like halten würde Codierung von Bäumen, wobei jeder Knoten hat das folgende Format:     (...) Es ist einfach zu erzeugen und leicht zu lesen.

Ich arbeite an einem professionelles Werkzeug zu manipulieren, Programme . Wenn wir aus dem AST haben drucken, tun wir das oben. meistens Einzel Äste sind viel zu kompliziert, um in der Praxis aussehen, so dass wir so gut wie nie aus dem gesamten AST drucken, besten ein Knoten und ein paar Kinder tief. Unser Tool nicht austauschen Äste mit irgendjemandem (oben genannten Gründen sehen :) aber tun genau Fein es im Speicher bauen, tun whizzy Dinge mit ihm zur Analyse Gründen oder Transformation Gründen und dann entweder nur deleteing es (keine Notwendigkeit, sie überall zu senden) oder Regenerieren der Originalsprache Text aus dem Baum. [Letzteres bedeutet, dass Sie anti-Parsing oder „pretty“ müssen Technologie]

Spezifische Normen sind eine Erwartung, während allgemeinere Zweck Standards auch geeignet sein können. Ira Baxter bereits erwähnt GXL und ASTM , einen anderen, obwohl es eher Ziele eine bestimmte Art von Programmiersprache (Logik Sprachen), ist Standard für die semantische / konzeptionelle graph , bekannt als ISO-IEC 24707 2007 .

Kein Standard auf seine eigene, sondern ein Papier über diese Angelegenheit: Auf dem Weg zu Tragbarer Source Code Repräsentationen Verwendung von XML .

Ich weiß nicht effektiv genutzt Standard (in diesem Bereich, das ist immer hausgemachte Kochen überall), ich bin auch nur an diesem Thema interessiert.

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