Quali materie informatiche sono richieste per seguire un corso introduttivo sui compilatori? [chiuso]


10

Non sono laureato in informatica e lavoro come sviluppatore web (java, python, AS3 ecc.) Come professionista. Frequento 1 corso per semestre nella mia università locale. Avevo preso l'Intelligenza Artificiale (comprendente logica, grammatica libera dal contesto, analisi CYK, PNL introduttiva, catene di markov, HMM ecc.) Lo scorso semestre.

Sto programmando di seguire un corso introduttivo sui compilatori nel prossimo semestre che copre il seguente programma:

Analisi lessicale, analisi della sintassi, analisi semantica, ambiente run-time, rappresentazioni intermedie, generazione di codice, allocazione dei registri, selezione e programmazione delle istruzioni, introduzione alle ottimizzazioni del codice locale e globale, analisi del flusso di dati

La mia domanda è che ci sono delle materie informatiche che dovrei conoscere prima di seguire questo corso? Se sì, sarebbe bello se potessi elencare quei corsi per favore.


1
Dipende dalla tua scuola. Il mio non era così difficile, quindi i prerequisiti erano strutture di dati di base e algoritmi di base - tutto qui. Sfortunatamente hanno reso i compilatori opzionali e io mi sono liberato e non l'ho preso.
Giobbe

Risposte:


8

Probabilmente dovresti avere una semplice comprensione dei seguenti argomenti:

  • Matematica discreta (insiemi, relazioni, alberi, grafici, matrici, teoria dei numeri)
  • Strutture di dati (in un senso più applicato, come funzionano alberi, elenchi, stack, code e stringhe)
  • Algoritmi di base (concetti di base, ordinamento, ricerca, notazione Big-O, ecc.)
  • Architettura del computer (logica digitale, operazioni bit, microcomponenti, cache, memoria, programmazione assembly)
  • Varie (espressioni regolari, linguaggi senza contesto, automi a stati finiti / pushdown, macchine di Turing e calcolabilità, strumenti lessicali e di analisi)

Opzionale, e probabilmente aiuterà molto:

  • Progettazione del sistema operativo (gestione dei processi, progettazione del kernel, sincronizzazione, pianificazione, eventi, blocchi, thread e stack vs heap)

4

Bene, ho fatto un po 'di lavoro nello scrivere i miei compilatori e direi che il prerequisito principale è una solida comprensione delle cose che otterrai in una classe di Strutture di dati. In particolare, se non capisci la ricorsione, gli alberi e le mappe / tabelle hash, ti perderai molto rapidamente cercando di imparare a costruire un compilatore.


3

Avrai bisogno di un background di base sull'architettura del computer (registri, memoria, registri per scopi speciali, ecc.) E hai già visto un codice assembly. Sarebbe ancora meglio se prima avessi scritto un codice assembly, quindi hai una buona comprensione di come funziona il linguaggio macchina.

A seconda del livello del corso, ci si può aspettare che tu sappia un po 'dell'elaborazione superscalare e simili.


1
Questo è vero solo se assumiamo che il compilatore in questione stia generando codice macchina e non una sorta di bytecode.
Mason Wheeler,

3

Se questo è qualcosa di simile alla classe dei compilatori che ho ripreso nel tardo Cretaceo (circa 1988), gli unici prerequisiti reali sarebbero le strutture di dati (soprattutto alberi e tabelle hash), un linguaggio di assemblaggio (per il codice generato), possibilmente qualche architettura informatica e qualunque classe insegnasse cose come espressioni regolari, automi finiti, macchine di Turing, ecc. sebbene quelle possano essere coperte come parte del corso stesso del compilatore (FWIW, il mio no). Ti consigliamo inoltre di comprendere la ricorsione.


2

Probabilmente dovrai anche seguire un corso su modelli e lingue formali. Tutto ciò che copre la gerarchia di base di Chompsky andrebbe bene: Lingue regolari + Lingue senza contesto. Questo perché è importante comprendere le basi matematiche dell'analisi in modo che il parser sia pulito, performante e corretto. Penso che una buona classe di compilatori riguarderà spesso sia parser di espressioni regolari che LALR / LL (k) e la teoria che li sta dietro.


0

Dato che stanno parlando dell'ottimizzazione del codice, è possibile che ci sia un po 'di codice di assemblaggio linguistico. Quindi potrebbe essere bello avere almeno una familiarità passeggera con quello. Dipenderebbe da come è strutturato quel corso specifico. Altrimenti, solo avere una solida serie di capacità di programmazione dovrebbe essere sufficiente per un'introduzione alla classe dei compilatori, penso. Sarà una lezione molto preziosa.


0

Dipende dalla tua uni ma la maggior parte richiede questi prerequisiti:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.