PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca...

51
1 PR2 2017-2018 PROGRAMMAZIONE 2 17. Interpre8, compilatori e seman8ca operazionale

Transcript of PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca...

Page 1: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

1PR22017-2018

PROGRAMMAZIONE217.Interpre8,compilatorieseman8caoperazionale

Page 2: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Linguaggidiprogrammazione

•  Comesicomprendonolecara5eris6chediunlinguaggiodiprogrammazione?

•  Molterispostediverse…–  manuali,documentazioneon-line,esempi,consultazionestackoverflow,…

•  Lanostrarisposta–  lacomprensionediunlinguaggiodiprogrammazionesioCenedallaseman8cadellinguaggio

•  Seman6cacomeguidaallaproge5azione,all’implementazioneeall’usodiunlinguaggiodiprogrammazione

2 PR22017-2018

Page 3: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Elemen8diseman8caoperazionale

3 PR22017-2018

Page 4: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Sintassieseman6ca

•  Unlinguaggiodiprogrammazionepossiede–  unasintassi,chedefinisce

•  le“formulebenformate”dellinguaggio,cioèiprogrammisintaCcamentecorreC,6picamentegenera6daunagramma6ca

–  unaseman8ca,chefornisce•  un’interpretazionedei“token”interminidien6tà(matema6che)note

•  unsignificatoaiprogrammisintaCcamentecorreC•  Lateoriadeilinguaggiformalifornisceformalismidispecifica

(gramma6che)etecnichedianalisi(automi)pertra5areaspeCsintaCci•  Perlaseman6caesistonodiversiapprocci

–  denotazionale,operazionale,assioma8ca,…•  Laseman6caformalevienedisolitodefinitasuunarappresentazionedei

programmiinsintassiastraGa

4 PR22017-2018

Page 5: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Sintassiconcreta

•  Lasintassiconcretadiunlinguaggiodiprogrammazioneèdefinitadisolitodaunagramma8caliberadacontesto(comevistoaPR1)

•  Esempio:gramma6cadisempliciespressionilogiche(inBackus-NaurForm,BNF)

• e::=v|Note|(eAnde)|(eOre)|(eImpliese)• v::=True|False

•  Notazionecomodaperprogrammatori(operatoriinfissi,associa6vità-commuta6vitàdioperatori,precedenze)

•  Menocomodaperunages6onecomputazionale(sipensiaiproblemidiambiguità)

5 PR22017-2018

Page 6: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Sintassiastra5a

•  L’alberosintaRco(abstractsyntaxtree)diunaespressioneexpmostra(risolvendoleambiguità)comeexppuòesseregeneratadallagramma6ca

•  LasintassiastraGaèunarappresentazionelinearedell’alberosintaCco–  glioperatorisononodidell’alberoeglioperandisonorappresenta6daiso5oalberi

•  PergliASTabbiamoquindisiaunanotazionelinearecheunarappresentazionegrafica

6 PR22017-2018

Page 7: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Dallasintassiconcretaall’AST

7

(TrueAndFalse)Implies((NotTrue)AndFalse)

SINTASSICONCRETA

Implies(And(True,False),And(Not(True),False))

SINTASSIASTRATTA

ALBEROSINTATTICOPR22017-2018

Page 8: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Seman6cadeilinguaggi

•  Tremetodiprincipalidianalisiseman6ca–  Seman2caoperazionale:descriveilsignificatodiunprogrammainterminidell’evoluzione(cambiamen6distato)diunamacchinaastra5a

–  Seman2cadenotazionale:ilsignificatodiunprogrammaèunafunzionematema6cadefinitasuopportunidomini

–  Sema2caassioma2ca:descriveilsignificatodiunprogrammainbasealleproprietàsoddisfa5eprimaedopolasuaesecuzione

•  Ognimetodohavantaggiesvantaggirispe5oadaspeCmatema6ci,facilitàdiusonelledimostrazioni,ou6litàneldefinireuninterpreteouncompilatoreperillinguaggio

8 PR22017-2018

Page 9: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

EdiquestocosasivedeinPR2?

•  MetodologieperOOPo  qualcosadiseman6caassioma6ca,informalmenteo  clausoleRequires&Effecto  Representa6onInvariant

•  Comprensionedeiparadigmideilinguaggidiprogrammazioneo  useremounaseman6caoperazionale

9 PR22017-2018

Page 10: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Seman6caoperazionale

•  Idea:laseman6caoperazionalediunlinguaggioLdefinisceinmodoformale,construmen2matema2ci,unamacchinaastra5aMLingradodieseguireiprogrammiscriCinL

•  Definizione:unsistemaditransizioniècos6tuitodao  uninsiemeConfigdiconfigurazioni(sta6)o  unarelazioneditransizione−→⊆Config×Config

•  Notazione:c−→dsignificachecedsononellarelazione−→

•  Intuizione:c−→dselostatocevolvenellostatod

10 PR22017-2018

Page 11: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Seman6caoperazionale“smallstep”

•  Nellaseman6caoperazionale“smallstep”larelazioneditransizionedescriveunpassodelprocessodicalcolo

•  Abbiamounatransizionee−→dsepartendodall’espressione(oprogramma)el’esecuzionediunpassodicalcolociportanell’espressioned

•  Unavalutazionecompletadieavràquindilaforma e−→e1−→e2…−→en

doveenpuòrappresentareilvalorefinaledie•  Nellaseman6casmall-steplavalutazionediunprogrammaprocedea5raversoleconfigurazioniintermediechepuòassumereilprogramma

11 PR22017-2018

Page 12: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Seman6caoperazionale“bigstep”

•  Nellaseman6caoperazionale“bigstep”larelazioneditransizionedescrivelavalutazionecompletadiunprogramma/espressione

•  Scriviamoe=>vsel’esecuzionedelprogramma/espressioneeproduceilvalorev

•  Notazionealterna6va(equivalente)u6lizzatainmol6tes6:e⇓v

•  Comevedremo,unavalutazionecompletadiunaespressioneèo5enutacomponendolevalutazionicompletedellesueso5o-espressioni

12 PR22017-2018

Page 13: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Seman6caoperazionaleinPR2

•  Lavisionedelcorso:u6lizzeremolaseman6caoperazionale“bigstep”comemodelloperdescrivereimeccanismidicalcolodeilinguaggidiprogrammazione

•  Laseman6caoperazionale“smallstep”sarebbeu6lenelcasodilinguaggiconcorren6perdescriverelecomunicazionieproprietàqualiladeadlockfreedom

13 PR22017-2018

Page 14: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Seman6ca“bigstep”:espressionilogiche

14

true⇒ truefalse⇒ false

VALORI

e1⇒ v1 e2 ⇒ v2e1 and e2 ⇒ v1∧v2

(and)

RegoledivalutazioneanalogheperOReIMPLIESUsiamoOPERATORILOGICIsul

dominiodeivaloricontabellediverità

e⇒ v not e⇒¬v

(not)

Page 15: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Regoleederivazioni

•  Leregoledivalutazionepossonoesserecompostepero5enerelavalutazionediunaespressionepiùcomplessa

•  Questofornisceunaprovadiunaderivazioneoperazionaledicalcolo

15 PR22017-2018

Page 16: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Regolediderivazione

•  Leregoledivalutazionecos6tuisconounproofsystem(sistemadidimostrazione)

•  Tipicamenteleregolesonodefiniteperinduzionestru5uralesullasintassidellinguaggio

•  Le“formule”checiinteressadimostraresonotransizionidel6poe=>v

•  Componiamoleregoleinbaseallastru5urasintaCcadieo5enendounprooftree

16

premessa1 ... premessakconclusione

PR22017-2018

Page 17: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Regoleeinterprete

•  Leregoledivalutazionedefinisconol’interpretedellamacchinaastra5a“formale”definitadallaseman6caoperazionale

•  Quindileregoledescrivonoilprocessodicalcolo•  NelcorsoforniremounacodificaOCaMLdellaseman6caoperazionale

•  Diconseguenzao5erremounmodelloeseguibiledell’interpretedellinguaggio

17 PR22017-2018

Page 18: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Interpreteespressionilogiche

18 PR22017-2018

Page 19: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Passo1:sintassiastra5a

19

typeBoolExp=|True|False|NotofBoolExp|AndofBoolExp*BoolExp

DefinizionedellasintassiastraGatramitei8pialgebricidiOCaML

PR22017-2018

Page 20: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Passo2:dalleregoleall’interprete

•  ObieCvo:definireunafunzioneevaltalecheeval(e)=vseesolosee=>v

•  Esempio:dallaregola

o5eniamoilseguentecodiceOCaml

20

evalNot(exp0)->matchevalexp0withTrue->False|False->True€

e⇒ v not e ⇒ ¬v

PR22017-2018

Page 21: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Passo3:Interpretediespressionilogiche

21

let rec eval exp = match exp with True -> True | False -> False | Not(exp0) -> (match eval exp0 with True -> False | False -> True) | And(exp0,exp1) ->

(match (eval exp0, eval exp1) with (True,True) -> True | (_,False) -> False | (False,_) -> False)

PR22017-2018

Page 22: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Espressioniavaloriinteri

22 PR22017-2018

Page 23: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

SintassiOCaML(astra5a)

23

typeexp=Cnstofconstant //costan6intere|Varofvariable //variabili|Opofexp*operand*exp //operatoribinari

PR22017-2018

Page 24: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Ambiente(1)

•  Perdefinirel’interpretedobbiamointrodurreunastru9uradiimplementazione(run-2mestructure)cheperme5adirecuperareivaloriassocia6agliiden6ficatori

•  Unbindingèun’associazionetraunnomeeunvalore–  ilnomesolitamenteèu6lizzatoperreperireilvalore–  esempioinMLlet x = 2 + 1 in let y = x + x in x * y

–  ilbindingdixè3,ilbindingdiyè6,ilvalorecalcolatodalprogrammaè18

24 PR22017-2018

Page 25: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Ambiente(2)

•  Unambienteenvèunacollezionedibinding•  Esempio env={x->25,y->6}•  L’ambienteenvcon6enedue“binding”

o  l’associazionetral’iden6ficatorexeilvalore25o  l’associazionetral’iden6ficatoreyeilvalore6o  l’iden6ficatoreznonèlegatonell’ambiente

•  Astra5amenteunambienteèunafunzionedi6po Ide!Value+Unbound

•  L’usodellacostanteUnboundperme5edirenderelafunzionetotale

25 PR22017-2018

Page 26: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Notazione

•  Datounambienteenv:Ide!Value+Unbound•  env(x)denotailvalorevassociatoaxnell’ambienteoppureilvalorespecialeUnbound

•  env[v/x]indical’ambientecosìdefinitoo  env[v/x](y)=vsey=xo  env[v/x](y)=env(y)sey!=x

•  Esempio:seenv={x->25,y->7}alloraenv[5/x]={x->5,y->7}

26 PR22017-2018

Page 27: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Implementazione(naïve)

27

let emptyenv = [](* the empty environment *)

let rec lookup env x = match env with | [] -> failwith ("not found") | (y, v)::t -> if x = y then v else lookup t x

PR22017-2018

Page 28: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Regoledivalutazione:codiceinterprete

28

eval(Varx)env->lookupenvx

env(x) = venv Var x⇒ v

env▹ e1⇒ v1 env▹ e2 ⇒ v2env▹Op(e1, Plus,e2)⇒ v1+ v2

evalOp(e1,Plus,e2)env->evale1env+evale2env

PR22017-2018

Page 29: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Interpretepersempliciespressioniintere

29

(*lavalutazioneèparametricarispe5oaenv*)

let rec eval (e : exp) (env : (variable * int) list) : int = match e with | Cnst i -> i | Var x -> lookup env x | Op(e1, Plus, e2) -> eval e1 env + eval e2 env | Op(e1, Minus, e2) -> eval e1 env - eval e2 env | Op(e1, Times, e2) -> eval e1 env * eval e2 env | Op(e1, Div, e2) -> eval e1 env \ eval e2 env

PR22017-2018

Page 30: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

AmbientecomeTDA

•  Qualisonoleoperazionisignifica6veperoperaresuambien6?

•  Create()//EFFECTS:creal’ambientevuoto

•  voidBind(x:Ide,v:Value)//EFFECTS:estendethisconillegametraxev

•  ValueLoookup(x:Ide)throwUnboundExcep6on//EFFECTS:res6tuisceilvaloreassociatoaxinthis,e

•  //solleval’eccezionesethisnonhalegamiperx

30 PR22017-2018

Page 31: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Acosaserve?

•  Lanozionediambiente(inle5eraturaanchenotaconilnomediNameSpaceAlgebra)vieneu6lizzatapermodellarediversiaspeCdeilinguaggidiprogrammazioneo  tabelladeisimbolio  recorddiaCvazioneo  record(lestructdelC)o  oggeCo …

31 PR22017-2018

Page 32: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Aggiungiamoledichiarazioni

32

letz=17inz+zCORPO

DICHIARAZIONE

PR22017-2018

Page 33: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Espressionicondich.:sintassiastra5a

33

type exp = | CstI of constant | Var of variable | Let of variable * exp * exp | Op * exp * operand * exp

EsempioLet("z", Cnst 17, Op(Var "z", Plus, Var "z"))

In sintassi concreta

let z = 17 in z + z

PR22017-2018

Page 34: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

RegoladelLet

34

env▹ erhs⇒ xval env[xval / x]▹ ebody⇒ venv▹ Let x = erhs in ebody⇒ v

eval (Let(x, erhs, ebody)) env -> let xval = eval erhs env in let env1 = (x, xval) :: env in eval ebody env1

•  Sivalutaehrsnell’ambientecorrenteo5enendoxval•  Sivalutaebodynell’ambienteestesoconillegametraxexval

o5enendoilvalorev•  Lavalutazionedel“let”nell’ambientecorrenteproduceilvalorev

PR22017-2018

Page 35: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Interpreteperespressionicondich.

35

let rec eval (e : exp) (env : (variable * int) list) : int = match e with | Cnst i -> i | Var x -> lookup env x | Let(x, erhs, ebody) -> let xval = eval erhs env in let env1 = (x, xval) :: env in eval ebody env1 | Op(e1, Plus, e2) -> eval e1 env + eval e2 env | Op(e1, Minus, e2) -> eval e1 env - eval e2 env | Op(e1, Times, e2) -> eval e1 env * eval e2 env | Op(e1, Div, e2) -> eval e1 env \ eval e2 env

PR22017-2018

Page 36: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Variabililibere

•  Inlogicaunavariabileinunaformulaèliberasenoncomparenellaportatadiunquan6ficatoreassociatoatalevariabile,altrimen6èlegata

•  Esempio:∀x.(P(x)⋀Q(y)) [o (∀x.P(x)⋀Q(y))nellasintassidiLPP]

o xèlegatao yèlibera

36 PR22017-2018

Page 37: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Occorrenzelibere

o  Lanozionedivariabileliberaolegatasiapplicaanchealcasodelcostru5olet

o  InfaCilcostru5oletsicomportacomeunquan6ficatoreperlavariabilecheintroduce

o  Uniden6ficatorexsidice“legato”seapparenelebodydell’espressioneletx=ehrsinebody,altrimen6sidicelibero

o  Esempio  let z = x in z + x(*zlegata,xlibera*)o  let z = 3 in let y = z + 1 in x + y

(*z,ylegate,xlibera*)

37 PR22017-2018

Page 38: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Interpretazionediespressioni

•  L’interpreteintrodo5ociperme5edivalutareespressionicostruiteconlasintassiindicata

38

Program Inter-preter Output

Inputevale

env

PR22017-2018

Page 39: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Versolacompilazione

•  Ilnostrointerpretediespressioniognivoltachedevedeterminareilvaloreassociatoaunavariabileeffe5uaunaoperazionedilookupnell’ambiente:questopotrebbeessereoneroso

•  Idea:oCmizzarel’esecuzioneintroducendounpiccolocompilatorechetraducetu5eleoccorrenzediiden6ficatoriin“indicidiaccesso”,inmodotalechel’operazionedilookupsiaeseguitasenzaeffe5uarericerchesull’ambiente,mainmododire5o(complessitàO(1))

39 PR22017-2018

Page 40: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Schemamistocompilazione/interpretazione

40

Program Compiler Machinecode Machine Output

InputJavacode javac

args[]

bytecode Java

PR22017-2018

Page 41: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Levariabili:danomiaindici

41

Let("z", Cnst 17, Op(Var "z", Plus, Var "z"))

Let(Cnst 17, Op(Var 0, Plus, Var 0))

COMPILAZIONE

Ilvalore0indicailbinding(let)piùvicino

PR22017-2018

Page 42: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Indicipervariabili

42

Let("z", Cnst 17, Let("y", Cnst 25, Op(Var "z", Plus, Var "y")))

Idea:indicediunavariabile=numerodeiletchesia5raversanoperraggiungerla

Let(Cnst 17, Let(Cnst 25, Op(Var 1, Plus, Var 0)))

COMPILAZIONE

PR22017-2018

Page 43: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Indicipervariabili

•  L’ideadiu6lizzareindicialpostodivariabiliinmodotaledaavereimplementazioniefficien6nascenellateoriadellambda-calcolocongliindicidiDeBruijn

h5p://en.wikipedia.org/wiki/De_Bruijn_index

43 PR22017-2018

Page 44: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Illinguaggiointermedio

44

TARGETEXPRESSIONtype texp = (* espressioni target *) | TCnst of constant | TVar of int (* indice a run time *) | TLet of texp * texp (* erhs e ebody *) | TOp of texp * operand * texp

PR22017-2018

Page 45: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Compilazioneincodiceintermedio

exp tcomp texp teval Output

intlist

ambienterun8me

PR22017-2018 45

Page 46: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Compilazioneincodiceintermedio

46

let rec tcomp (e : texp) (cenv : variable list) : texp = match e with | Cnst i -> TCnst i | Var x -> TVar (getindex cenv x) | Let(x, erhs, ebody) -> let cenv1 = x :: cenv in TLet(tcomp erhs cenv, tcomp ebody cenv1) | Op(e1, op, e2) ->

TOp(tcomp e1 cenv, op, tcomp e2 cenv)

let rec getindex cenv x = match cenv with | [] -> failwith("Variable not found") | y::yr -> if x=y then 0 else 1 + getindex yr x

PR22017-2018

Page 47: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Interpretaz.incodiceintermedio

47

Open List

let rec teval (e : texp) (renv : int list) : int = match e with | TCnst i -> i | TVar n -> List.nth renv n | TLet(erhs, ebody) -> let xval = teval erhs renv in let renv1 = xval :: renv in teval ebody renv1 | Op(e1, Plus, e2) -> teval e1 renv + teval e2 renv | Op(e1, Minus, e2) -> teval e1 renv - teval e2 renv | Op(e1, Times, e2) -> teval e1 renv * teval e2 renv | Op(e1, Div, e2) -> teval e1 renv \ teval e2 renv

PR22017-2018

Page 48: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Codiceintermedio

•  Rappresentareilprogrammasorgenteinuncodiceintermedioperme5edidominarelacomplessitàdellaimplementazionediunlinguaggiodiprogrammazione

•  Larappresentazioneincodiceintermedioperme5edieffe5uarenumeroseoCmizzazionisulcodice(nelnostrocaso,l’eliminazionedeinomiarun-6me)

•  Esempi–  Javabytecode:codiceintermediodellaJVM–  Microso�CommonIntermediateLanguage:codiceintermedio.NET

48 PR22017-2018

Page 49: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

Cosaabbiamoimparato

•  Unatecnicageneraleusataneiback-enddeicompilatorinellafasedigenerazionedelcodicepero5enereuncodicemaggiormenteefficiente

•  UsarecodiceintermedioeoCmizzareilcodiceogge5osulcodiceintermedio

•  Ar6colodivulga6vo(matecnico)disponibileon-line:FredChow,IntermediateRepresenta6on,Communica6onsofACM56(12)2013

49 PR22017-2018

Page 50: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

VisioneJava

50 PR22017-2018

Page 51: PROGRAMMAZIONE 2 17. Interpre8, compilatori e semanca ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-017.pdf · PR2 2017-2018 2 . Elemen di semanca operazionale PR2 2017-2018 3 . Sintassi

VisioneCommonIntermediateLanguage

51 PR22017-2018