Giter VIP home page Giter VIP logo

assetlan's Introduction

Progetto AA 2021-22 -- AssetLan

AssetLan è un semplice linguaggio imperativo con ASSET, in cui i parametri possono essere sia standard che asset, con RICORSIONE e senza MUTUA RICORSIONE.

PROGETTO COMPLETO: Sviluppo di un Compilatore per AssetLan + report in cui si spiegano le scelte progettuali

ESERCIZIO 1

L'analizzatore lessicale deve ritornare la lista degli errori lessicali in un file di output. Il report deve contenere la discussione di tre esempi e degli errori segnalati.

ESERCIZIO 2

Sviluppare la tabella dei simboli del programma. Decidere se implementarlo come lista di hash-table o come hash-table di liste. Il codice sviluppato deve controllare:

  • variabili/funzioni non dichiarate
  • variabili/funzioni dichiarate piu` volte nello stesso ambiente

ESERCIZIO 3

Sviluppare un'analisi semantica che verifica:

  • la correttezza dei tipi (in particolare numero e tipo dei parametri attuali se conformi al numero e tipo dei parametri formali)
  • liquidity significa che (a) per ogni funzione, i parametri formali asset devono essere 0 alla fine della sua esecuzione (i valori sono stati spostati nei campi asset oppure trasferiti con una transfer) (b) alla fine del programma i campi asset sono 0

Il report deve contenere TUTTE le regole semantiche utilizzate e relativa discussione. Si faccia attenzione all'aliasing.

Codici da verificare/discutere:

     asset x, y ;
     void f()[u,v]{
	u -o y ;
	v -o x ;
     }
     void main()[u,v]{
        u -o x ;
	u -o y ;
	f()[x,y] ;
     }
     main()[2,3]	// scambia i valori di x e y; il contratto non e` liquido
     int a; int b = 0 ;
     asset z ;
     void g()[]{
	transfer z ;
     }	
     void f(int x)[asset y]{
	a = y ;		// non e` errore
        b = b+x ;      
        y -o z ;
	g()[] ;
     }
     f(1)[2] 		// il contratto e` liquido
     int a ; 
     asset x ;
     void f(int n)[asset u, asset v, asset w]{ 
        u -o x ; 
	f(v,w,u) ;
     }
     void main()[asset a, asset b, asset c]{
	f()[a,b,c] ;
	transfer x ;
     }
     main()[1,2,3] ;	// il contratto e` liquido
     asset x ;
     void f(int n)[asset u, asset v]{ 
        if (n == 0) u -o x ; 
	else { u -o x ; v -o x ; }
     }
     void main()[asset a]{
	f(0)[a,a] ;	// semantica di f()[a,a] ?
	transfer x ;
     }
     main()[1] ;	// il contratto e` liquido

ESERCIZIO 4

Definire un linguaggio bytecode per eseguire programmi in SimpLanPlus 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 [vedi slide delle lezioni]
  • Implementare l'interprete per il bytecode
  • Compilare ed eseguire i programmi del linguaggio ad alto livello

CODICI DA VERIFICARE:

     int x = 1;
     void f(int n)[]{ 
          if (n == 0) { print(x) ; }
          else { x = x * n ; f(n-1)[] ; }	
     }
     f(10) ;

=====

IMPLEMENTARE I CODICI DELL'ESERCIZIO 3

=====

Cosa succede se nel codice 4) di sopra rimpiazzo il main con il seguente:

     void main()[asset a, asset b]{
	f(0)[a,b] ;
	print x ;	
	transfer x ;
     }
     main()[1,2] ;	// il contratto e` liquido?

=====

CONSEGNA: Come ultima consegna, bisogna inviare il pacchetto completo di tutte le fasi della compilazione. E` possibile anche modificare i file degli assegnamenti precedenti, se necessario. Bisogna sempre allegare un pdf di presentazione.

Il pacchetto dovra' essere chiamato Cognome1_CON_#n.zip (dove il Cognome1 e' il cognome del primo componente del gruppo in ordine alfabetico e #n e` il numero di consegna).

Tempistiche:

  • CONSEGNA PRIMI 2 ESERCIZI: Domenica 24 Aprile ore 24.00
  • CONSEGNA ULTIMI 2 ESERCIZI: Domenica 29 Maggio ore 24.00

A seguire: discussione dell'intero progetto.

assetlan's People

Contributors

alberto-paparella avatar gppcaputo avatar gspina140 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.