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ù).