eliana minicozzi linguaggi1 05-06 lezione1
1
eliana minicozzi linguaggi1 05-06 lezione1
2
Linguaggi di programmazione 1
corso di Laurea in Informatica
Facoltà di Scienze M.F.N.
Università Federico II
aa. 2005-2006
eliana minicozzi linguaggi1 05-06 lezione1
3
Note per gli studenti sulle slides


Parte di questi appunti sono una personalizzazioni
degli appunti scritti dal prof. Marcello Sette lo scorso
anno in cui ero in sabatico, parte è presa dai miei
appunti sul corso del 2003-2004, Parte è presa da
corsi della sun e tutto risente dei libri citati in
bibliografia.
.Programma e contenuto del corso sono concertati
insieme quindi,a parte personalizzazioni di stile, non
ci sono differenze fra i due corsi ne sui compiti che
farete ne sugli obiettivi che ci proponiamo.
eliana minicozzi linguaggi1 05-06 lezione1
4
bibliografia






• Libri di testo:
a. Dershem - Jipping. Programming
languages: structures and models.
b. Wampler. The essence on object oriented
programming with Java and
UML.
c. Fowler. UML distilled.
d. Eckel. Thinking in Java.
eliana minicozzi linguaggi1 05-06 lezione1
5
Note per gli studenti sul corso


Sarete seguiti anche da altri due docenti: Il
dott. Luca Lazzaro e la dott.ssa Silvia Rossi.
Tutti e quattro abbiamo discusso e concertato
contenuti e obbiettivi in modo che i corsi non
risentissero, a parte questioni caratteriali, dei
professori.
eliana minicozzi linguaggi1 05-06 lezione1
6
Chi sono come trovarmi




Mi chiamo Eliana Minicozzi.
Il mio studio è 2M14 nel dipartimento di fisica.
Il telefono è 081 676814.
Gli orari di ricevimento sono: mercoledì dalle
12 alle 14 nel mio studio , dalle 16 alle 16 e
30 e Venerdì dalle13 alle 14, nell’ aula dove
si farà lezione.
eliana minicozzi linguaggi1 05-06 lezione1
7
Programma di L1 aa. 05-06














• Parte prima (concetti generali) – 8 lezioni
1. Paradigmi dei linguaggi di programmazione.
2. Il modello imperativo.
3. Il modello ad oggetti.
4. Progettazione orientata ad oggetti e UML.
5. Prima prova scritta intercorso.
• Parte seconda (Java) – 16 lezioni
1. Studio dei costrutti fondamentali: identificatori, parole chiavi, tipi;
espressioni e controllo di flusso; ereditarietà; overloading e overriding;classi
astratte , polimorfismo, arrays
2. Seconda prova scritta intercorso.
3. Studio dei costrutti più avanzati: qualificatori di classi, metodi, attributi;
; interfacce; classi interne; gestione degli errori:
eccezioni; programmi text-based; (threads; networking: molto improbabile).
4. Prova scritta finale.
eliana minicozzi linguaggi1 05-06 lezione1
8
Obbiettivi del corso
Capacità di riflessione sulle differenze tra i
vari paradigmi di programmazione in
particolare dei paradigmi imperativo e ad
oggetti e sul loro essere modi di pensare i
problemi.
 • Capacità media di progettare ad oggetti.
 • Capacità media di programmare in Java.
eliana minicozzi linguaggi1 05-06 lezione1
9
Obiettivi del corso a lungo termine





Migliorare l’abilità nel risolvere i problemi.
Imparare a usare meglio i linguaggi di
programmazione.
Imparare a scegliere più intelligentemente, in
dipendenza del problema, il linguaggio di
programmazione.
Aumentare la capacità di imparare linguaggi di
programmazione.
.
eliana minicozzi linguaggi1 05-06 lezione1
10
Come si svolgeranno gli esami





__
L’esame consisterà in
:una prova scritta, strutturata, a discrezione della commissione, in forma di test
chiusi a risposta multipla o in forma di test a risposta aperta o in forma mista;
una prova orale, consistente prevalentemente nella discussione della prova
scritta e in eventuali integrazioni a discrezione delle commissione; gli studenti
che alla prova scritta avranno riportato valutazioni insufficienti saranno
sconsigliati dal sostenere la prova orale.
Sono previste due prove scritte intermedie, con la stessa strutturazione
dell’esame finale, il cui superamento consentirà di optare, in tutti e soli gli
appelli del corrente anno accademico, per sostenere un esame scritto ridotto,
riguardante la sola parte finale del programma. In questo caso la valutazione
finale terrà conto delle valutazioni delle prove intermedie.
eliana minicozzi linguaggi1 05-06 lezione1
11
Sommario











Terminologia
Breve storia
Paradigmi
Macchina astratta
Meccanismi di traduzione
Processo di compilazione
Caratteristiche dei linguaggi
Criteri di scelta di linguaggi
Modello imperativo
Legami e data object
Modifiche di un legame










Tipi
Esempio: il puntatore
Ambito di validità dei legami
Legame di nome
Ereditarietà dei legami
Ereditarietà statica
Legame di locazione
Esempio di allocazione
dinamica
Bibliografia
esempi
eliana minicozzi linguaggi1 05-06 lezione1
12
Terminologia
Linguaggio di programmazione: un linguaggio che è
usato per esprimere (mediante un programma) un
processo con il quale un processore può risolvere
un problema.
• Processore: è la macchina che eseguirà il processo
descritto dal programma;
non si deve intendere come un singolo oggetto, ma
come un’ architettura di elaborazione.
 Programma: è l’espressione codificata di un
processo.
eliana minicozzi linguaggi1 05-06 lezione1
13
Correlare paradigmi a linguaggi


Uno specifico linguaggio di programmazione
implementa un modo di pensare il processo di
computazione (paradigma di computazione)’.
Un paradigma di computazione definisce strutture
e fattori che accomunano linguaggi di
programmazione apparentemente diversi e che
differiscono sostanzialmente dai linguaggi che
appartengono ad altri paradigmi.
eliana minicozzi linguaggi1 05-06 lezione1
14
Paradigmi in pillole
• Imperativo: Esecuzione sequenziale che essenzialmente realizza, tramite lo
statement di assegnazione, modifiche della memoria: Si pensa il programma
come sequenza di comandi.

• Logico:il Programma è una teoria logica L’esecuzione è la prova nella teoriaprogramma del teorema il cui enunciato è il problema.
Funzionale: Programma e ogni sua componente sono funzioni.”I dati” sono gli
argomenti su cui si valutano le funzioni Le funzioni corrispondono alla
definizione del problema. L’ esecuzione è appunto una valutazione di funzioni.
Orientato ad oggetti: Il programma è un insieme di classi ognuna della quali
definisce il tipo (cioè operazioni e dominio dei valori possibili per lo “stato” degli
oggetti sue istanze. L’ esecuzione è uno scambio di messaggi fra oggetti a cui
corrisponde un esecuzione di “operazioni” da parte degli oggetti riceventi e
possibilmente un cambiamento del loro stato stato
Parallelo: Programmi che descrivono entità distribuite che sono eseguite
contemporaneamente ed in modo asincrono.

eliana minicozzi linguaggi1 05-06 lezione1
15
Breve storia

















1954 FORTRAN (FORmula TRANslation)
LISP (LISt Processing)
1960 COBOL (Common Business Oriented Language)
ALGOL 60 (Algorithmic Oriented Language)
PL/1 (Programming Language 1)
Simula 67
ALGOL 68
PASCAL
APL
BASIC
1970/80 PROLOG
SMALLTALK
C
MODULA/2
ADA
Etc…….
eliana minicozzi linguaggi1 05-06 lezione1
16
Breve storia dei concetti principali
introdotti dai progenitori dell’oggi
Fortran: nato per manipolazione algebrica,introduce :variabili,
statment di assegnazione,concetto di tipo , subroutine,iterazione
e statment condizionali,go to, formati di input e output.
Cobol: indipendenza dalla macchina,e statment “English like”
Algol60: indipendenza dalla macchina e definizione mediante
grammatica(bakus-naur form),strutture a blocco e ricorsione.
Lisp: primo vero linguaggio di manipolazione simbolica,paradigma
funzionale, non c’è lo statment di assegnazione,si introduce la
struttura: linked –list, sia i programmi che i dati sono linked-lists
eliana minicozzi linguaggi1 05-06 lezione1
17
storia dei concetti principali introdotti dai
progenitori dell’oggi

Simula 67: classe come incapsulamento di dati e
procedure, istanze delle classi( oggetti):anticipatorio
del concetto di dato astratto implementati in Ada e
Modula2, e dl concetto di classe di Smalltalk e C++.

PL/1: abilità ad eseguire procedure specificate
quando si verifica una condizione
eccezionale;”mutitasking”,cioè specificazione di
tasks che possono essere eseguiti in concorrenza.

Pascal: programmazione strutturata, tipi di dato
definiti da utente,ricchezza di strutture dati…
eliana minicozzi linguaggi1 05-06 lezione1
18
Macchina astratta
Si intende quella architettura di elaborazione il cui linguaggio
di programmazione:
ha la stessa potenza del linguaggio F della macchina fisica;
è costituito da un sottoinsieme minimale di costrutti di F.
a) Essa è la rappresentazione comune a più macchine
fisiche.
b). I suoi programmi sono in genere più “prolissi” degli
equivalenti di ogni macchina fisica rappresentata.
eliana minicozzi linguaggi1 05-06 lezione1
19
Meccanismi di traduzione
• Interpreti: traducono ed eseguono un
costrutto alla volta. PRO: debug
 È adeguato alla fase di sviluppo.
 Compilatori: prima traducono l’intero
programma; poi la traduzione
può essere eseguita ,anche più volte. PRO:
velocità di esecuzione finale
 Adeguato alla fase di rilascio.
eliana minicozzi linguaggi1 05-06 lezione1
20
Nomenclatura





Input
Tempo di compilazione Tempo di esecuzione
Compilatore Macchina
Sorgente Oggetto Output
eliana minicozzi linguaggi1 05-06 lezione1
21
Processo di compilazione
eliana minicozzi linguaggi1 05-06 lezione1
22
Programma sorgente
Analisi lessicale
Stringa di token
Analisi sintattica
Parse tree
Analisi semantica
Queste due fasi possono avvenire
In una macchina diversa in cui può
Avvenire un processo di compilazione
o di interpretazione
Programma astratto
Generazione codice
Programma oggetto
eliana minicozzi linguaggi1 05-06 lezione1
23
Caratteristiche dei linguaggi










• Semplicità – (concisione) VS (leggibilità)
− Semantica: minimo numero di concetti e strutture.
− Sintattica: unica rappresentabilità di ogni concetto.
Astrazione – (rappresentare solo attributi essenziali)
− Dati: nascondere i dettagli di oggetti.
− Procedure: facilitare la modularità del progetto.
• Espressività – (cosa si può di rappresentare ) VS (semplicità)
• Ortogonalità – (meno eccezioni alle regole del linguaggio)
• Portabilità (grado di indipendenza dalla particolare macchina fisica )
eliana minicozzi linguaggi1 05-06 lezione1
24
Criteri di scelta di linguaggi






• Disponibilità dei traduttori
• Conoscenza del programmatore
• Esistenza di standard di portabilità
• Sintassi aderente al problema
• Semantica aderente alla architettura fisica
• Comodità dell’ambiente di programmazione
eliana minicozzi linguaggi1 05-06 lezione1
25
Paradigma Imperativo

RICORDIAMO CHE DEL PARADIGMA
IMPERATIVO FARO’ QUELLE PARTI CHE
RITENGO UN’ IMPORTANTE PREISTORIA
CONCETTUALE PER IL PARADIGMA AD
OGGETTI
eliana minicozzi linguaggi1 05-06 lezione1
26
Programma nel paradigma (modello)
imperativo



Il paradigma imperativo sottolinea la componente
calcolatore visto come singola CPU (programma
come "sequenza di comandi") + memoria
(programma come modificazione, manipolazione di
dati nella memoria).
I programmi scritti nei linguaggi appartenenti a
questo modello consistono di sequenze di
descrizioni di modifiche della "memoria" del
calcolatore.
Nella esecuzione del programma la sequenzialità
seguita è decisa dalle cosiddette strutture di
controllo (Es. Condizionali).
eliana minicozzi linguaggi1 05-06 lezione1
27
Manipolazione della memoria nel
paradigna imperativo:
Statement di assegnazione
Definizione grammaticale
 < statement-di-assegnazione> :: =
<name> <assignment-operator> <expression>
<name> rappresenta l'indirizzo del risultato mentre in
<expression> vi è specificata la computazione e gli
indirizzi dove sono memorizzati i valori necessari
all'esecuzione di <expression>.

eliana minicozzi linguaggi1 05-06 lezione1
28


La semantica dell'assegnazione dice anche
che il valore di <expression> va memorizzato
nell'indirizzo rappresentato da <name>.
Il valore di <expression> dipenderà dai valori
contenuti negli indirizzi degli argomenti di
<expression> rappresentati dai nomi di
questi:
eliana minicozzi linguaggi1 05-06 lezione1
29
Esempio assegnazione

Esempio in Pascal
a:=b+c
“expression”
Nomi che stanno per gli indirizzi
degli argomenti del +
Nome che sta per
L’ indirizzo del risultato
eliana minicozzi linguaggi1 05-06 lezione1
30
Relazioni linguaggio macchina





Lo statement di assegnazione, a parte l'astrazione
che sostituisce agli indirizzi i nomi, ricalca la tipica
unità di esecuzione in un linguaggio macchina:
1. ottenere indirizzi delle locazioni di operandi e
risultato;
2. ottenere dati di operandi da locazioni di operandi;
3. valutare risultato;
4. memorizzare risultato in locazione risultato.
eliana minicozzi linguaggi1 05-06 lezione1
31

Quindi il paradigma imperativo si caratterizza
per l’uso dei nomi come astrazione di indirizzi
di locazioni di memoria.
eliana minicozzi linguaggi1 05-06 lezione1
32
Legami e data object







Il data object è l’ astrazione mediante la quale noi
esploreremo vari concetti del paradigma imperativo.
- Un data object è la quadrupla (L,N, V, T), ove:
− L: locazione.
− N: nome.
− V : valore.
− T: tipo.
• Un legame è la determinazione di una delle
componenti.
eliana minicozzi linguaggi1 05-06 lezione1
33
dataObject immagine
legami
eliana minicozzi linguaggi1 05-06 lezione1
34
Modifiche di un legame








Variazioni di legami possono avvenire:
1. Durante la compilazione (compile time).
2. Durante il caricamento in memoria (load time).
3. Durante l’esecuzione (run time).
Possiamo notare che:
il location binding avviene durante il caricamento in memoria;
il name binding avviene durante la compilazione, nell’istante in cui il
compilatore incontra una dichiarazione;
• il type binding avviene durante la compilazione, nell’istante in cui il
compilatore incontra una dichiarazione di tipo; un tipo è definito dal
sottospazio dei valori che un data object può assumere e dai relativi
operatori.
eliana minicozzi linguaggi1 05-06 lezione1
35
Considerazioni sul legame di tipo ed
esempi
eliana minicozzi linguaggi1 05-06 lezione1
36
Legame di tipo
• Legame solitamente instaurato e fisso durante la
compilazione (esempi con “data object:A,B,C),
tranne per linguaggi che realizzano dynamic
binding. In essi il legame di tipo dipende dal valore
del dato: se il valore muta durante l’esecuzione, il
dato assume anche il tipo del nuovo valore.
eliana minicozzi linguaggi1 05-06 lezione1
37
Type checking (controllo di consistenza)
Type checking `e il meccanismo di controllo di
consistenza della coppia valore-tipo.
Può avvenire:
 a) durante la compilazione, b) durante
l’esecuzione, c)per nulla.
eliana minicozzi linguaggi1 05-06 lezione1
38
Domanda

Se un linguaggio realizza il “dynamic binding
per il tipo” quale controllo di consistenza è più
adeguato?
eliana minicozzi linguaggi1 05-06 lezione1
39
Nomenclatura linguaggi a seconda del type
checking



Un linguaggio si dice fortemente tipizzato se il
controllo di tipo avviene il più possibile durante la
compilazione e, negli altri casi, durante l’esecuzione
(PASCAL è quasi fortemente tipizzato – si vedano i
record con varianti).
Un linguaggio è dinamicamente tipizzato se il
legame e di conseguenza anche il controllo di
consistenza avvengono durante l’esecuzione.
− Un linguaggio è staticamente tipizzato se il
legame avviene durante la compilazione; in questo
caso il controllo di consistenza può avvenire in
entrambe le fasi.
eliana minicozzi linguaggi1 05-06 lezione1
40
Esempi
eliana minicozzi linguaggi1 05-06 lezione1
41
Dataobject A:integer
eliana minicozzi linguaggi1 05-06 lezione1
42
Dataobject
eliana minicozzi linguaggi1 05-06 lezione1
43
Dataobject c
eliana minicozzi linguaggi1 05-06 lezione1
44
Esempio di un tipo particolare:
il puntatore



Osservazioni:
2 data object coinvolti:Il secondo può non avere un
legame di nome o di valore.
La deallocazione è necessaria, perchè la modifica
del legame di valore del puntatore genera di solito
dati non più accessibili per nome o riferimento.
Alcuni linguaggi possiedono meccanismi di recupero
automatico di memoria (garbage collector).
eliana minicozzi linguaggi1 05-06 lezione1
45
Tipo Puntatore
eliana minicozzi linguaggi1 05-06 lezione1
46
Tipo puntatore


Memorizzate per quando faremo il linguaggio
Java che il “tipo puntatore è caratterizzato
non solo dai valori : indirizzi di memoria, ma
anche dalle operazioni che potete fare sui
“dataobject” puntatori.
Poiché in Java non sono definite queste
operazioni (in slang : non c’è l’aritmetica del
puntatore) in Java non è definito il tipo
puntatore.
eliana minicozzi linguaggi1 05-06 lezione1
47
Programma dal punto di vista dell’
esecuzione




Nel paradigma imperativo: il programma è
una “unità di esecuzione”, la più estesa.
Frequentemente un programma è articolato
in unità più piccole dette blocchi.
La più piccola unità di esecuzione indivisibile
è lo statement .
L’ assegnazione è lo statement mediante il
quale si modifica la memoria
eliana minicozzi linguaggi1 05-06 lezione1
48
Cos’è un blocco


Un blocco è sempre una collezione di unità di
esecuzione raggruppati per svariate ragioni* fra
cui,quella di cui ci occuperemo, è la definizione
dell’ambito di validità dei legami.
* Fra queste ragioni: Nelle strutture condizionali,
nelle unità di compilazioni, i blocchi sono compilati
separatamente e poi uniti per l’esecuzione: sono un
utile mezzo nel processo di sviluppo di un
programma (funzioni, procedure e riutilizzabilità) per
permettere l’astrazione procedurale.

eliana minicozzi linguaggi1 05-06 lezione1
49
Riassumendo





Istruzioni raggruppate in blocchi per meglio
definire:
• ambito delle strutture di controllo;
• ambito di una procedura;
• unità di compilazione separata;
• ambito dei legami.
eliana minicozzi linguaggi1 05-06 lezione1
50
Blocchi dal punto di vista dell’ ambito di
validità del legame di nome



sono in genere formati da due parti:
Una sezione nella quale possono essere
dichiarati i legami di nome che valgono
dentro il blocco, legami detti locali.
Una sezione eseguibile nel quale il legame
vale.
eliana minicozzi linguaggi1 05-06 lezione1
51
Definiamo un piccolo pseudo-linguaggio per
rappresentare un blocco:
 BLOCK A;
“eventuali dichiarazioni di nomi:nome1, nome2…”;
 BEGIN A
 “unità di esecuzione”
 ………
 ….
{nome1 da A,….}
 END A;

eliana minicozzi linguaggi1 05-06 lezione1
52
Legami ereditati o non locali



Dentro un blocco valgono anche binding ereditati da
altri blocchi .
quali sono i blocchi da cui si eredita varia da
linguaggio a linguaggio.
Alcuni linguaggi richiedono una dichiarazione
esplicita e separata dalle dichiarazioni dei legami
locali, altri invece seguono implicitamente politiche
per la determinazione dell’ ereditarietà
eliana minicozzi linguaggi1 05-06 lezione1
53
Politiche per ereditare
Ambito di validità detto statico o lessicale: un
blocco eredita dai blocchi che lo contengono .
 Ambito di validità dinamico (ha senso per le
procedure) ne parleremo in seguito.
eliana minicozzi linguaggi1 05-06 lezione1
54
Esempio eredità statica























Esempio 1:
Program P;
DECLARE X;
BEGIN P
……
BLOCK A;
DECLARE Y;
BEGIN A
……
BLOCK B;
DECLARE Z;
BEGIN B
……
END B;
……
END A;
……
BLOCK C;
DECLARE Z;
BEGIN C
…….
END C;
END P;
{X from P}
{X from P, Y from A}
{X from P, Y from A, Z from B}
{X from P, Y from A}
{X from P}
{X from P, Z from C}
eliana minicozzi linguaggi1 05-06 lezione1
55
Ambito statico o lessicale




Per determinare l’ ambito di validità in modo statico
o lessicale si applica la seguente regola definita
ricorsivamente:
Se un nome, usato in un bloccoX, è dichiarato nel
blocco X, esso è legato all’oggetto specificato nella
dichiarazione del nome.
Se un nome non ha dichiarazioni dentro il blocco X
, quel nome è legato allo stesso oggetto al quale è
legato nel blocco immediatamente contenente X.
.
eliana minicozzi linguaggi1 05-06 lezione1
56
Esempio detto “hole in the scope”













Esempio 2:
Program P;
DELARE X, Y;
BEGIN P
……
……
BLOCK A;
DECLARE X, Z;
BEGIN A
……
END A;
……
END P
L’ X definito in P dovrebbe essere visibile
Nel blocco A ,ma poiché è dichiarato in A un X
Quest’ ultimo maschera il primo, consistentemente con
La regola del Lexical scoping.
{X from P, Y form P}
{X from A, Y from P, Z from A}
{X from P, Y from P}
eliana minicozzi linguaggi1 05-06 lezione1
57
AMBITO DI VALIDITÀ DEL LEGAME
ALLA LOCAZIONE














program P;
DECLARE I;
BEGINE P;
FOR I := 1 TO 10 DO
BLOCK A;
DECLARE J;
BEGIN A
IF I := 1 then
J := 1;
ELSE
J := J * I;
END IF
END A;
END P;
{I from P}
{I from P, J from A}
Cosa succede di J quando si esce e poi si rientra
nel bloccoA? Non cambia se l’ allocazione della
Memoria è statica, cambia se l’ allocazione
È dinamica . Notare che qui non stiamo parlando di
Statico e dinamico nel senso precedente. Avere allocazione
Statica o dinamica della memoria è una proprietà dei linguaggi
eliana minicozzi linguaggi1 05-06 lezione1
58
Allocazione statica della memoria

Un oggetto ‘dato’ è legato alla sua locazione al
tempo di caricamento (load-time) e questo legame
dura per l’intera esecuzione del programma:
quindi J dell’ esempio precedente può mantenere il
suo valore quando si rientra in A semplicemente
perché le dichiarazioni non vengono riprocessate e
il legame ai nomi viene fatto a compile time e al
valore (inizializzazione) a load time.
eliana minicozzi linguaggi1 05-06 lezione1
59
Allocazione statica di memoria

Quando serve che le variabili conservino il
loro valore ogni volta che si rientra in un
blocco si richiede l’ allocazione statica di
memoria (compile-time).
eliana minicozzi linguaggi1 05-06 lezione1
60
Allocazione Dinamica della memoria
Si dice allocazione dinamica di memoria (runtime) quando il legame di locazione,
è creato all’inizio dell’esecuzione di un blocco
e viene rilasciato a fine esecuzione.
Il record di attivazione associato ad un blocco
può maneggiare anche questo problema .

eliana minicozzi linguaggi1 05-06 lezione1
61
Record di attivazione


In generale il record di attivazione serve a
contenere tutta l’informazione circa una unità
di esecuzione che è necessaria per rendere
nuovamente attiva una sua esecuzione che è
stata sospesa.
In questo momento noi ci focalizzeremo solo
sull’informazione relativa ai legami dei nomi
con le locazioni .
eliana minicozzi linguaggi1 05-06 lezione1
62
Record di attivazione e allocazione
dinamica di memoria




Le informazioni che devono essere presenti nel record di
attivazione, relativo ad un blocco generico Y, sono:
le locazioni per i dati locali al blocco, un puntatore al record di
attivazione del blocco contenente Y (immediatamente contenente
Y).
Inoltre, per gestire correttamente l’entrare e l’uscire da un blocco,
è necessario uno stack tale che:
quando a run-time, si entra in un blocco Y , il record di
attivazione di Y viene messo nel ‘top’ dello stack, quando si esce
da Y, Y è tolto dal ‘top’ dello stack
eliana minicozzi linguaggi1 05-06 lezione1
63
Esempio gestione alloc.dinamica



















Program P;
DECLARE I, J;
BEGINE P
BLOCK A;
DECLARE I, K;
BEGIN A
BLOCK B;
DECLARE I, L: Integer;
BEGIN B
……
END B;
……
END A;
BLOCK C;
DECLARE I, N;
BEGINE C
……
END C;
END
{I from P, J from P}
{I from A, J from P, K from A}
BLOCCO "B" {I from B, J from P, K from A, L from B B}
{I from C, N from C}
eliana minicozzi linguaggi1 05-06 lezione1
64
Stack di attivazione
eliana minicozzi linguaggi1 05-06 lezione1
65
Stack di attivazione
eliana minicozzi linguaggi1 05-06 lezione1
66
Stack di attivazione
eliana minicozzi linguaggi1 05-06 lezione1
67
Stack di attivazione
eliana minicozzi linguaggi1 05-06 lezione1
68
Guardare figure pag 41

Appunti-1.doc
eliana minicozzi linguaggi1 05-06 lezione1
69
Bibliografia
eliana minicozzi linguaggi1 05-06 lezione1
70
Scarica

L1Lezione1-2005