2013-01-07 6 views
7

Sono stato in grado di utilizzare l'API AST di CDT per analizzare correttamente il codice sorgente. La mia domanda riguarda il contrario: come posso creare un C AST a livello di codice e poi dirgli di scrivere se stesso in un file? Ho visto la classe ASTWriter (ma questa è interna) e non riesco a trovare alcun tutorial o documentazione sulla costruzione dell'AST reale.Utilizzo dell'API Abstract Syntax Tree di CDT per generare/scrivere codice C?

Ho trovato un documento che va oltre l'idea di ciò che voglio fare: Generating Rewritable Abstract Syntax Trees che fa sembrare che generare codice sarebbe facile se potessi costruire l'albero e dire "scrivi te stesso". Ciò è possibile in CDT e in che modo è possibile iniziare (preferibilmente senza metodi deprecati/interni?)

+0

Sei più interessato a una soluzione basata su CDT o a una soluzione che ti consenta di creare/trasformare AST arbitrari per C e quindi stampare il risultato? –

+0

A causa del cambiamento di messa a fuoco sul progetto di cui è stata generata questa domanda, questa non è più una necessità maggiore. Se lo facciamo rivisitare, preferirei una soluzione basata su CDT (come la soluzione di refactoring menzionata da Eugene) poiché il progetto è un plugin basato su Eclipse. –

risposta

1

Si consiglia di iniziare con l'esplorazione di CRefactoring e delle sottoclassi (ad esempio ExtractFunctionRefactoring).

Ci sono molti problemi che quadro CDT refactoring cerca di affrontare:

  1. Facciamo l'anteprima all'utente le modifiche prima di poter realmente li impegna al codice sorgente.
  2. Operare su un errore di file non salvato (ad esempio, ristrutturare il codice nell'editor di origini non salvato)
  3. Rispettare le impostazioni di formattazione del codice utente in un codice appena generato.
  4. Transazioni annullabili che coprono diversi file di origine.

Sono sicuro che anche se non hai bisogno di tutte quelle funzioni, queste due classi dovrebbero essere un buon punto di partenza.

+0

Grazie. Il mio problema è più una generazione unica di un file sorgente, quindi non pensavo nemmeno al refactoring, ma nelle classi che hai pubblicato ho trovato una classe promettente chiamata INodeFactory. Combinato con http://wiki.eclipse.org/images/b/be/PTPUserDev2012_Ruegg_Refactoring.pdf I (spero!) Riesco a capirlo da qui. –

2

Quello che vi serve è usare un ASTWriter:

ASTWriter writer = new ASTWriter() 
String code = writer.write(myAST); 

Quindi è possibile scaricare la stringa in un file che è nel contesto di plugin di risorse Eclipse.

Problemi correlati