Upload
ngomien
View
218
Download
0
Embed Size (px)
Citation preview
VonNeumann:Thefirstdra3report…
• IlmodellodiVonNeumannèallabasedellastru<uradeicomputera<uali
• Duecomponen?principali– Memoria,dovesonomemorizza?iprogrammieida?– Unitàcentraledielaborazione,chehailcompitodieseguirei
programmiimmagazzina?inmemoriaprelevandoleistruzioni(eida?rela?vi),interpretandoleedeseguendoleunadopol’altra
2 PR22017-2018
LamacchinadiVonNeumann
3
36 ◾ Introduction to Programming Language
is processed in the arithmetic and logical unit (ALU) within the CPU, and the resulting data are stored back to the memory, as shown in Figure 2.1. Frequently used data items or their references are stored in hardware registers for faster access time. The von Neumann machine has a program counter, which contains the memory address of the next instruc-tion to be executed. The program counter is incremented by one after fetching the current instruction. However, its value can be altered using conditional and unconditional jump statements.
The instructions could be categorized as loading from the memory (load); storing into the memory (store); performing arithmetic computations of addition, subtraction, multipli-cation, and division; logical computations such as logical-AND, logical-OR, exclusive-OR, and negation; comparing two values; conditionally or unconditionally jumping to another nonadjacent instruction by changing the value of the program counter and by checking the status of various system-level flags. The various flags are stored in a register called the program status word (PSW). In addition to these categories of instructions, instruction sets also support various addressing mechanisms to address the operands, depending upon the computer architecture.
2.1.1 Address MechanismsIn the von Neumann machine, data or addresses of memory locations can be temporarily stored in the registers or in the memory (RAM). Similarly, a memory location can also hold data, as well as address of another memory location. If a memory holds the data, then it is accessed by an instruction using a single memory access called direct access. However, if a memory location holds the address of another memory location, then two memory accesses are needed to load the data into the CPU, and this method is called indirect access. In addition to direct and indirect accesses, an offset can be added or subtracted to an address stored in a register or another address to calculate a new address. This offset-based method is used to access subfields of complex data structures, where one needs to store the base address of the first memory location of the data structure and compute the address of the subfields by adding the offset of the subfield to the base address.
A computer may support 0-address, 1-address, 2-address, or 3-addresses, depending upon the computer architecture. As summarized in Table 2.1, the number of addresses is given by the maximum number of arguments the set of assembly-level instructions in
Memory (instruction + data)(main storage)
Controller + ALU + registers(computation and temporary fast storage)
Load Store
FIGURE 2.1 A von Neumann machine.
PR22017-2018
CicloFetch-Execute
• Fetch:L’istruzionedaeseguirevieneprelevatadallamemoriaetrasferitaall’internodellaCPU
• Decode:L’istruzionevieneinterpretataevengonoavviateleazioniinternenecessarieperlasuaesecuzione
• DataFetch:Sonopreleva?dallamemoriaida?suiqualieseguirel’operazioneprevistadallaistruzione
• Execute:Èportataaterminel’esecuzionedell’operazioneprevistadall’istruzione
• Store:Èmemorizzatoilrisultatodell’operazioneprevistadall’istruzione
4 PR22017-2018
ImplementareLinguaggidiProgrammazione
7
PROGRAMMATORELINGUAGGIOSORGENTE
COMPUTERCODICEMACCHINA
1. Compilazione2. Interpretazione3. Miste
PR22017-2018
ImplementareLinguaggidiProgrammazione
8
PROGRAMMATORELINGUAGGIOSORGENTE
COMPUTERCODICEMACCHINA
Compilazione: traduce il codice sorgente in quello macchina
PR22017-2018
ImplementareLinguaggidiProgrammazione
9
PROGRAMMATORELINGUAGGIOSORGENTE
COMPUTERCODICEMACCHINA
Interprete:Macchinavirtualeimplementatasuquellafisicacheesegueleistruzionidellinguaggio
INTERPRETE
PR22017-2018
ImplementareLinguaggidiProgrammazione
10
PROGRAMMATORELINGUAGGIOSORGENTE
COMPUTERCODICEMACCHINA
Compilazione+Interpretazione
CODICEINTERMEDIO
COMPILATORE
INTERPRETE
ImplementareLinguaggidiProgrammazione
11
PROGRAMMATOREJAVA
COMPUTERCODICEMACCHINA
Compilazione+Interpretazione
JAVABYTECODE
COMPILATORE
JVM
Macchineastra<e
• Macchinaastra=a:unsistemavirtualecherappresentailcomportamentodiunamacchinafisicaindividuandoprecisamentel’insiemedellerisorsenecessarieperl’esecuzionediprogrammi
12PR22017-2018
Macchineastra<e
• Unacollezionedistru<ureda?ealgoritmiingradodimemorizzareedeseguireprogrammi
• Componen?dellamacchinaastra<a– interprete– memoria(da?eprogrammi)– controllo– operazioni“primi?ve”
13
Interprete
Programma
Da?
op1op2…
opnControllo
Op.primi?veMemoria
PR22017-2018
Componentedicontrollo
• Unacollezionedistru<ureda?ealgoritmipero acquisirelaprossimaistruzioneo acquisireglioperandiememorizzareirisulta?delleoperazioni
o ges?relechiamateeiritornidaiso<oprogrammio ges?reithreado mantenereleassociazionifranomievaloridenota?o ges?redinamicamentelamemoriao …
14 PR22017-2018
L’interprete
15
controllo
controllo
operazioni
start
stop
acquisiscilaprossimaistruzione
decodifica
acquisisciglioperandi
seleziona
eseguiop1 eseguiop2 eseguiopn eseguialt...
memorizzailrisultato
controllo
Illinguaggiomacchina
• Mmacchinaastra<a• LMlinguaggiomacchinadiM
o èillinguaggiochehacomestringhelegalitu_iprogrammiinterpretabilidall’interpretediM
• Iprogrammisonopar?colarida?sucuioperal’interprete• Allecomponen?diMcorrispondonocomponen?diLM
o ?pididatoprimi?vio costru_dicontrollo
! percontrollarel’ordinediesecuzione! percontrollareacquisizioneetrasferimentoda?
16PR22017-2018
Implementaremacchineastra<e
• Mmacchinaastra<a• Icomponen?diMsonorealizza?mediantestru<ureda?e
algoritmiimplementa?nellinguaggiomacchinadiunamacchinaospiteMO,giàesistente(implementata)
• Èimportantelarealizzazionedell’interpretediMo puòcoincidereconl’interpretediMO
! MèrealizzatacomeestensionediMO! altricomponen?dellamacchinapossonoesserediversi
o puòesserediversodall’interpretediMO! MèrealizzatasuMOinmodointerpreta\vo! altricomponen?dellamacchinapossonoessereuguali
17 PR22017-2018
Dalinguaggioamacchinaastra<a
• M macchinaastra<aLM linguaggiomacchinadiM• L linguaggioML macchinaastra<adiL• ImplementazionediL=
realizzazionediMLsuunamacchinaospiteMO
• SeLèunlinguaggioadaltolivelloeMOunamacchina“fisica”o l’interpretediML ènecessariamentediversodall’interpretediMO
! MLèrealizzatasu MO inmodointerpreta?vo! l’implementazionediLsichiamainterprete! esisteunasoluzionealterna?vabasatasutecnicheditraduzione(compilatore?)
18 PR22017-2018
Implementareunlinguaggio
• L linguaggioadaltolivello• ML macchinaastra<adiL• MO macchinaospite• interprete(puro)
– MLèrealizzatasuMOinmodointerpreta?vo– scarsaefficienza,sopra<u<opercolpadell’interprete(ciclodi
decodifica)• compilatore(puro)
– iprogrammidiLsonotrado_inprogrammifunzionalmenteequivalen?nellinguaggiomacchinadiMO
– iprogrammitrado_sonoesegui?dire<amentesuMO• MLnonvienerealizzata
– ilproblemaèquellodelladimensionedelcodiceprodo<o• Casilimitechenellarealtànonesistonoquasimai
19 PR22017-2018
• Llinguaggioadaltolivello• MLmacchinaastra<adiL• MImacchinaintermedia• LMIlinguaggiointermedio• MOmacchinaospite
– traduzionedeiprogrammidaLallinguaggiointermedioLMI– realizzazionedellamacchinaintermediaMIsuMO
20
ML MI MO
Programma in L Programma in LMI
realizzazione
traduzione
Lamacchinaintermedia
PR22017-2018
21
ML MI MO
Programma in L Programma in LMI
realizzazione
traduzione
Lamacchinaintermedia
• ML =MIinterpretazionepura• MO=MItraduzionepura
– possibilesoloseladifferenzafraMOeMLèmoltolimitata• LlinguaggioassemblerdiMO
– intu_glialtricasi,c’èsempreunamacchinaintermediacheestendeeventualmentelamacchinaospiteinalcunicomponen?
PR22017-2018
Ilcompilatore
• Quandol’interpretedellamacchinaintermediaMIcoincideconquellodellamacchinaospiteMO
• ChedifferenzaesistetraMIeMO?– ilsupportoatempodiesecuzione(rts)
• collezionedistru<ureda?eso<o-programmichedevonoesserecarica?suMO(estensione)perperme<erel’esecuzionedelcodiceprodo<odaltradu<ore(compilatore)
– MI=MO+rts
• IllinguaggioLMIèillinguaggiomacchinadiMOestesoconchiamatealsupportoatempodiesecuzione
22 PR22017-2018
Acosaserveilrts?
• Unesempiodaunlinguaggioan?co:inlineadiprincipioèpossibiletradurretotalmenteunprogrammaFORTRANinunlinguaggiomacchinapuro,senzachiamatealrts,ma...– latraduzionedialcuneprimi?veFORTRAN(peres.rela?veall’ingresso
uscita)produrrebbecen?naiadiistruzioniinlinguaggiomacchina• seleinserissimonelcodicecompilato,lasuadimensionecrescerebbeadismisura
• inalterna?va,possiamoinserirenelcodiceunachiamataaunarou?ne(indipendentedalpar?colareprogramma)
• talerou?nedeveesserecaricatasuMOedentraafarpartedelrts• Neiverilinguaggiadaltolivello,questasituazionesipresentaper
quasitu_icostru_dellinguaggio– meccanismidicontrollo– nonsolorou?nemaanchestru<ureda?
23
IlcompilatoreC
• Ilsupportoatempodiesecuzionecon?ene– variestru<ureda?
• lostack– ambiente,memoria,so<oprogrammi,…
• lamemoriaaheap– puntatori,...
– iso<o-programmicherealizzanoleoperazioninecessariesutalistru<ureda?
• Ilcodiceprodo<oèscri<oinlinguaggiomacchinaestesoconchiamatealrts
24 PR22017-2018
Implementazionimiste
• Quandol’interpretedellamacchinaintermediaMIèdiversodaquellodellamacchinaospiteMO
• EsisteunciclodiinterpretazionedellinguaggiointermedioLMIrealizzatosuMOo pero<enereuncodicetrado<opiùcompa<oo perfacilitarelaportabilitàsupiùmacchineospi?o sidevereimplementarel’interpretedellinguaggiointermedioo nonènecessarioreimplementareiltradu<ore
25 PR22017-2018
Compilatoreoimplementazionemista?
• Nelcompilatorenonc’èdimezzounlivellodiinterpretazionedellinguaggiointermedioo sorgentediinefficienza
! ladecodificadiunaistruzionenellinguaggiointermedio(elasuatrasformazionenelleazioniseman?checorrisponden?)vieneeffe<uataognivoltachesiincontral’istruzione
• Seillinguaggiointermedioèproge<atobene,ilcodiceprodo<odaunaimplementazionemistahadimensioniinferioriaquelledelcodiceprodo<odauncompilatore
• Un’implementazionemistaèpiùportabilediuncompilatore• Ilsupportoatempodiesecuzionediuncompilatoresiritrova
quasiugualenellestru<ureda?erou?neu?lizzatedall’interpretedellinguaggiointermedio
26
L’implementazionediJava
• Èunaimplementazionemista– traduzionedeiprogrammidaJavaabytecode,linguaggiomacchinadiunamacchinaintermediachiamataJavaVirtualMachine
– iprogrammibytecodesonointerpreta?– l’interpretedellaJavaVirtualMachineoperasustru<ureda?(stack,heap)similiaquelledelrtsdelcompilatoreC• ladifferenzafondamentaleèlapresenzadiunages?oneautoma?cadelrecuperodellamemoriaaheap(garbagecollector)
– suuna?picamacchinaospite,èpiùsemplicerealizzarel’interpretedibytecodechel’interpreteditu<oillinguaggio• ilbytecodeèpiù“vicino”al?picolinguaggiomacchina
27 PR22017-2018
Trefamigliediimplementazioni
• Interpretepuro– ML=MI
– interpretediLrealizzatosuMO– alcuneimplementazioni(vecchie!)dilinguaggilogiciefunzionali(LISP,
PROLOG)• Compilatore
– macchinaintermediaMIrealizzataperestensionesullamacchinaospiteMO(rts,nessuninterprete)(C,C++,PASCAL)
• Implementazionemista– traduzionedeiprogrammidaLaLMI– iprogrammiLMIsonointerpreta?suMO
• Java• i“compilatori”perlinguaggifunzionalielogici(LISP,PROLOG,ML)• alcune(vecchie!)implementazionidiPascal(Pcode)
28 PR22017-2018
Implementazionimisteeinterpre?puri
• Latraduzionegeneracodiceinunlinguaggiopiùfaciledainterpretaresuuna?picamacchinaospite
• Masopra<u<opuòeffe<uareunavoltapertu<e(atempoditraduzione,sta?camente)analisi,verificheeo_mizzazionichemigliorano– l’affidabilitàdeiprogrammi– l’efficienzadell’esecuzione
• Varieproprietàinteressate– inferenzaecontrollodei?pi– controllosull’usodeinomielororisoluzione“sta?ca”– …
29 PR22017-2018
Analisista?ca
• Dipendedallaseman?cadellinguaggio• Cer?linguaggi(LISP)nonperme<onoinpra?caalcun?podi
analisista?ca– acausadellaregoladiscopingdinamiconellages?onedell’ambientenonlocale
• Linguaggifunzionalipiùmoderni(ML)perme<onodiinferireeverificaremolteproprietà(?pi,nomi,…)durantelatraduzione,perme<endodi– localizzareerrori– eliminarecontrolliatempodiesecuzione
• typecheckingdinamiconelleoperazioni– semplificarecerteoperazioniatempodiesecuzione
• cometrovareilvaloredenotatodaunnome30 PR22017-2018
Analisista?cainJava
• Javaèfortemente?pato– iltypecheckingpuòessereingranparteeffe<uatodaltradu<oree
sparirequindidalbytecodegenerato• Lerelazionidisubtypingperme<onocheunaen?tàabbiaun?povero
(actualtype)diversodaquelloapparente(apparenttype)– ?poapparentenotoatempoditraduzione– ?poveronotosoloatempodiesecuzione– ègaran?tocheil?poapparentesiaunsupertypediquellovero
• Diconseguenza,alcuneques?onilegateai?pipossonoessererisoltesoloatempodiesecuzione– sceltadelpiùspecificofradiversimetodioverloaded– cas?ng(tenta?vodiforzareil?poapparenteaunpossibileso<o-?po)– dispatchingdeimetodi(sceltadelmetodosecondoil?povero)
• Controlliesimulazioniatempodiesecuzione
31 PR22017-2018
Seman?caformaleerts
• Dueaspe_essenzialinellanostravisione(intendendoquelladelcorso)deilinguaggidiprogrammazioneo seman\caformale
! eseguibile,implementazioneadal?ssimolivelloo implementazioniomacchineastra=e
! interpre?esupportoatempodiesecuzione
32 PR22017-2018
Perché?
• Perchélaseman?caformale?– definizioneprecisadellinguaggioindipendentedall’implementazione• ilproge_staladefinisce• l’implementatorelau?lizzacomespecifica• ilprogrammatorelau?lizzaperragionaresulsignificatodeipropriprogrammi
• Perchélemacchineastra<e?• ilproge_stadevetenercontodellecara<eris?chepossibilidell’implementazione
• l’implementatorelarealizza• ilprogrammatoreladeveconoscereperu?lizzarealmeglioillinguaggio
33 PR22017-2018
Perché?
• Diventareunprogrammatoreconsapevoleo migliorecomprensionedellecara<eris?chedeilinguaggidiprogrammazione
o comprensionedelletecnichediimplementazioneo miglioreintuizionesulcomportamentodelpropriocodice
34 PR22017-2018
Perché?
• Miscelaaffascinantediteoriaepra?cao applicazioneimmediataedire<adellateoria
! tecnichedianalisista?ca:inferenzadei?pio tecnichealgoritmiche(problemiNP-hard)
! allocazionedellerisorsearun?me
35 PR22017-2018
Eilcompilatore?
• Lamaggiorpartedeicorsiedeilibrisuilinguaggisioccupanodicompilatori
• Perchénoino?o ilpuntodivistadeicompilatoriverràmostratoinuncorsofondamentaledellalaureamagistrale
o dellecosetradizionalmentetra<ateconilpuntodivistadelcompilatore,pochesonoquellecherealmenteciinteressano
• Guardiamolastru<uradiun?picocompilatore
36 PR22017-2018
Compilatore
37
Sorgente CodiceFrontEnd BackEnd
Frontend:fasidianalisiLeggeilprogrammasorgenteedeterminalasuastru<urasiasinta_cacheseman?caBackend:sintesiGenerailcodicenellinguaggiomacchina,programmaequivalentealprogrammasorgente
PR22017-2018
Compilatore
38
Aspeacri\ciRiconoscereiprogrammilegali(sinta_camentecorre_)Ges?relastru<uradei?piGenererarecodicecompa?bileconilSOdellamacchinaospite
Sorgente CodiceFrontEnd BackEnd
PR22017-2018
FrontEnd
• Duefasiprincipalio scanner:trasformailprogrammasorgentenellessico(token)
o parser:leggeitokenegenerailcodiceintermedio(IR)
• Lateoriaaiutao lateoriadeilinguaggiformali:automi,gramma?cheo strumen?automa?cipergenerarescannereparser
Scanner Parsersource tokens IR
PR22017-2018 39
Token
• Token:lacos?tuentelessicaledellinguaggioo operatori&punteggiatura:{}[]!+-=*;:…o parolechiave:if,while,return,class,…o iden?ficatori:…o costan?:int,floa?ng-pointcharacter,string,…
PR22017-2018 40
Scanner:unesempio
• Input//codicestupidoif(x>=y)y=42;
• Token
IF LPAREN ID(x) GEQ ID(y)
RPAREN ID(y) BECOMES INT(42) SCOLON
PR22017-2018 41
Parser:output(IR)
• Forma?differen?• Formato?picoriconosciuto:alberodisintassiastra<a(abstractsyntaxtree)o lastru<urasinta_caessenzialedelprogrammasenzagliaspe_dizuccherosinta_co
o neparleremoanchenelseguito
PR22017-2018 42
Parser:AST
• AbstractSyntaxTree(AST)
ifStmt
>=
ID(x) ID(y)
assign
ID(y) INT(42)
IF LPAREN ID(x) GEQ ID(y)
RPAREN ID(y) BECOMES INT(42) SCOLON
PR22017-2018 43
AST
• Glialberidisintassiastra<asonopar?colarmenterilevan?perchémostranolastru<uraseman?casignifica?vadeiprogrammi
• Noinelseguitoconsideremosemprelasintassiastra<a!!o Senzaconsideraregliaspe_dide<aglioqualiprecedenzaoperatori,ambiguità,etc.
44 PR22017-2018
Ambiguità
• Programmacorre<oconASTdiversi• Esempio
– E→E+E|E*E|id
47
E
E
E
E
E
id id
id+
*
E
E
EE
Eid
id id
+
*
PR22017-2018
Comesirisolve?
• Esistonopiùmetodi• Adesempio,codificarenelleregoledellagramma?cala
precedenzadeglioperatori
48 PR22017-2018
Morale
• Lateoria(gramma?cheelinguaggiformali)aiutaastru<urarelegramma?cheinmodotaledaevitareproblemicomequellodell’ambiguitào …etan?altriancora
• Tu<equesteproblema?chelevedretenellamagistrale…
49 PR22017-2018
Sintassiastra<a
• Lasintassiastra<adiunlinguaggioèespressafacilmentecoi?pididatoalgebricidiOcamlo ognicategoriasinta_cadiventaun?podidatoalgebricodiOcaml
50
AlgebraicDataTypeTypeBoolExp=|True|False|NotofBoolExp|AndofBoolExp*BoolExp
BNFBoolExp=|True|False|NOTBoolExp|BoolExpANDBoolExp
PR22017-2018
Esempio
51
Nome Produzionegramma?caleEAdd Exp::=Exp"+"Exp1;ESub Exp::=Exp"-"Exp1;EMul Exp1::=Exp1”*"Exp2;EDiv Exp1::=Exp1"/"Exp2;EInt Exp2::=Integer;
typeexp= EAddofexp*exp |ESubofexp*exp |EMulofexp*exp |EDivofexp*exp |EIntofint
PR22017-2018
ASTinJava
• Potremmocodificarelasintassiastra<adiunlinguaggioancheinJava
• Inchemodo?o ognicategoriasinta_caèunaclasseastra<ao ognicostru<oresinta_coèunaso<o-classecheestendelaclasseastra<a
52 PR22017-2018
ASTinJava(esempio)
• publicabstractclassExp{…}
• publicclassESubextendsExp{publicfinalExpexp_1,exp_2;publicESub(Expp1,Expp2){exp_1=p1;exp_2=p2;}:}
53 PR22017-2018
Analisiseman?ca(sta?ca)
• Tipicamentedopolafasediparsingo typecheckingo usoeallocazionedellerisorseo o_mizzazionedelcodice
PR22017-2018 54
BackEnd
• Cosafa?o traduceilcodiceintermedionellinguaggiodellamacchinaospite
o usalerisorsedellamacchinaospiteinmodoeffe_vo
PR22017-2018 55
Ilrisultatocomplessivo
• Inputif(x>=y)y=42;
• Output
moveax,[ebp+16]cmpeax,[ebp-8]jlL17mov[ebp-8],42L17:
ifStmt
>=
ID(x) ID(y)
assign
ID(y) INT(42)
PR22017-2018 56
Cosaciinteressa?
59
Analisilessicale
Analisisinta_ca
Analisiseman?ca
O_mizzazione1
Generazionecodice
O_mizzazione2
Supportoarun?me
nonciinteressano:aspe/sinta/ci
nonciinteressano:aspe/digenerazionecodice
Sololaparteingiallo!!
PR22017-2018