Domanda

Ho un'idea per un progetto hobby, che esegue alcune analisi del codice e la manipolazione. Questo progetto richiederà sia l'albero sintattico astratto di un dato file sorgente concreta e. Inoltre, i riferimenti bidirezionali tra i due alberi sarebbe utile. Vorrei evitare il lavoro di trascrivere una grammatica per costruire il mio lexer e parser.

C'è un formato standard per la descrizione sia alberi di sintassi concreti o astratti? Fare qualsiasi diffuso supporto catene strumento output di questi formati?

Non ho un particolare linguaggio di programmazione obiettivo in mente. Chiunque popolare farà per un prototipo, ma preferirei che conosco bene:. Python, C #, Javascript, o C / C ++

Mi piacerebbe la possibilità di eseguire un file sorgente attraverso uno strumento o una libreria e tornare entrambi gli alberi. In un mondo ideale, sarebbe pratico per eseguire questo strumento sul codice mentre viene modificato da un utente ed essere tolleranti di errori. Ancora una volta, sto semplicemente cercando di sviluppare un prototipo, in modo che questi requisiti sono abbastanza permissive.

Grazie!

È stato utile?

Soluzione

nostro progetto abbiamo definito il metamodello AST in UML e utilizziamo ANTLR (Java) per popolare il modello. Noi manteniamo anche le informazioni gettone da ANTLR dopo l'analisi, ma non abbiamo ancora provato ad aggiornare il file di testo sottostante, con le modifiche apportate al modello.

Questo ha un overhead orribile (in infrastrutture, come ad esempio Eclipse UML2 / EMF), ma il nostro obiettivo è quello di utilizzare gli strumenti di alto livello per il modello-base / driven development (MDD, MDA) in ogni caso, quindi abbiamo deciso di usarlo ad ogni livello.

Credo che uno dei nostri studenti, una volta giocato con OpenArchitectureWare e sono riuscito a ottenere cambiamenti da a base di Eclipse il , generato editor di nuovo nel albero di sintassi (non legati al modello UML sopra) in modo automatico, ma io non conosco i dettagli su questo.

Si potrebbe anche voler guardare grammatiche albero di ANTLR.

Altri suggerimenti

La comunità di ricerca ha deciso che lo scambio grafico era la cosa giusta da fare quando si spostano le informazioni da uno strumento di analisi programma all'altro. Vedere http://www.gupro.de/GXL

In tempi più recenti, l'OMG ha definito uno standard per l'interscambio Abstract Syntax Trees. Vedere http://www.omg.org/spec/ASTM/1.0/Beta1/

Questo problema sembra avere risolto più e più volte. C'è una mezza dozzina di "bus" strumento di proposte fatte nel corso degli anni che tutto risolto, senza che nessuno mai sorpasso del settore. Il problema è che a) è facile rappresentare AST utilizzando qualsiasi tipo di notazione annidabile [parentesi come LISP,  come XML, ...] così la gente rotolare la propria soluzione facile, e b) per uno strumento per scambiare un AST con un altro, essi entrambi sono d'accordo essenzialmente su ciò che significano i nodi AST; ma la maggior parte AST sono piuttosto derivano accidentalmente dal particolare grammatica / tecnologia di analisi utilizzato da ogni strumento, e c'è quasi sempre disaccordo su che tra gli strumenti. Così, ho visto pochissimi strumenti che AST cambio significato.

Se stai facendo una cosa il mio hobby, mi piacerebbe restare con un lisp-like codifica di alberi, dove ogni nodo ha il seguente formato:     (...) La sua facile da generare, e di facile lettura.

Io lavoro su un professionale per manipolare i programmi . Se noi hanno stampare l'AST, facciamo quanto sopra. Per lo più individuale AST sono troppo complicati da osservare nella pratica, così abbiamo quasi mai stampare l'intera AST, nel migliore dei casi un nodo e alcuni bambini profonde. Il nostro strumento non scambia AST con nessuno (vedi sopra ragioni :) ma fa proprio bell'edificio in memoria, fare le cose con esso whizzy per motivi di analisi o motivi trasformazione e quindi o solo deleteing esso (non è necessario inviare da nessuna parte) o rigenerare il testo in lingua originale dall'albero. [Quest'ultimo significa che è necessario anti-analisi o "prettyPrinting" la tecnologia]

Norme specifiche sono un'aspettativa, mentre più standard di uso generale possono anche essere opportuno. Ira Baxter già accennato GXL , e RDF possono essere aggiunte anche, solo che richiederebbe un'ontologia appropriato ed è più orientata verso semantica di sintassi. Ancora può essere un'opzione per indagare.

Per norme specifiche, Ira Baxter già menzionato ASTM , un altro, anche se piuttosto bersagli un particolare tipo di linguaggio di programmazione (linguaggi logici), è uno standard per la semantico / concettuale grafico , noto come ISO-IEC 24707 2007 .

Non è uno standard di per sé, ma un documento su quella materia: Verso portatile Source Code Rappresentanze Utilizzando XML .

Non conosco nessuno standard utilizzati in modo efficace (in questo settore, che è sempre fatta in casa cucinare ovunque), io sono solo anche interessati a questo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top