1PR22017-2018
PROGRAMMAZIONE217.Interpre8,compilatorieseman8caoperazionale
Linguaggidiprogrammazione
• Comesicomprendonolecara5eris6chediunlinguaggiodiprogrammazione?
• Molterispostediverse…– manuali,documentazioneon-line,esempi,consultazionestackoverflow,…
• Lanostrarisposta– lacomprensionediunlinguaggiodiprogrammazionesioCenedallaseman8cadellinguaggio
• Seman6cacomeguidaallaproge5azione,all’implementazioneeall’usodiunlinguaggiodiprogrammazione
2 PR22017-2018
Elemen8diseman8caoperazionale
3 PR22017-2018
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
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
Sintassiastra5a
• L’alberosintaRco(abstractsyntaxtree)diunaespressioneexpmostra(risolvendoleambiguità)comeexppuòesseregeneratadallagramma6ca
• LasintassiastraGaèunarappresentazionelinearedell’alberosintaCco– glioperatorisononodidell’alberoeglioperandisonorappresenta6daiso5oalberi
• PergliASTabbiamoquindisiaunanotazionelinearecheunarappresentazionegrafica
6 PR22017-2018
Dallasintassiconcretaall’AST
7
(TrueAndFalse)Implies((NotTrue)AndFalse)
SINTASSICONCRETA
Implies(And(True,False),And(Not(True),False))
SINTASSIASTRATTA
ALBEROSINTATTICOPR22017-2018
Seman6cadeilinguaggi
• Tremetodiprincipalidianalisiseman6ca– Seman2caoperazionale:descriveilsignificatodiunprogrammainterminidell’evoluzione(cambiamen6distato)diunamacchinaastra5a
– Seman2cadenotazionale:ilsignificatodiunprogrammaèunafunzionematema6cadefinitasuopportunidomini
– Sema2caassioma2ca:descriveilsignificatodiunprogrammainbasealleproprietàsoddisfa5eprimaedopolasuaesecuzione
• Ognimetodohavantaggiesvantaggirispe5oadaspeCmatema6ci,facilitàdiusonelledimostrazioni,ou6litàneldefinireuninterpreteouncompilatoreperillinguaggio
8 PR22017-2018
EdiquestocosasivedeinPR2?
• MetodologieperOOPo qualcosadiseman6caassioma6ca,informalmenteo clausoleRequires&Effecto Representa6onInvariant
• Comprensionedeiparadigmideilinguaggidiprogrammazioneo useremounaseman6caoperazionale
9 PR22017-2018
Seman6caoperazionale
• Idea:laseman6caoperazionalediunlinguaggioLdefinisceinmodoformale,construmen2matema2ci,unamacchinaastra5aMLingradodieseguireiprogrammiscriCinL
• Definizione:unsistemaditransizioniècos6tuitodao uninsiemeConfigdiconfigurazioni(sta6)o unarelazioneditransizione−→⊆Config×Config
• Notazione:c−→dsignificachecedsononellarelazione−→
• Intuizione:c−→dselostatocevolvenellostatod
10 PR22017-2018
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
Seman6caoperazionale“bigstep”
• Nellaseman6caoperazionale“bigstep”larelazioneditransizionedescrivelavalutazionecompletadiunprogramma/espressione
• Scriviamoe=>vsel’esecuzionedelprogramma/espressioneeproduceilvalorev
• Notazionealterna6va(equivalente)u6lizzatainmol6tes6:e⇓v
• Comevedremo,unavalutazionecompletadiunaespressioneèo5enutacomponendolevalutazionicompletedellesueso5o-espressioni
12 PR22017-2018
Seman6caoperazionaleinPR2
• Lavisionedelcorso:u6lizzeremolaseman6caoperazionale“bigstep”comemodelloperdescrivereimeccanismidicalcolodeilinguaggidiprogrammazione
• Laseman6caoperazionale“smallstep”sarebbeu6lenelcasodilinguaggiconcorren6perdescriverelecomunicazionieproprietàqualiladeadlockfreedom
13 PR22017-2018
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)
Regoleederivazioni
• Leregoledivalutazionepossonoesserecompostepero5enerelavalutazionediunaespressionepiùcomplessa
• Questofornisceunaprovadiunaderivazioneoperazionaledicalcolo
15 PR22017-2018
Regolediderivazione
• Leregoledivalutazionecos6tuisconounproofsystem(sistemadidimostrazione)
• Tipicamenteleregolesonodefiniteperinduzionestru5uralesullasintassidellinguaggio
• Le“formule”checiinteressadimostraresonotransizionidel6poe=>v
• Componiamoleregoleinbaseallastru5urasintaCcadieo5enendounprooftree
16
premessa1 ... premessakconclusione
PR22017-2018
Regoleeinterprete
• Leregoledivalutazionedefinisconol’interpretedellamacchinaastra5a“formale”definitadallaseman6caoperazionale
• Quindileregoledescrivonoilprocessodicalcolo• NelcorsoforniremounacodificaOCaMLdellaseman6caoperazionale
• Diconseguenzao5erremounmodelloeseguibiledell’interpretedellinguaggio
17 PR22017-2018
Interpreteespressionilogiche
18 PR22017-2018
Passo1:sintassiastra5a
19
typeBoolExp=|True|False|NotofBoolExp|AndofBoolExp*BoolExp
DefinizionedellasintassiastraGatramitei8pialgebricidiOCaML
PR22017-2018
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
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
Espressioniavaloriinteri
22 PR22017-2018
SintassiOCaML(astra5a)
23
typeexp=Cnstofconstant //costan6intere|Varofvariable //variabili|Opofexp*operand*exp //operatoribinari
PR22017-2018
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
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
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
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
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
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
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
Acosaserve?
• Lanozionediambiente(inle5eraturaanchenotaconilnomediNameSpaceAlgebra)vieneu6lizzatapermodellarediversiaspeCdeilinguaggidiprogrammazioneo tabelladeisimbolio recorddiaCvazioneo record(lestructdelC)o oggeCo …
31 PR22017-2018
Aggiungiamoledichiarazioni
32
letz=17inz+zCORPO
DICHIARAZIONE
PR22017-2018
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
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
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
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
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
Interpretazionediespressioni
• L’interpreteintrodo5ociperme5edivalutareespressionicostruiteconlasintassiindicata
38
Program Inter-preter Output
Inputevale
env
PR22017-2018
Versolacompilazione
• Ilnostrointerpretediespressioniognivoltachedevedeterminareilvaloreassociatoaunavariabileeffe5uaunaoperazionedilookupnell’ambiente:questopotrebbeessereoneroso
• Idea:oCmizzarel’esecuzioneintroducendounpiccolocompilatorechetraducetu5eleoccorrenzediiden6ficatoriin“indicidiaccesso”,inmodotalechel’operazionedilookupsiaeseguitasenzaeffe5uarericerchesull’ambiente,mainmododire5o(complessitàO(1))
39 PR22017-2018
Schemamistocompilazione/interpretazione
40
Program Compiler Machinecode Machine Output
InputJavacode javac
args[]
bytecode Java
PR22017-2018
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
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
Indicipervariabili
• L’ideadiu6lizzareindicialpostodivariabiliinmodotaledaavereimplementazioniefficien6nascenellateoriadellambda-calcolocongliindicidiDeBruijn
h5p://en.wikipedia.org/wiki/De_Bruijn_index
43 PR22017-2018
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
Compilazioneincodiceintermedio
exp tcomp texp teval Output
intlist
ambienterun8me
PR22017-2018 45
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
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
Codiceintermedio
• Rappresentareilprogrammasorgenteinuncodiceintermedioperme5edidominarelacomplessitàdellaimplementazionediunlinguaggiodiprogrammazione
• Larappresentazioneincodiceintermedioperme5edieffe5uarenumeroseoCmizzazionisulcodice(nelnostrocaso,l’eliminazionedeinomiarun-6me)
• Esempi– Javabytecode:codiceintermediodellaJVM– Microso�CommonIntermediateLanguage:codiceintermedio.NET
48 PR22017-2018
Cosaabbiamoimparato
• Unatecnicageneraleusataneiback-enddeicompilatorinellafasedigenerazionedelcodicepero5enereuncodicemaggiormenteefficiente
• UsarecodiceintermedioeoCmizzareilcodiceogge5osulcodiceintermedio
• Ar6colodivulga6vo(matecnico)disponibileon-line:FredChow,IntermediateRepresenta6on,Communica6onsofACM56(12)2013
49 PR22017-2018
VisioneJava
50 PR22017-2018
VisioneCommonIntermediateLanguage
51 PR22017-2018
Top Related