• Non ci sono risultati.

Architettura degli Elaboratori Architettura degli Elaboratori

N/A
N/A
Protected

Academic year: 2022

Condividi "Architettura degli Elaboratori Architettura degli Elaboratori"

Copied!
12
0
0

Testo completo

(1)

1 Architetture degli Elaboratori

Corso di Corso di

Architettura degli Elaboratori Architettura degli Elaboratori

Reverse Polish Notation:

Jan Lukasiewicz [1878-1956], Donald Knuth [1962]

Matteo Baldoni

Dipartimento di Informatica Università degli Studi di Torino C.so Svizzera, 185 – I-10149 Torino [email protected] http://www.di.unito.it/ ~baldoni

2 Architetture degli Elaboratori

Reverse Polish Notation Reverse Polish Notation

Problema: data una espressione (A + B) / (C – D) scrivere un algoritmo per calcolarne il valore

Questo problema è di fondamentale importanta per la realizzazione di un qualsiasi llinguaggio ad alto livello È più facile utilizzando per le espressioni la RPN:

A B + C D - /

La struttura dati pila (stack) gioca un ruolo fondamentale

3 Architetture degli Elaboratori

La pila (stack) La pila (stack)

La pila è una sequenza di elementi di un certo tipo in cui è possibile

aggiungere o togliere elementi soltanto ad un estremo (la “testa”) della sequenza

LIFO: Last In First Out, ultimo arrivato, primo servito

Testa

4 Architetture degli Elaboratori

La pila (stack) La pila (stack)

La pila puo` essere vista come un caso speciale di lista in cui

 l’ultimo elemento inserito è anche il primo ad essere rimosso

 non è possibile accedere ad alcun elemento che non sia quello in testa

Applicazione importante:

gestione dell’esecuzione di procedure ricorsive

(2)

5 Architetture degli Elaboratori

Operazioni sulle pile Operazioni sulle pile

creaPila: crea una nuova pila vuota

pilaVuota: test, restituisce true se la pila è vuota, false altrimenti

leggiPila (top): restituisce l’elemento in testa alla pila

fuoriPila (pop): elimina l’elemento in testa alla pila

inPila (push): inserisce un elemento in testa alla pila

 

 

6 Architetture degli Elaboratori

Operazioni sulle pile Operazioni sulle pile

creaPila(Pila)

creaLista(Pila)

codaVuota(Pila)

return vuoto(Pila)

leggiPila(Pila) p ← primo(Pila) elem ← leggi(p, Pila) return elem

fuoriPila(Pila) p ← primo(Pila) elem ← leggi(p, Pila) cancella(p, Pila) return elem

inPila(elem, Pila) p ← primo(Pila) inserisci(elem, p, Pila)

Espressioni aritmetiche Espressioni aritmetiche

Le parentesi sono fondamentali per una corretta interpretazioni delle regole di priorita` tra gli operatori additivi e moltiplicativi

3 * 3 + 2: quale è il risultato? 11 oppure 15?

Dipende se * ha maggiore priorita` di + oppure no

* ha maggiore priorita` di +

uso le parentesi per far si che si sommi prima di

     

        

      

      !

Albero sintattico Albero sintattico

Albero sintattico

 i nodi interni rappresentano gli operatori

 le foglie gli operandi la gerarchia permette di memorizzare le relazioni di priorita` tra I vari operatori

le parentesi sono inutili

 



" "

" # #

#

     

(3)

9 Architetture degli Elaboratori

Albero: previsita Albero: previsita

$&% '

% (

% )

% *

% +

% ,

% -

% .

% $/% $$

PREVISITA(p, Tree) // Esamina p

if not foglia(p, Tree) then begin v ← primoFiglio(p, Tree)

while not fineFratelli(v, T) do begin PREVISITA(v, Tree)

v ← succFratello(v, Tree) end

end

$

' * $ / $$

, -

+

)

( .

10 Architetture degli Elaboratori

Albero: invisita Albero: invisita

$

' * $/ $$

, -

+

)

( .

INVISITA(p, Tree) if foglia(p, Tree) then //Esamina p else begin

v ← primoFiglio(p, Tree) INVISITA(v, Tree) // Esamina p

v ← succFratello(v, Tree)

while not fineFratelli(v, T) do begin INVISITA(v, Tree)

v ← succFratello(v, Tree) end

end

0 1 $

(

% '

% )% $&% +

% *

% .

% -

% $/% $$% ,

11 Architetture degli Elaboratori

Albero: postvisita Albero: postvisita

$

' * $ / $$

, -

+

)

( .

(

% )

% '

% +

% *

% .

% $/% $$&% -

% ,% $

POSTVISITA(p, Tree)

if not foglia(p, Tree) then begin v ← primoFiglio(p, Tree)

while not fineFratelli(v, T) do begin PREVISITA(v, Tree)

v ← succFratello(v, Tree) end

// Esamina p end

12 Architetture degli Elaboratori

Albero sintattico Albero sintattico

La notazione postfissa è data dalla visita dell’albero sintattico con una postvisita

La visita postfissa può essere realizzata appogiandosi ad uno stack

La notazione postfissa mantiene l'ordine degli operandi

dell'espressione originale Ma come utilizzare

l’espressione così ottenuta?

Come calcolarne il valore espresso?

     

 



  

(4)

13 Architetture degli Elaboratori

Macchina a stack Macchina a stack

2 Per il calcolo di

un’espressione in notazione polacca postfissa si fa uso di una macchina a pila

2 Si legge l’espressione polacca da sinistra verso destra

2 Per ogni valore numerico si effettua un’operazione di push in una pila di tale valore

2 Per ogni operatore si esegue l’operazione espressa sui due prima valori estratti con la pop e si fa la push del risultato

2 il top finale è il valore dell’espressione

  

14 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6



Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8

(5)

17 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9



18 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9

19 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9

20 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 88 9

(6)

21 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 :8 9

8; 9

22 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 :8 9

8; 9 8: 9

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 88 9

:< 9 88 9 =

9

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 88 9

:< 9 88 9 =

9 

(7)

25 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 :8 9

8; 9 8: 9 =

9  : 

26 Architetture degli Elaboratori

Esecuzione Esecuzione

3 3 4 5 6 3 7 4 5 6 5 4 6

 8

8 9

 9 8 9 :8 9

8; 9 8: 9 =

9  :  

27 Architetture degli Elaboratori

Uno stack per la conversione Uno stack per la conversione

> Si inserisce un $ sullo stack

> I numeri sono copiati in output

> Le parentesi sinistre sono inserite nello stack

> Se il simbolo analizzato è una parentesi destra si estraggono e inviano in output tutti i simboli sino ad una parentesi sinistra, parentesi destra e sinistra si eliminano

> Se il simbolo analizzato ha priorità più alta di quello sul top il simbolo è inserito nello stack

> Se ha priorità più bassa si estrae il simbolo sul top e lo si invia in output

> Se il simbolo analizzato è $ si estraggono e inviano in output tutti i simboli sullo stack

  

    ?

28 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H

(8)

29 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H

30 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I

H

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I

H 

H

(9)

33 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I

H  H

34 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I

H 

H

 H

35 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J

H  H

 H

36 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I J K

H 

H

 H H

(10)

37 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J K L

H  H

 H H H

38 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I J K L I

H 

H

 H H H

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J K L I

H  H

 H H H

H

H

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I J K L I

H 

H

 H H H

H

H 

H

(11)

41 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J K L I M

H  H

 H H H

H

H 

H

42 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I J K L I M

H 

H

 H H H

H

H 

H



H

43 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J K L I M J

H  H

 H H H

H

H 

H



H

44 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I J K L I M J K L K

H 

H

 H H H

H

H 

H



H H

(12)

45 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J K L I M J K L K

H  H

 H H H

H

H 

H



H H H

46 Architetture degli Elaboratori

Esecuzione Esecuzione

@A B @A C DE CA B @F C DEE B D G

H H I I J K L I M J K L K J

H 

H

 H H H

H

H 

H



H H H

Esecuzione Esecuzione

@A B @A

C DE CA B @F C DEE B D G

H H I I J K L I M J K L K J L

H  H

 H H H

H

H 

H



H H H H

Riferimenti

Documenti correlati

Anno Accademico 2003-2004 Architetture degli Elaboratori 91. Da tabella

Matteo Baldoni Dipartimento di Informatica Università degli Studi di Torino C.so Svizzera, 185 – I-10149 Torino [email protected] http://www.di.unito.it/ ~baldoni. Matteo

 Decoder: prende un numero di n bit come input e lo usa per selezionare (mettere a 1) una delle 2 n linee di output.  Può essere utilizzato per attivare

2)Un'istruzione di salto condizionato solitamente viene interpretata come: istruzione sucessiva se la condizione non è vera, salto ad un certo indirizzo se la condizione è

R = S = 1 ha come stato coerente con ambo gli output 0 Quando R e S tornano a 0 il latch passa in modo non deterministico allo “stato 0” o allo “stato 1” (a meno che uno

Se viene inviata una richiesta di lettura di memoria nel ciclo k i dati saranno disponibili in MDR solo nel ciclo k + 2 MAR è caricato qui Tempo di accesso alla memoria: entro

 Un computer è una macchina programmabile, tuttavia esso non è direttamente utilizzabile da parte degli utenti poiché richiederebbe la conoscenza sull’organizzazione fisica

Multiplexer: 2 n input, 1 output e n input di controllo Le linee di controllo determinano quale dei 2 n input deve essere selezionato per essere inviato all'output