Esercitazione PR2
Lunedì 3 dicembre 2018

TESTI


    Si consideri il semplice linguaggio funzionale con dichiarazioni globali visto nella esercitazione precedente e se ne estenda la sintassi in modo da includere la possibilità di passare il parametro alle funzioni sia per nome che per riferimento. In particolare, la sintassi conterrà almeno la seguente struttura di tipo
    type param = Val of ide | Name of ide | Ref of ide ;;
    
    type def = Var of ide * exp | Fun of ide * param * exp;;
    
    Si definisca una semantica operazionale mediante regole di inferenza che rispetti le seguenti specifiche
    • nel passaggio per nome, l'espressione che rappresenta il parametro attuale della funzione chiamata deve essere valutata solo al momento nel quale il parametro formale è effettivamente acceduto, e l'ambiente di valutazione deve essere quello definito al momento nel quale la funzione è invocata;
    • nel passaggio per riferimento, il parametro attuale della funzione chiamata deve essere una variabile e deve conservare le eventuali modifiche anche dopo il termine della funzione;
    • tutte le altre operazioni hanno il significato visto a lezione.

    [2] Si verifichi la correttezza della semantica progettando ed eseguendo alcuni casi di test, sufficienti a testare i nuovi operatori introdotti.

    [3] Si definisca una sintassi astratta per il linguaggio, introducendo opportuni tipi di dati OCaML, e un interprete OCaML che corrisponde alla semantica operazionale introdotta.
    Si traducano poi nella sintassi astratta proposta i casi di test proposti in precedenza, e si valutino con l'interprete.

    Soluzione: il file globaleFullNameRef.

    [4] Si consideri adesso il semplice linguaggio funzionale visto a lezione, si escludano gli operatori ricorsivi e se ne estenda la sintassi in modo da includere la possibilità di passare il parametro alle funzioni sia per nome che per riferimento. In particolare, la sintassi conterrà almeno la seguente struttura di tipo
    type param = Val of ide | Name of ide | Ref of ide ;;
    
    type exp = ... | Fun of param * exp ;;
    

    [5] Si verifichi la correttezza della semantica progettando ed eseguendo alcuni casi di test, sufficienti a testare i nuovi operatori introdotti.

    [6] Si definisca una sintassi astratta per il linguaggio, introducendo opportuni tipi di dati OCaML, e un interprete OCaML che corrisponde alla semantica operazionale introdotta.
    Si traducano poi nella sintassi astratta proposta i casi di test proposti in precedenza, e si valutino con l'interprete.

    Soluzione: il file evalFunNameRefEnv.