• 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!
4
0
0

Testo completo

(1)

Matteo Baldoni Architetture degli Elaboratori 1

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

Matteo Baldoni Architetture degli Elaboratori 2

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

Matteo Baldoni Architetture degli Elaboratori 3

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

Matteo Baldoni Architetture degli Elaboratori 4

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)

Matteo Baldoni Architetture degli Elaboratori 5

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

 

 

Matteo Baldoni Architetture degli Elaboratori 6

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)

Matteo Baldoni Architetture degli Elaboratori 7

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 moltiplicare

     

      

  





  





       !

Matteo Baldoni Architetture degli Elaboratori 8

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)

Matteo Baldoni Architetture degli Elaboratori 9

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

$

' * $ / $$

, -

+

)

( .

Matteo Baldoni Architetture degli Elaboratori 10

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

012 3 4 $

(

% '

% )

% $% +

% *

% .

% -

% $ /% $$&% ,

Matteo Baldoni Architetture degli Elaboratori 11

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

Matteo Baldoni Architetture degli Elaboratori 12

Albero sintattico Albero sintattico

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

postvisita

5 La visita postfissa può essere realizzata appogiandosi ad uno stack

5 Ma come utilizzare l’espressione cosi`

ottenuta?

5 Come calcolarne il valore espresso?

67 8 67 9 :; 97 8 6< 9 :;; 8 : = >?

8

9

8 8

9 9:

7 7

7 : < :

7 7 : 9 87 < : 9 8 9 : 8

(4)

Matteo Baldoni Architetture degli Elaboratori 13

Macchina a stack Macchina a stack

@ Per il calcolo di un’espressione in notazione polacca postfissa si fa uso di una macchina a pila

@ Si legge l’espressione polacca da sinistra verso destra

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

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

@ il top finale è il valore dell’espressione

A A B C D A E B C D C B D

Matteo Baldoni Architetture degli Elaboratori 14

Esecuzione Esecuzione

F F G H I F J G H I H G I

A AKA BLAKA MLA E M A

E M EA

E M

B

EA

E M ALA

E M N

E M BO BLBO O P

Matteo Baldoni Architetture degli Elaboratori 15

Uno stack per la conversione Uno stack per la conversione

Q Si inserisce un $ sullo stack

Q I numeri sono copiati in output

Q Le parentesi sinistre sono inserite nello stack

Q 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

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

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

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

A A B C D A E B C D C B D

RA D RA C BS C A D RE C BSS D B T

Matteo Baldoni Architetture degli Elaboratori 16

Esecuzione Esecuzione

UV W UV X YZ X V W U[ X YZZ W Y \

V V Y X WV [ Y X W X Y W

T RT D

RT RD

RT DT

C

RDRT D

RT RT

C

RT DC

RT RDC

RT C

RDC

RT T T

Riferimenti

Documenti correlati

 I dati vengono memorizzati dal master che nega i segnali di accesso alla memoria, lettura e Master SYNchronization. Bus asincrono (IV) Bus

I dati sono disponibile nel terzo ciclo Vengono attivati i segnali di richiesta di accesso alla memoria e il segnale di lettura. Segnale di attesa dei dati La memoria nega il

Attivati i segnali di accesso alla memoria e lettura, attiva il segnale Master SYNchronization.. Bus Bus

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