Realizzazione Compilativa per VSL


Realizzazione compilativa della macchina astratta VSL (Very Simple Language) sulla macchina JAVA

La grammatica di VSL

Programma ::= Istr; | Istr;Programma
Istr ::= m[x] <-0 | m[x] <-1 | m[x] <-m[y] |
m[x] <-m[y]ANDm[z] |m[x] <-m[y]ORm[z] | if B then Istr
B ::= m[x]=0 | m[x]=1 | m[x]=m[y]

dove il significato delle istruzioni e' il seguente:

m[x] <- 0 (nella cella di memoria di indirizzo x poni 0)
m[x] <- 1 (nella cella di memoria di indirizzo x poni 1)

m[x] <- m[y]
(nella cella di memoria di indirizzo x poni il contenuto della cella di indirizzo y)

m[x] <- m[y]ANDm[z]
(nella cella di memoria di indirizzo x poni l'OR del contenuto della cella di indirizzo y con quello della cella z)

m[x] <- m[y]ORm[z]
(nella cella di memoria di indirizzo x poni l'OR del contenuto della cella di indirizzo y con quello della cella z)

Inoltre x, y e z possono avere come valori solo 0, 1, 2, 3.

Questo significa che la memoria per i dati associata al nostro linguaggio ha solo quattro celle. Inoltre queste celle della parte di memoria riservata ai dati sono formate da un unico bit (possiamo memorizza rci solo 0 oppure 1).

Ovviamente questo linguaggio ha una potenza computazionale ed espressiva estremamente limitata.