Skip to content

andretone/SemInHs

Repository files navigation

Linguaggio (con lambda calcolo) EAGER di ordine superiore

semantiche operazionali, denotazionali e calcolo di approssimazini di funzioni.

  • LamUntiped.hs : troviamo l'interprete che segue la semantica operazionale, è stato inplementato anche l'interprete che si occupa del lambda calcolo.

  • Denotational.hs : troviamo metodi per calcolare la semantica denotazionale del linguaggio eager. Sege le definizioni del libro "The Formal Semantics of Programming Languages", Glynn Winskel.

  • Approximations.hs : offre dei metodi per calcolare delle approssimazioni del linguaggio. Le approssimazioni sono rappresentate come liste di coppie. Non sono implementate le coppie come tipo, e quindi le relative operazioni first e second, ma solo gli interi.

  • Syntax.hs : è definita la sintassi del linguaggio

  • Nei moduli Testxxxxxx.hs si trovano degli esempi di programmi e invocazioni dei relativi moduli.

  • esempi di utilizzo:

--Semantica OPERAZIONALE:

prompt>ghci

Prelude> :l LamUntiped [...]

LamUntiped Syntax> :m + Syntax [..]

LamUntiped Syntax> runEval (App (Lam "x" (Syntax.Sum (Var "x") (Lit(LInt 3))) ) (Lit (LInt 9)))

Loading package transformers-0.2.2.0 ... linking ... done.

Loading package mtl-2.0.1.0 ... linking ... done.

Loading package array-0.4.0.0 ... linking ... done.

Loading package deepseq-1.3.0.0 ... linking ... done.

Loading package containers-0.4.2.1 ... linking ... done.

(12,[(1,Lam "x" (Sum (Var "x") (Lit (LInt 3)))),(1,Lit (LInt 9)),(2,Var "x")])

Per interpretare un programma si utilizza runEval, consultare TestSemOperazionale.hs per ulteriori esempi. Per visualizzare meglio le closure ottenute dall'esecuzione, applicare v2e che adatta i valori ottenuti a termini.

--SEMANTICA DENOTAZIONALE: caricare moduli

prompt>ghci

Prelude> :l Denotational Syntax

[..]

Prelude Syntax Denotational> :m + Syntax

[..]

Prelude Syntax Denotational> (Lit (LInt 3))

Lit (LInt 3)

Prelude Syntax Denotational> denote (Syntax.Lit (Syntax.LInt 1)) emptyEnv

Loading package array-0.4.0.0 ... linking ... done.

Loading package deepseq-1.3.0.0 ... linking ... done.

Loading package containers-0.4.2.1 ... linking ... done.

Just 1

denote permette di calcolare seguendo la semantica denotazionale, consultare TestSemDenotazionale.hs per altri esempi.

--APPROSSIMAZIONI: attenzione a non generare liste infinite! (usare la funzione take sulle liste per limitare i risultati) viene fornita anche filter2show, che tronca le liste ai primi n elmti.

..> :l Appproximation.hs

..> :m + Syntax

..>filter2show 8 $ ( denote' (Lit (LInt 4)) emptyEnv )

N 4

About

work in progress, semantiche in Haskell di linguaggi

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published