Prerequisiti per la teoria del compilatore? [chiuso]

4

Non intende essere soggettivo o ottenere consigli su quale sarebbe la strada migliore da percorrere, ma una lista obiettiva di cose che devono essere conosciute per permettermi di raccogliere un libro sulla teoria del compilatore e comprenderlo.

Quale livello di matematica e competenze correlate sono richieste?

    
posta PHython 15.10.2012 - 01:03
fonte

3 risposte

7

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

    
risposta data 15.10.2012 - 01:16
fonte
1

I compilatori sono molto, molto più semplici di quanto non siano normalmente percepiti. Non hai bisogno di alcuna conoscenza avanzata. Comprendere alcune nozioni di base sulla teoria dei grafi potrebbe aiutare (ma non è certamente un prerequisito). Comprendere i sistemi di riscrittura a termine sarebbe anche utile. Ma l'approccio migliore è solo iniziare ad apprendere la teoria dei compilatori e raccogliere ciò che manca sulla strada.

Molte cose che vengono discusse in dettaglio nei popolari libri di testo dei compilatori sono totalmente irrilevanti per la pratica del mondo reale e persino per la moderna ricerca sui compilatori. È probabile che non avrai mai bisogno di toccare i linguaggi formali (ahimè, analizzare è sopravvalutato ). Non c'è bisogno di capire l'architettura del computer in dettaglio (anche se potrebbe essere d'aiuto). Non sono richieste strutture dati complicate, oltre a alberi e DAG molto semplici.

    
risposta data 15.10.2012 - 09:50
fonte
0

Usa diversi compilatori e capisci cosa può fare un compilatore, come una scatola nera, prima di iniziare a scriverne uno. Prova ad usare diversi compilatori da riga di comando, vedi quali opzioni hanno e quali sono gli effetti, cosa hanno in comune, ecc.

Dopodiché, devi sapere alcune cose:

  • Aritmetica di base
  • Strutture dati
  • Teoria dei grafi
  • Architettura del computer
  • Lingue formali (potrebbero o non potrebbero essere trattate in dettaglio dal libro del compilatore)
  • Potrebbero essere necessari alcuni metodi matematici avanzati se avanzi nell'ottimizzazione del codice
risposta data 15.10.2012 - 08:12
fonte

Leggi altre domande sui tag