Sto lavorando su un compilatore di giocattoli (per un linguaggio semplice come PL / 0) e ho il mio lexer attivo e funzionante. A questo punto dovrei iniziare a lavorare sulla costruzione dell'albero di analisi, ma prima di iniziare mi chiedevo: quante informazioni si possono raccogliere solo dalla stringa di token? Ecco cosa ho raccolto finora:
- Si può già fare l'evidenziazione della sintassi avendo solo la lista dei token. I numeri e gli operatori si colorano di conseguenza e anche le parole chiave.
- Anche l'autoformattazione (indentazione) dovrebbe essere possibile. Come? Specificare per ogni tipo di token quanti spazi bianchi o caratteri di nuova riga dovrebbero seguirlo. Inoltre, quando stampi token, modifica una variabile di allineamento (quando la stampante di codice legge "{" incrementa la variabile di allineamento di 1 e decrementa di 1 per "}". Ogni volta che inizia a stampare su una nuova riga, la stampante di codice si allineerà in base a questo variabile di allineamento)
- Nelle lingue senza subroutine nidificate si può ottenere un elenco completo di subroutine e la loro firma. Come? Basta leggere ciò che segue dopo la parola chiave "procedura" o "funzione" fino a quando non si preme il primo ")" (questo dovrebbe funzionare bene in un linguaggio Pascal senza subroutine nidificate)
- In linguaggi come Pascal puoi anche determinare le variabili locali ei loro tipi, dato che sono dichiarati in un posto speciale (ok, non puoi gestire anche l'inizializzazione, ma puoi analizzare sequenze come: "var a, b, c: intero ")
- Può anche essere possibile il rilevamento di funzioni ricorsive, o anche una rappresentazione grafica di quale subroutine chiama chi. Se si riesce a identificare il corpo di una funzione, si può anche cercare se ci sono menzioni di nomi di altre funzioni.
- Raccolta di statistiche sul codice, come il numero di linee, istruzioni, subroutine
EDIT: ho chiarito perché penso che alcuni processi siano possibili. Mentre leggo commenti e risposte mi rendo conto che la risposta dipende molto dal linguaggio che sto analizzando.