ESAME DI LINGUAGGI E TRADUTTORI
25 Febbraio 2000 - Parte I (2 ore)
Esercizio 1
1. Scrivere una grammatica che generi ed un automa che riconosca il linguaggio
L = { b+ an bm cq (as | cr) a* | r > 0 ,s >=0 , n > r, n > s, n+m < q, m>1}
2. Scrivere un parser discendente per il Linguaggio definito dalla grammatica le cui produzioni sono di seguito riportate:
S ®SdSd |A ;
A ®EG = B
B ®CtCeC | C
C ®D | B
D ®EG| E | F
E ®aE | b
F ®bF | b
G ®( ) | ( D!H )
H ®D!H | D
ESAME DI LINGUAGGI E TRADUTTORI
25 Febbraio 2000 - Parte II (2 ore)
Esercizio 2
Sia dato un grafo orientato contenente n nodi ed m archi rappresentato con fatti del tipo
nodo(i)
arco(k,i,j)
dove k indica il numero pregressivo dell’arco, i il nodo di partenza e j il nodo di arrivo.
1. Scrivere un programma Prolog che alla interrogazione
?- camminodispari(L)
restituisca la lista delle coppie (i,j) di nodi per cui esiste un cammino da i a j di lunghezza dispari.
2. Scrivere un programma Prolog che alla interrogazione
?-matriceIncidenza(L)
restituisca la matrice di incidenza n ×m del grafo rappresentata attraverso una lista L di righe. La matrice di incidenza di un grafo e’ definita nel seguente modo. Le righe R1, ..., Rn sono ordinate a partire dal primo nodo. Ogni riga Ri e’ una lista di lunghezza m contenente solo i valori 0,1,-1. L’elemento di posto k vale 1 se i e’ il nodo da cui esce l’arco k, vale -1 se i e’ il nodo in cui termina l’arco k e vale zero altrimenti.
Esercizio 3
1. Scrivere una macchina di Turing che legge sul nastro di input due stringhe x e y separate da spazio bianco e stampi sul nastro di output la stringa y da cui sono state eliminate tutte le eventuali sottostringhe xx. Ad esempio, se x = ’ab’ e y = ’cababbababc’, va stampato ’cbc’.
2. Verificare se la seguente grammatica e’ LR(1) :
S ®SbA | a
A ®cAb | cB
B ®aS | e