Ci sono molti modi per capire come sono costruiti i compilatori. Nella più semplice definizione i compilatori sono programmi che prendono il codice sorgente e lo convertono in un modulo valido eseguibile in una forma o in un'altra (linguaggio VM o macchina).
Quindi per convertirli, deve prima capirli. È come il programma di compilazione che scrivi deve comprendere con successo milioni di possibili combinazioni di programmi validi che possono essere scritti nella lingua. Ecco perché per capirli deve ...
a. Analizzali : questo passaggio è composto da molti passaggi. Dal momento che il programma può contenere dati e altre cose. Deve prima riconoscere i token lessicali validi (quelli che chiami parole chiave). Per fare ciò è necessario leggere i caratteri uno per uno e quindi confrontarli con un modello. È così, come riconosci che una frase è una dichiarazione inglese valida? Prendi le regole della grammatica inglese e applica al vocabolario in questione.
Una cosa simile accade all'interno dei compilatori. C'è qualcosa chiamato come grammatica della lingua! Che definisce fondamentalmente ciò che è sintatticamente legale. Ora scrivere un parser per ogni grammatica che viene giù è laborioso manualmente e non pratico. Quindi ci sono generatori di parser. Funzionano, prendendo una grammatica e generando un parser per questo. Come appare il parser? Ci sono molti modi per farlo, partendo dall'uso delle espressioni regolari alla lettura di ciascun personaggio uno per uno e facendo corrispondenze fino a quando si incontra un token lessicale valido.
b. Dai un senso a ciò che è stato letto : puoi formulare una frase grammaticalmente valida, ma non ha senso. La stessa cosa deve essere controllata anche in un compilatore. Cosa significa la notazione della sintassi ... Questo non è altro che semantica.
c. Ora cosa significa, ora vuoi dire lo stesso in altre lingue : qual è l'equivalente di ciò che ho appena analizzato in Assembly. È come se tu ora analizzassi e riconoscessi perfettamente diciamo un'istruzione if. Ora lo prendi convertendolo in equivalente di quello in assembly.
d. Nel frattempo ottimizza, cosa puoi ottimizzare : se sono disponibili ottimizzazioni di codice ragionevoli, fallo.
Questa è una breve panoramica dei compilatori che lavorano in linguaggio comune. Naturalmente c'è molto da fare. Puoi scrivere dei volumi (e ci sono dei volumi, già scritti).
Che cosa dovresti fare:
- Leggi alcune buone teorie sui compilatori. Raccomandato il libro del drago.
- Scarica un compilatore opensource. Abbondanza disponibile.
- Prova a mappare ciò che hai letto dal libro al codice.
- Rompa qualcosa e vedi come funziona.
- Aggiungi qualcosa e osserva come funziona.
Quindi:
- Scrivi qualcosa da solo.
- Cerca problemi interessanti da risolvere e risolverli.
- Sfoglia gli elenchi di bug in quei progetti open source, prova a inviare loro le patch.
Ricorda che puoi leggere molto, ma testerai solo quando scrivi il codice. Quindi scrivi il codice. Fallire spesso, imparare da esso. Usa il feedback ... Ripeti il ciclo di nuovo.