Quali materie informatiche sono obbligate a seguire il corso introduttivo nei compilatori? [chiuso]

10

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

Sto pensando di tenere un corso introduttivo in compilatori nel prossimo seminario che copre il seguente programma:

Lexical Analysis, Syntax Analysis, Semantic Analysis, Run-Time Environment, Intermediate Representations, Code Generation, Register Allocation, Instruction Selection and Scheduling, Introduction to Local and Global Code Optimizations, Data Flow analysis

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

    
posta stressed_geek 13.07.2011 - 20:45
fonte

7 risposte

8

Probabilmente dovresti avere una comprensione dei seguenti argomenti:

  • Matematica discreta (insiemi, relazioni, alberi, grafici, matrici, teoria dei numeri)
  • Strutture dati (in un senso più applicato, come funzionano alberi, elenchi, pile, code e stringhe)
  • Algoritmi di base (concetti principali, ordinamento, ricerca, notazione Big-O, ecc.)
  • Architettura del computer (logica digitale, operazioni di bit, microcomponenti, cache, memoria, programmazione di assiemi)
  • Varie (espressioni regolari, linguaggi context-free, stati finiti / pushdown, macchine di Turing e computabilità, 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)
risposta data 13.07.2011 - 21:13
fonte
4

Bene, ho lavorato un po 'per scrivere i miei compilatori, e direi che il prerequisito principale è una solida comprensione di ciò che otterremo in una classe Data Structures. Specificamente, se non comprendi ricorsione, alberi e mappe / tabelle hash, ti perderai molto rapidamente cercando di imparare a compilare un compilatore.

    
risposta data 13.07.2011 - 20:50
fonte
3

Avrai bisogno di qualche base di base sull'architettura del computer (registri, memoria, registri di scopo speciale, ecc.) e ho già visto alcuni codici di assemblaggio. Sarebbe ancora meglio se prima hai scritto qualche codice assembly, quindi hai una buona comprensione di come funziona il linguaggio macchina.

A seconda del livello del corso, è probabile che tu sappia un po 'dell'elaborazione superscalare e simili.

    
risposta data 13.07.2011 - 20:52
fonte
3

Se questo è qualcosa di simile alla classe dei compilatori che ho recuperato nel tardo Cretaceo (circa 1988), gli unici prerequisiti reali sarebbero le strutture dati (alberi e tabelle hash in particolare), qualche linguaggio assembly (per il codice generato ), possibilmente qualche architettura del computer, e qualunque classe insegnasse cose come espressioni regolari, automi finiti, macchine di Turing, ecc. sebbene possano essere coperti come parte del corso del compilatore stesso (FWIW, il mio no). Dovrai anche assicurarti di comprendere la ricorsione.

    
risposta data 13.07.2011 - 22:41
fonte
2

Probabilmente dovrai seguire un corso su modelli e linguaggi formali. Tutto ciò che copre la gerarchia Chompsky di base andrebbe bene: Lingue regolari + Lingue libere dal contesto. Questo perché è importante capire i fondamenti matematici dell'analisi in modo che il parser sia pulito, performante e corretto. Penso che una buona classe di compilatori coprirà sia le espressioni regolari sia i parser LALR / LL (k) e la teoria dietro di essi.

    
risposta data 13.07.2011 - 20:59
fonte
0

Dato che stanno parlando dell'ottimizzazione del codice, è possibile che ci sia qualche codice di assembly langauge. Quindi potrebbe essere bello avere almeno una familiarità. Dipenderà da come è strutturato quel corso specifico. Altrimenti, avere un solido set di competenze di programmazione dovrebbe essere sufficiente per un'introduzione ai compilatori di classe che penserei. Sarà una molto classe preziosa.

    
risposta data 13.07.2011 - 20:51
fonte
0

Dipende dall'università, 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
    
risposta data 13.07.2011 - 21:07
fonte

Leggi altre domande sui tag