Materiale didattico

Linguaggi e Traduttori - Ingegneria Informatica

Dispense Altro Materiale Pagina Principale

Dispense

Introduzione e aspetti tecnologici:

  1. Introduzione al corso
  2. Sorgente C++ di un compilatore per espressioni aritmetiche con la seguente grammatica:
    expression ::= digit | '(' expression operator expression ')'
    operator ::= '+' | '-' | '*' | '/'
    digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
  3. Sorgente C++ di strumenti per la generazione e la compilazione di espressioni aritmetiche con la seguente grammatica:
    expression ::= number | '(' expression operator expression ')'
    operator ::= '+' | '-' | '*' | '/'
    number ::= digit number | digit
    digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
  4. Grafico che mostra la differenza in prestazione tra i compilatori per le due grammatiche descritte ai punti precedenti (10 espressioni di test generate per ogni profondità).
  5. Sorgente C++ di un compilatore per programmi che rispettano la seguente sintassi:
    program ::= statement program | statement
    statement ::= definition | expression
    definition ::= identifier '=' expression
    expression ::= number | '(' term operator term ')'
    term ::= identifier | expression operator ::= '+' | '-' | '*' | '/'
    number ::= digit number | digit
    digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    identifier ::= letter identifier | letter
    letter ::= 'a' | ... | 'z' | 'A' | ... | 'Z'
    I programmi scritti in questo linguaggio consentono la definizione dinamica di variabili che possono essere utilizzate come operandi nelle espressioni aritmetiche. Le variabili possono essere inizializzate a loro volta con un'espressione. Il programma può contenere più espressioni, e il risultato di un programma in cui vi siano una o più espressioni è semplicemente la valutazione delle stesse.
  6. Analisi Lessicale
  7. Analisi Sintattica
  8. Sorgente C++ di un compilatore per espressioni aritmetiche con la seguente grammatica:
    expression ::= number
    expression ::= '(' expression op expression ')' | expression op expression
    op ::= '+' | '-' | '*' | '/'
    number ::= digit number | digit
    digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

    Nota bene: il compilatore proposto sfrutta un semplice parser top-down che, per sua natura, non è in grado di gestire correttamente la grammatica espressa in questo modo (presenza di ricorsione a sinistra).
  9. Sorgente C++ di un compilatore per espressioni aritmetiche con la versione LL(1) della grammatica di cui al punto precedente
    expression ::= term rest_expr
    rest_expr ::= + term rest_expr | - term rest_expr |
    term ::= factor rest_term
    rest_term ::= * factor rest_term | / factor rest_term |
    factor ::= number | '(' expression ')'
    number ::= digit number | digit
    digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

    dove la presenza di un | alla fine della regola indica che la stessa è soddisfatta dalla stringa vuota.
  10. Analisi Semantica
  11. Home page del progetto CppCC (C++ Compiler Compiler), un generatore di parser LL(k) scritto in C++
  12. Sorgente C++ di un compilatore per espressioni aritmetiche che utilizza CppCC per la generazione automatica degli analizzatori lessicale e sintattico (stessa grammatica del punto 2)

Linguaggi Formali:

Ausili:

  • jclasslib Un bytecode viewer per JAVA.
    • JVM spec La specifica della JAVA Virtual Machine, un interessante esempio di formato intermedio di tipo lineare basato su un architettura a stack.
Dispense Altro Materiale Pagina Principale

Altro materiale

Link utili:

I seguenti link sono stati gentilmente segnalati da Giorgio Metta del LIRA.
  • BOOST.ORG
    http://www.boost.org
    Lo scopo di BOOST.ORG è quello di fornire librerie free-software per lo sviluppo in C++. Caratteristiche importanti sono l'indipendenza dalla piattaforma, la compatibilità con la STL del C++ e il fatto che le librerie sono peer-reviewed prima della pubblicazione.
I seguenti link sono stati gentilmente segnalati da Christian Vecchiola del LIDO.

Libri on-line:

Dispense Altro Materiale Pagina Principale