Progetto di compilatori e interpreti AA 2020-21
-
Realizzare un sistema di ANALISI SEMANTICA per il linguaggio SimpLanPlus. In particolare, il sistema deve controllare
- variabili/funzioni non dichiarate
- variabili dichiarate piu` volte nello stesso ambiente
- uso di variabili non inizializzate
- corretto uso dei puntatori
- parametri attuali non conformi ai parametri formali (inclusa la verifica sui parametri passati per var)
- la correttezza dei tipi
Inoltre deve controllare gli accessi a identificatori "cancellati" con particolare attenzione all'aliasing implementando il sistema visto a lezione
In tutto il progetto, si assuma che i programmi possano essere ricorsivi ma non mutuamente ricorsivi.
- Definire un linguaggio bytecode per eseguire programmi in SimpLanPlus, scrivere
la compilazione e implementare l'interprete. In particolare:
- Il bytecode deve avere istruzioni per una macchina a pila che memorizza in un apposito registro il valore dell'ultima istruzione calcolata
- Implementare l'interprete per il bytecode.
- Compilare ed eseguire i programmi del linguaggio ad alto livello.
Vincoli:
- E' possibile fare equivalenza tra puntatori
- Non è possibile fare operazioni aritmetiche tra i puntatori
- Non è possibile confrontare i puntatori con operatori di > o <
- Le funzioni possono ritonare solo valori di tipo intero e booleano
- Ogni volta che vengono utilizzate { } viene aperto un nuovo scope
Prerequesiti:
- Java version >= 1.8
$> ./run.sh programma.slp
$> ./run.sh -h
SimpLanPlus compiler
--ast, -a Print abstract syntax three
--msize, -m Specify the total memory size
--print, -p Print memory at the end of execution
--debug, -p Print memory ad registers for each instruction
--comments, -c Print comments on assembly code
--out, -o Specify out filename (default out)