2011-12-15 14 views
5

Uso le classi Lexer e Parser generate dallo strumento ANTLR (targeting C#). Supponiamo che abbia analizzato del codice e ottenuto un albero AST per questo. Cosa succede se una parte del mio codice iniziale è cambiata e voglio aggiornare solo le parti corrispondenti dell'albero? C'è un modo comune per farlo? Ad esempio una riga di codice è stata inserita all'interno del corpo di alcune funzioni. E voglio ricostruire solo la parte dell'albero che rappresenta questa funzione e aggiornare le posizioni dei successivi token di funzioniAggiornamento albero AST ANTLR

+0

Dopo aver cambiato l'albero, cosa vuoi fare dopo? Presumo, rigenerare il testo sorgente. Con commenti? Layout originale? ...? –

+0

Voglio solo avere un albero AST pertinente. Diciamo che voglio gestire l'intellisense per alcuni IDE – Natalia

+0

Come sapresti quali parti del tuo AST sono state effettivamente influenzate dal cambiamento? – stryba

risposta

1

Ci sono alcuni progetti là fuori che fanno ciò che si potrebbe desiderare di realizzare. Ma non so se ANTLR lo supporta. Si può dare un'occhiata a: http://en.wikipedia.org/wiki/Incremental_compiler

Per l'evidenziazione della sintassi solo proposta, suggerisco di utilizzare l'espressione regolare per il diverso token nella sintassi. (Se aggiorni solo la linea su cui stai lavorando non dovresti avere problemi di prestazioni.)