ESAME DI LINGUAGGI E TRADUTTORI
3 Febbraio 2000 - Parte I (2 ore)
Esercizio 1
1. Scrivere una grammatica che generi ed un automa che riconosca il linguaggio
L = { cs (aq (b | c)m bdn )p bh b+ a2k |m>= n+q, p+h+k< s, p,q > 0 , n,k,s,m >=0}
2. Scrivere un parser discendente per il Linguaggio definito dalla grammatica le cui produzioni sono di seguito riportate:
S ®RaS| P| Q
P ®bR| V
Q ®cUdR| QbS
R ®RT| e
V ®fRR f| fRf| bR
T ®0| ...|9
U ®a | aT
ESAME DI LINGUAGGI E TRADUTTORI
3 Febbraio 2000 - Parte II (2 ore)
Esercizio 2
1. Sia data una lista di liste di interi L. Ogni sottolista Li e’ costituita da H interi, H>1, e l’ultimo elemento C definisce la classe di appartenenza dei primi H-1 interi diLi. Scrivere un programma Prolog
classi(L,T)
che costruisca una lista T, a partire da L, del seguente formato:
[C1,[A1,A2,...,An],C2,[B1,B2,...,Bm],...CK,[Z1,Z2,...,Zp]]
dove Ci, i=1,...,K sono le differenti classi dichiarate dalle sottoliste con i rispettivi elementi ottenuti fondendo le liste Li appartenenti ala stessa classe. Ad esempio, se
L=[[1,1,2,3],[3,4,5,1,2],[2,4,3],[5,7,10,11,12,2],[1,2,1]]
allora T sara’
[3,[1,1,2,2,4],2,[3,4,5,1,5,7,10,11,12],1,[1,2]]
.
2. Siano dati una lista T dello stesso formato della lista T dell’esercizio precedente ed un intero K. Ricostruire la lista L dell’esercizio precedente in cui ogni sottolista consiste di al piu’ K elementi. Questo implica che, se gli elementi di una classe sono M e M>K, si dovranno costruire M/K liste per quella classe.
Esercizio 3
1. Scrivere una macchina di Turing che date due stringhe v, w Î{0,1}+ separate da uno spazio bianco, verifichi se esistono due sottostringhe r di v e s di w di lunghezza 3 tali che r = sT.
2. Verificare se la seguente grammatica e’ LR(1) :
S ®Bb| SAaS| e
A ®eA| c
B ®BdB| a