La domanda chiave è davvero: a quale livello? Ho intenzione di assumere uno piuttosto introduttivo se stai facendo questa domanda. Ho fatto solo un corso su compilatori, quindi forse la mia conoscenza è troppo elementare, ma ecco cosa è utile sapere:
- Assemblatore di base a 32 bit, compreso il funzionamento dello stack e l'utilizzo di
ebp
e il diverso tipo di jmp
s
- Buona conoscenza delle strutture dati: alberi, elenchi concatenati e alcuni degli algoritmi comuni ad essi associati (ricerca binaria, ad esempio)
- Comprensione di base della teoria della complessità, principalmente la notazione O grande
- Conoscenza delle espressioni regolari di base
Per essere onesti, se volevi prendere qualsiasi libro sulla teoria del compilatore e leggerlo, allora dovresti leggere un'introduzione ai compilatori e preferibilmente implementare qualcosa di base da te (in modo da ottenere un buona idea da come funziona: analizzando il codice sorgente, generando alberi di analisi, alla generazione del codice). Dopodiché, puoi guardare alle ottimizzazioni (ad es. age = 4 + 5
verrebbe compilato direttamente come age = 9
, il calcolo di 4+5
verrebbe eseguito una volta al momento della compilazione e mai più).