Quali strutture dati vengono utilizzate per rappresentare il codice sorgente dai programmi che eseguono trasformazioni da sorgente a origine?

3

Per i programmi che leggono nel codice sorgente, trasforma quel codice sorgente e poi riscrivi il codice sorgente trasformato in modo che possa essere letto e modificato dagli esseri umani, che tipo di strutture dati sono tipicamente usate per rappresentare il codice sorgente con i suoi dettagli testuali? Esiste una struttura dati "da manuale" standard per questo? (ad esempio qualcosa di analogo all'AST per un'analisi più tradizionale)

Alcuni esempi dei tipi di programmi che ho in mente sono i molti strumenti basati su clang per trasformare C e C ++, gli strumenti Python per tradurre Python 2 in Python 3 ei molti strumenti per trasformare Go.

Credo che la risposta potrebbe essere semplice come un AST con extra-dati (ad esempio spazi bianchi, parentesi) sui nodi non foglia, ma non sono sicuro. Sembra che potrebbe essere più complicato dal momento che la struttura deve negoziare la tensione tra il mantenimento dei dettagli testuali e la possibilità di trasformazioni di codice sorgente di alto livello.

    
posta Praxeolitic 15.10.2016 - 21:20
fonte

1 risposta

6

Penso che potresti essere interessato a Concrete Syntax Tree (aka Parse Tree) vs. Abstract Syntax Tree.

L'albero di sintassi concreto cattura i minimi dettagli della comprensione dei parser della grammatica applicata al codice sorgente di input. In particolare, le parole chiave, le parentesi, gli spazi bianchi che sono normalmente rimossi sarebbero presenti in un Concrete Syntax Tree.

(Se si utilizza uno scanner o un tokenizer, la cattura degli spazi bianchi può o non può essere persa per il parser: un parser che funziona direttamente sul testo (ad esempio senza uno scanner) vedrà necessariamente molto carattere.)

Gli parser manifestano la struttura sintattica concreta con lo stato interno. Alcuni parser genereranno tutti questi dettagli, mentre altri invece produrranno solo versioni astratte. Gli alberi syntnax concreti sono considerevolmente più grandi degli alberi sintattici astratti per la stessa fonte.

    
risposta data 15.10.2016 - 22:36
fonte

Leggi altre domande sui tag