Title: SISTEMI FORMALI GENERATIVI:
1- SISTEMI FORMALI GENERATIVI
- LINGUAGGI A STRUTTURA DI FRASE
- i linguaggi di programmazione
- sono un caso particolare dei
- linguaggi a struttura di frase,
- che sono un caso particolare dei
- sistemi formali generativi.
2linguaggi a struttura di frase
- un particolare caso di sistema formale generativo
sono le grammatiche a struttura di frase - di questo tipo sono le gramatiche dei
linguaggi di - programmazione
- Una grammatica generativa
- a struttura di frase
- produce
- un linguaggio a struttura di frase
- in tali linguaggi una stringa ben formata si
dice frase - cioe
- le stringhe del linguaggio generato dalla
grammatica appunto stringhe ben formate sono
"frasi" del linguaggio
3linguaggi a struttura di frase
- una grammatica generativa a struttura di frase
- e' una quadrupla
- ( V, T, P, S )
dove - V Vocabolario
- insieme di tutti i simboli usati,
terminali e non - T insieme dei simboli Terminali (ovvero
quelli che - possono apparire in una s.b.f. o
frase del linguaggio, - P insieme di Produzioni
- S Simbolo iniziale
- (un solo simbolo di base, S Sentence)
4linguaggi a struttura di frase
- una grammatica generativa a struttura di frase
e' una quadrupla - ( V, T, P, S )
dove - V Vocabolario
- insieme di tutti i simboli usati,
terminali e non - T insieme dei simboli Terminali (ovvero
quelli che - possono apparire in una s.b.f. o
frase del linguaggio, - P insieme di Produzioni
- S Simbolo iniziale (un solo simbolo di base, S
Sentence) - ...
- confronta con i sistemi formali generativi, dove
il linguaggio su A (alfab.) viene definito come
sottoinsieme di A da una terna ( Alfabeto,
Base, Produzioni ) - ora la base si riduce a un solo simbolo, e si
introducono due - categorie di simboli dell' alfabeto, Terminali e
NonTerminali
5linguaggi a struttura di frase //
unosservazione
- Grammatica G ( V, T, P, S ) con S
Simbolo iniziale, - V vocabolario insieme simboli usati,
terminali e non, - T insieme simboli Terminali (che possono
apparire in una s.b.f. o frase del
linguaggio), P insieme delle Produzioni - nota il vocabolario V T ? N unione dei due
insiemi, con - T insieme dei simboli Terminali e
- N ins. dei simb. Non terminali -gt N V-T
- insieme simboli Non terminali "categorie
sintattiche" simboli usati nella grammmatica,
ma che non appaiono in una frase del linguaggio
(nb almeno un simbolo NON terminale ce sempre
nella parte sinistra delle produzioni) - T simboli terminali, che NON possono apparire
mai da soli a sinistra in una produzione
6linguaggi a struttura di frase, primo
esempio
- es. di grammatica a struttura di frase G1
(V,T,P,S) con - V cane, gatto, morde, guarda, N, V
- T cane, gatto, morde, guarda terminali
- P p1,p2,p3,p4,p5 produzioni
- p1 S-gt N V N p2 V-gt morde p3
V-gt guarda - p4 N-gt cane p5 N-gt gatto
- es. derivazione S -gt1 N V N -gt2 N
morde N -gt4 - cane morde N
-gt4 cane morde cane - ovvero S cane morde cane
- NOTA che "cane morde N" non euna frase del
linguaggio, - infatti qui ce N (simbolo non terminale) che
per definizione NON puo' stare in una stringa del
linguaggio di G1 -
esercizio costruire altre frasi ...
7linguaggi a struttura di frase, primo
esempio
- esercizio cosa ancora produce la grammatica
vista - G1 (V,T,P,S), con T cane, gatto, morde,
guarda - V cane, gatto, morde, guarda, N, V con
le produzioni - P p1,p2,p3,p4,p5 con p1 S-gt N V N
p2 V-gt morde - p3 V-gt guarda p4 N-gt cane
p5 N-gt gatto - con la produzione S -gt1 N V N e poi scelgo
altre produzioni (invece di 2,4,4 che da'cane
morde cane) e ho - a cane morde cane, b cane guarda
cane, - c cane morde gatto, d cane guarda
gatto, - e gatto morde cane, f gatto guarda
cane, - g gatto morde gatto, hgatto guarda
gatto. - G1 produce un linguaggio finito di otto
frasi - L1 a,b,c,d,e,f,g,h
8linguaggi a struttura di frase, secondo
esempio
- alla grammatica G1 (V,T,P,S) con
- V cane, gatto, morde, guarda, N, V T
cane, gatto, morde, guarda - P p1, p2, p3, p4, p5 con p1 S
-gt N V N p2 V -gt morde - p3 V -gt guarda
p4 N -gt cane p5 N -gt gatto - aggiungo una produzione e un simbolo terminale
"che" - p6 s V N -gt s V N che V N (s sta per
stringa qualsiasi) - e ho G2 (V,T,P,S) con
- V cane,gatto,morde,guarda, che, N, V
vocabolario - T cane,gatto,morde,guarda, che simboli
terminali - P p1,p2,p3,p4,p5,p6 con p1 S-gt N V
N - p2 V-gt morde
p3 V-gt guarda - p4 N-gt cane
p5 N-gt gatto - p6 s V N -gt s V N che V
N
9linguaggi a struttura di frase, secondo
esempio
- G2 V cane,gatto,morde,guarda, che, N, V
- T cane,gatto,morde,guarda, che
- P p1,p2,p3,p4,p5,p6
- con p1 S-gt NVN p2 V-gt morde
- p3 V-gt guarda p4 N-gt cane
- p5 N-gt gatto p6 s V N
-gt s V N che V N - genera frasi del tipo
- S -gt1 N V N -gt6 N V N che V N -gt6
- N V N che N V che N V -gt
- ... e, dopo aver sostituito ai N un po di cane o
gatto e ai V un po di "guarda" o "morde"
otteniamo la frase - gatto guarda cane che guarda gatto che morde
gatto - posso ottenere altre frasi -gt ho un linguaggio
INFINITO
10linguaggi a struttura di frase, definizione di
linguaggio
- Data una grammatica a strutt. di frase, quadrupla
- G (V,T,P,S) con S simbolo di
partenza - V a, b, y, P, Q, ... vocabolario
simboli di G - T a, b, y simboli terminali
di G - P p1,p2... produzioni
- definizione un linguaggio a struttura di frase
generato da G e' linsieme delle stringhe sull
alfabeto T (simboli terminali) che possono essere
derivate (direttamente o indirettamente) da S - L (G) w w ? T , S w
11linguaggi a struttura di frase, terzo
esempio
- terzo esempio, G3 (V,T,S,P), con
- V A, S, a,b , T a, b , ( non
terminale A ) - P p1 S -gt aAb p2 aA -gt aaAb p3 A
-gt ? - esempi di derivazioni
- S -gt1 aAb -gt3 ab
- oppure
- S -gt1 aAb -gt2 aaAbb -gt3 aabb
- oppure
- S -gt1 aAb -gt2 aaAbb -gt2 aaaAbbb -gt3 aaabbb
- e quindi
- L(G3) ab, aabb, aaabbb, ... akbk
kgt1
12linguaggi a struttura di frase, terzo
esempio
- continua esempio G3 (V,T,S,P), con VA,S,a,b,
Ta,b, - e P p1 S -gt a A b p2 aA -gt aaAb
p3 A -gt ? - es ( ricorda si
parte sempre da S !! ) - S -gt1 aAb -gt2 aaAbb -gt2 aaaAbbb -gt3
aaabbb -
- quindi
- L(G1) ab, aabb, aaabbb, ...
akbk kgt1 -
- si noti che la produzione p2 aA -gt aaAb
- e "ricorsiva", 1
2 - nel senso che A appare nella parte a sinistra
della " -gt ", 1, parte definita dalla
produzione e appare anche a destra, 2, parte
definente nella produzione --gtgt e quindi -
- A e in parte definita in termini di se stessa
... - ovvero la produzione e' ricorsiva !
13linguaggi a struttura di frase, esempio G4
errata
- nota attenzione alla ricorsione sappiamo
dalla programmazione in C che un sottoprogramma
ricorsivo DEVE avere un test di fine ricorsione
nel caso delle grammatiche, devo avere una
produzione alternativa alla ricorsione che mi
consente di fermare la ricorsione - infatti, nella
- G3 (V,T,S,P), con VA,S,a,b, e con
Ta,b e - P p1 S -gt a A b p2 aA -gt aaAb
p3 A -gt ? - vi sono due produzioni con A a sinistra
- p2 aA -gt aaAb che e' ricorsiva
- p3 A -gt ? che permette di
fermare la ricorsione
14linguaggi a struttura di frase, esempio G4
errata
- nota attenzione alla ricorsione sappiamo
dalla programmazione in C che un sottoprogramma
ricorsivo DEVE avere un test di fine ricorsione
nel caso delle grammatiche, devo avere una
produzione alternativa alla ricorsione che mi
consente di fermare la ricorsione - la grammatica seguente e' errata
- G4 ( V, T, S, P ), con
- V x, y, w, z, A, B, S T x, y, w,
z e - P S -gt AB A -gt xA A -gt yA B -gt
zB B -gt wB - vi sono 4 produzioni ricorsive, ma ...
- mancano (almeno) due produzioni per fermare la
ricorsione
15linguaggi a struttura di frase, G4
corretta
- nella grammatica errata G4 ( V,T,S, P ),
con - V x, y, w, z, A, B, S T x, y, w,
z e - P p1 S -gt AB p2 A -gt xA
- p3 A -gt yA p4 B -gt zB
p5 B -gt wB - mancano (almeno) due produzioni per arrestare la
ricorsione per poter eliminare i simboli non
terminali A e B aggiungo ad es. - p6 A -gt x p7 B -gt
z - esempi
- S -gt1 AB -gt6 xB -gt7 xz
- S -gt1 AB -gt3 yAB -gt5 yAwB -gt6 yxwB -gt7
yxwz - S -gt1 AB -gt2 xAB -gt2 xxAB -gt2 xxxAB -gt2
xxxxAB - -gt6 xxxxxB -gt4 xxxxxzB -gt7 xxxxxzz
- S -gt1 AB -gt5 AwB -gt5 AwwB -gt6 xwwB -gt7
xwwz
16linguaggi a struttura di frase, grammatica
errata
- ancora G5 ( V, T, S, P ),
- con
- V x, y, z, A, C, S , T
x,y,z, - P
- p1 S -gt AA
- p2 A -gt xA
- p3 A -gt C
- p4 C -gt yC
- p5 C -gt S
- problemi in questa definizione?
- vediamo un es. di derivazione
- S -gt1 AA -gt2 xAA -gt2 xxAA -gt3 xxCA -gt2 xxCxA
-gt4 - xxyCxxA -gt3 xxyCxxC -gt5 xxySxxC -gt5 xxySxxS
...
17linguaggi a struttura di frase, grammatica
errata
- ancora G5 ( V, T, S, P ),
- V x, y, z, A, C, S ,
T x,y,z, - P p1 S -gt AA
p2 A -gt xA - p3 A -gt C
p4 C -gt yC - p5 C -gt S
- qui si ha una definizione circolare (ricorsione
circolare) - S e definita in termini di A, A e definita
in termini di C, - C e definita in termini di S! -gt
- mancano produzioni per eliminare i
- simboli non terminali dalle
stringhe - dobbiamo ad es. aggiungere qualche produzione del
tipo - C -gt z oppure A -gt w o altra
produzione simile
18linguaggi a struttura di frase, esercizio 3
- esercizio
- cosa produce G6 (V,T,S,P)
- G6 ( A, a , a , A,
A -gt a A A -gt a ) - ovvero
- V A, a ,
- T a ,
- S A,
- P p1 A -gt a A p2 A -gt a
- (segue soluzione)
19linguaggi a struttura di frase
- soluzione esercizio la grammatica (V,T,S,P)
- G6 ( A, a , a , A, A
-gt a A A -gt a ) - ovvero
- V A, a , T a , S A,
- P p1 A -gt a A p2 A -gt a
- produce ad es
- A -gt2 a
- A -gt1 aA -gt2 aa
- A -gt1 aA -gt1 aaA -gt2 aaa
- A -gt1 aA -gt1 aaA -gt1 aaaA -gt2
aaaa ecc... - cioe il linguaggio prodotto dalla G6 e'
- L(G6) ai igt 0
20linguaggi a struttura di frase
- esercizio cosa produce la grammatica
- G7 ( V, T, S, P ) con
- V S, A, B, a, b ,
- T a, b ,
- P p1 S -gt AB
- p2 A-gt aA
p3 A -gt a - p4 B -gt Bb
p5 B -gt b - ?
21linguaggi a struttura di frase
- soluzione esercizio la grammatica G7 (
V, T, S, P ) con - V S,A,B, a,b , T a,b ,
- P p1 S -gt AB p2 A-gt aA
p3 A -gt a - p4
B -gt Bb p5 B -gt b - produce ad es
- S -gt1 AB -gt3 aB -gt5 ab
- S -gt1 AB -gt2 aAB -gt3 aaB -gt5 aab
- S -gt1 AB -gt2 aAB -gt4 aABb -gt4 aAbb
-gt3 aabb - S -gt1 AB -gt2 aAB -gt4 aABb -gt2 aaABb
-gt2 aaaABb - -gt3 aaaaBb -gt4 aaaabb
- ecc,
- quindi
- L(G7) aibk igt0, kgt0
22linguaggi a struttura di frase
- ripetiamo
- grammatiche a struttura di frase, composte da
- G (V,T,P,S) con S simbolo di
partenza - V a, b, y, P, Q, ... vocabolario
simboli di G - T a, b, y simboli terminali
di G - P p1,p2... produzioni
- definizione un linguaggio a struttura di frase
generato da G e' linsieme delle stringhe
sull alfabeto T (simboli terminali) che possono
essere derivate (direttamente o indirettamente)
da S - L (G) w w ? T , S w
23- vediamo ora una
- rappresentazione grafica
- della catena di derivazioni che porta dal
- simbolo iniziale S ad una stringa di simboli
- terminali cioe' ad una frase del linguaggio
- e che visualizza graficamente la struttura
- della frase la rappresentazione grafica della
catena di derivazione si dice albero sintattico
24struttura di una frase e albero sintattico
- riprendiamo G1 (V,T,P,S),
- Vcane, gatto, morde, guarda, N,V
- T cane, gatto, morde, guarda
- cinque produzioni p1 S-gt N V N
- p2 V-gt morde p3 V-gt guarda
- p4 N-gt cane p5 N-gt gatto
- la frase "gatto morde cane" e' del L(G1), e si
deriva con la catena di derivazioni - S -gt1 N V N
- -gt2 N morde N
- -gt5 gatto morde N
- -gt4 gatto morde cane
25struttura di una frase e albero sintattico
- riprendiamo G1 (V,T,P,S),
- Vcane, gatto, morde, guarda, N,V
- T cane, gatto, morde, guarda
- cinque produzioni p1 S-gt N V N
- p2 V-gt morde p3 V-gt guarda
- p4 N-gt cane p5 N-gt gatto
- la frase "gatto morde cane" e' del L(G1), e si
deriva con la catena di derivazioni - S -gt1 N V N
- -gt2 N morde N
- -gt5 gatto morde N
- -gt4 gatto morde cane
- la catena di derivazioni si rappresenta con l'
albero sintattico a destra
S
1
NVN
5
4
2
gatto
cane
morde
ALBERO SINTATTICO
26struttura di una frase e albero sintattico
- una catena di produzioni che porta dal S ad una
stringa del linguaggio puo essere data in forma
grafica
interpretaz. grafica della derivazione S -gt1 AB
-gt2 aAB -gt4 aaB -gt5 aab
G7 ( V, T, S, P ), V S, A, B, a, b T
a, b P p1 S -gt AB p2 A -gt aA
p3 B -gt Bb p4 A -gt a p5 B -gt b
stringa aab del ling. L(G7) ha la struttura a
destra
27struttura di una frase e albero sintattico
5
b
G7 ( V, T, S, P ), V S, A, B, a, b T
a, b P p1 S -gt AB p2 A -gt aA
p3 B -gt Bb p4 A -gt a
p5 B -gt b una derivazione S -gt1 AB -gt2
aAB -gt2 aaAB -gt4 aaaB -gt3 aaaBb -gt3 aaaBbb
-gt5 aaabbb
stringa con albero a destra
28linguaggio delle espressioni aritmetiche senza
parentesi
- G8 grammatica (semplificata) delle espressioni
aritmetiche senza parentesi, del tipo
abba - i simboli terminali sono a,b, ,
- non c'e' priorita' tra i due operatori e
- G8 T a,b,,, V a,b,,, S, P
p1,p2,p3,p4 - p1 S-gt SS p2 S-gt SS p3 S-gt a
p4 S-gt b -
- le produzioni p1 e p2 sono "ricorsive", ad
esempio in - p1 S -gt S S qui il simbolo S a
sinistra della " -gt " - che e la parte definita dalla produzione ()
- appare anche a destra parte definente nella
produzione - -------------------------------------------------
--------------------------------------------------
------------------------------------------- - () nb s -gt q leggi " s produce q",
leggi anche - "la stringa q deriva da s", e anche " s e
definita come q"
29linguaggio delle espressioni aritmetiche
- continua
- G8 ( V,T,P,S ) grammatica "espressioni
aritmetiche" - T a,b,,, V a,b,,, S, P
p1,p2,p3,p4 - p1 S-gtSS p2 S-gtSS p3
S-gta p4 S-gtb - (nota le produzioni p1 e p2 di
tipo ricorsivo) - es. di catene di produzioni
- 1) S -gt3 a "a" e una frase
- 2) S -gt1 SS -gt4 Sb -gt4 bb
- 3) S -gt2 S S -gt3 a S -gt4 a b
- 4) S -gt2 SS -gt1 SSS -gt3 aSS -gt3 aaS
-gt3 aaa
30linguaggio delle espressioni aritmetiche
- ancora per G8(T,V,S,P) con Ta,b,,, V
a,b,,, S, - Pp1,p2,p3,p4
- con p1
S-gtSS p2 S-gtSS - p3
S-gta p4 S-gtb - ancora due esempi di derivazione
- 5) S -gt2 S S -gt2 S S S -gt1 S
S S S - -gt3 a S S S -gt4 a b
S S - -gt3 a b a S -gt4 a b
a b - 6) S -gt1 SS -gt2 SSS -gt1 SSSS
-gt3 aSSS - -gt4 abSS -gt1 abSSS -gt4
abbSS - -gt5 abbaS -gt4 abbab
- ... G8 genera delle stringhe che possono
essere interpretate come semplici
espressioni aritmetiche senza parentesi.
31linguaggio delle espressioni aritmetiche
albero sintattico
- la catena di derivazione implica la struttura
della frase. -
- G8(T,V,S,P), Ta,b,,, Va,b,,, S,
Pp1,p2,p3,p4 - p1 S-gtSS p2 S-gtSS p3
S-gta p4 S-gtb
un esempio derivazione (struttura) della
stringa aa S -gt2 SS -gt3 aS -gt3
aa la struttura dell' albero viene dalle
derivazioni !
S
2
2
S
S
2
3
3
a
a
32linguaggio delle espressioni aritmetiche
albero sintattico
- la catena di derivazione implica la struttura
di una frase. -
- G8(T,V,S,P), Ta,b,,, Va,b,,, S,
Pp1,p2,p3,p4 - p1 S-gtSS p2 S-gtSS p3
S-gta p4 S-gtb
S -gt2 SS -gt1 SSS -gt3 aSS
-gt3 aaS -gt3 aaa a destra
lalbero sintattico corrispond. (radice S in
alto, nodi intermedi S, foglienodi terminali in
basso a,,a,,a sui rami sono segnate le
produzioni) Quindi aaa,frase del linguag-gio I8
generato dalla grammat. G8, si interpreta
come a (aa) e non (aa)a !
33espressioni aritmetiche grammatiche ambigue
- attenzione pero ... la grammatica G8
- G8 (T,V,S,P) con T a,b,,, V a,b,,,
S, P p1,p2,p3,p4 - p1 S-gtSS p2 S-gtSS p3
S-gta p4 S-gtb - se una G permette di ottenere la stessa stringa
con catene di - produzioni diverse, diremo che e una grammatica
ambigua, - in G8 la frase aaa puo essere ottenuta con
derivazioni diverse, e puo essere
interpretata con strutture diverse - S -gt2 SS -gt1 SSS -gt aSS -gt aaS
-gt aaa - che si interpreta come a (aa) - come
visto prima, - S -gt1 SS -gt2 SSS -gt aSS -gt aaS
-gt aaa - che si interpreta invece come (aa)a !
34espressioni aritmetiche grammatiche ambigue
- attenzione pero ... la grammatica G8
- G8 (T,V,S,P) con T a,b,,, V a,b,,,
S, P p1,p2,p3,p4 - p1 S-gtSS p2 S-gtSS p3
S-gta p4 S-gtb - se una G permette di ottenere la stessa stringa
con catene di - produzioni diverse, diremo che e una grammatica
ambigua, - quindi se la stessa stringa puo avere due
strutture diverse, - allora, interpretando la struttura
- (nel senso di sequenza di operazioni
aritmetiche - dove associo alle variabili dei valori
numerici) - ottengo due valori diversi!
- per un linguaggio di programmazione (che deve
essere non ambiguo) la grammatica G8 non va
bene ma nota che una
grammatica ambigua non - implica che il
linguaggio sia ambiguo -
35linguaggi a struttura di frase
- come in un dato linguaggio generato da una data
grammatica posso produrre la stessa stringa
(frase) con due catene di derivazioni diverse,
cosi' anche - un linguaggio puo' esser prodotto da piu'
grammatiche - - def. se un linguaggio non ha alcuna
grammatica - che lo generi di tipo non ambiguo
- (cioe tutte le grammatiche che lo generano sono
ambigue) - allora diremo che e un
linguaggio ambiguo. - abbiamo visto che G5 (T,V,S,P), T a,b,,,
V a,b,,, S, - P p1 S-gtSS p2 S-gtSS
p3 S-gta p4 S-gtb - e una grammatica ambigua -
- ma vediamo ora che lo stesso linguaggio puo
essere descritto con una grammatica NON ambigua
36linguaggi a struttura di frase
- la grammatica seguente G9 produce lo stesso
linguaggio della G8 ma non e' ambigua. Qui sono
introdotti due nuovi simboli non terminali (due
categorie sintattiche), T e F - (termine e fattore)
- G9 ( V,T,P,S ), con T a,b,,, V
a,b,,, S,T,F, e - P p1 S-gtST p2 S-gtT
("termine" significato...) - p3 T-gtTF p4 T-gtF (
"fattore"significato... ) - p5 F-gta p6 F-gtb ( a,b sono
"variabili"... ) - es.
- S -gt1 ST -gt2 TT -gt3 TFT -gt4
FFT -gt4 - FFF -gt3 aFF -gt
aaF -gt aaa - aaa ha la struttura sintattica ( termine
termine ) - dove il 1.o termine e dato da (fattore
fattore)
37- G9 ( V,T,P,S ), con T a,b,,, V
a,b,,, S,T,F, - P p1 S-gtST p2 S-gtT
- p3 T-gtTF p4 T-gtF
- p5 F-gta p6 F-gtb
- S -gt1 ST -gt2 TT
- -gt3 TFT -gt4 FFT
- -gt4 FFF -gt3 aFF
- -gt5 aaF -gt5 aaa
-
- che ha quindi la struttura
- ( aa ) a
- come evidenziato dall
- albero sintattico a destra
38- es. due gramm. diverse per lo stesso
linguaggio, es. di precedenza di valutazione da
destra a sinistra o viceversa - G10 ( V,T,S, P ) con
- V a,b,c,-,A,S T a,b,c,-
- P S -gt A S -gt S - A
- A -gt a A-gt b
- A -gt c --gt
- interpretazione da sinistra a destra
- G11 ( V,T,S, P ) con
- V a,b,c,-,A,S T a,b,c,-
- P S -gt A S -gt A - S
- A -gt a A-gt b
- A -gt c --gt
- interpretazione da destra a sinist.
a-b-c (a-b)-c da sinistra a destra
a-b-c a-(b-c) da destra a sinistra
39linguaggi a struttura di frase
- abbiamo cosi visto
- alcuni concetti relativi alle
- grammatiche a struttura di frase
- def. di grammatica
- def. di derivazione diretta / catena di
derivazione - albero sintattico / struttura della frase
- ambiguita grammatica ambigua, linguaggio
ambiguo
40- grammatiche generative -
- analisi sintattica
- accettazione di una stringa ben formata
- e
- riconoscimento della struttura
- di una stringa
41premessa traduzione
- premessa
- alcune osservazioni
- introduttive
- sui linguaggi di programmazione
42premessa traduzione
- un calcolatore esegue delle procedure di
elaborazione dati descritte con dei programmi
(software) piu' precisamente, le istruzioni del
programma, memorizzate nella memoria centrale,
sono eseguite una dopo l'altra dall' unita'
centrale. - un programma
- e' la descrizione completa di tutta la sequenza
delle azioni da fare per ottenere qualcosa da un
calcolatore, compresa la descrizione completa dei
dati elaborati (iniziali, intermedi, finali)
ovvero - e' una lista di istruzioni (descrive azioni e
dati) da far eseguire ad un calcolatore per
ottenere un risultato,
43premessa traduzione
- un calcolatore esegue delle procedure di
elaborazione dati descritte con dei programmi
(software) piu' precisamente, le istruzioni del
programma, memorizzate nella memoria centrale,
sono eseguite una dopo l'altra dall' unita'
centrale. - il programma (la lista istruzioni) deve essere
scritto - in un linguaggio comprensibile direttamente al
calcolatore - (linguaggio della macchina, o Linguaggio
Macchina LM) - oppure puo' essere scritto in un linguaggio
intermedio, - comprensibile ad una persona e ad una
macchina, ma in - tale caso deve prima essere tradotto per
poter dopo essere - eseguito.
44premessa traduzione
- Abbiamo detto che un programma e' la
descrizione di tutta la sequenza delle azioni da
fare per ottenere qualcosa dal calcolatore,
compresa la descrizione completa dei dati
(iniziali, intermedi, finali) - - il programma deve essere scritto in un linguaggio
comprensibile al calcolatore .... - ma ogni calcolatore ha un suo linguaggio
macchina LM - esistono tanti LM quanti sono i diversi
calcolatori (vedremo questo in seguito) qui un
elenco brevissimo - EDSAC ('48), IBM7090('57), IBM/360('65),
Digital PDP11('71), Zilog Z80('75), Intel 8086
('79), PowerPC 601 ('91), PowerPC G5 (02), Intel
Pentium 4 HT (03) ecc - negli anni 50 i programmi venivano
effettivamente scritti in linguaggio macchina
....
45premessa traduzione
- un programma scritto nel LM di un calcolatore X
- puo' essere eseguito solo da tale macchina ....
- per poter eseguire un programma su macchine
diverse e' necessario usare un linguaggio
"intermedio" - (nel senso che puo' essere capito
"abbastanza" facilmente sia da una persona che da
una macchina) - non vincolato ad
una macchina specifica, - dal 55 ad oggi sono state definite diverse
- migliaia di linguaggi di programmazione
(qualche 10000...) - esistono molti tipi di linguaggi intermedi,
- procedurali (es. Fortran, C, ...)
- funzionali (es. Lisp)
- logici (es. Prolog) ecc ...
46premessa traduzione
- diversi tipi di linguaggi intermedi -
- in particolare ci interessano i linguaggi
procedurali - o LP - i LP sono linguaggi progettati per descrivere
procedimenti di calcolo (procedure di calcolo), - alcuni nomi Fortran ('57..'90..), Cobol
('59), Algol '60, Basic (65), Algol68(68),
Pascal (71), C ('71), Ada ('78), C(84),
Java(94), C(2001) - -gt il programma scritto in LP deve essere
tradotto nel LM di un particolare calcolatore - un LP e'definito in modo che la traduzione da LP
in LM e' eseguita da una macchina (in modo
meccanico) velocemente cioe' da un calcolatore,
e il procedimento di traduzione e' specificato
nel programma di traduzione o traduttore.
47- continua nota sui linguaggi di programmazione
- un programma (testo "sorgente") e' scritto in un
dato linguaggio di programmazione LP (C,
Pascal, Fortran, ...), - il traduttore (il programma di traduzione
eseguito su un calcolatore) traduce il
programma da LP nel linguaggio macchina LM
48- il linguaggio LP e' definito in modo che la
traduzione puo essere meccanica cioe' fatta da
un programma traduttore, detto compilatore
il compilatore deve tradurre il nostro programma
-gt quindi deve riconoscere se e scritto
correttamente se e una frase del linguaggio
di programmazione usato e deve riconoscere la
sua struttura per tradurlo! ...
49- il compilatore esegue
-
- un' analisi lessicale - per individuare
i componenti - elementari (nomi, operatori, simboli
riservati ecc), - un' analisi sintattica della struttura del
programma, e - in particolare della struttura sintattica
del programma -
- infine traduce il testo LP in un programma
- "equivalente" in LM (analisi semantica)
- il compilatore deve riconoscere se il programma
scritto in un LP rispetta le regole della
grammatica di quel linguaggio !
50analisi sintattica riconoscimento della
struttura
- data una grammatica G e data una stringa s
- si deve riconoscere
- 1) se s appartiene al linguaggio
L(G), - (cioe se s e una s.b.f. ovvero
- se s e grammaticalmente
corretta) - e 2) come la s e producibile dalla G
- (cioe individuare la catena delle
produzioni - che produce s a partire da S,
- e quindi la struttura della s)
- questo procedimento si dice
-
analisi sintattica
51analisi semantica
- una volta riconosciuta una stringa come frase del
linguaggio (ovvero riconosciuto un testo come un
programma grammaticalmente corretto) - il compilatore ((che a questo punto conosce tutti
gli elementi costitutivi di base (identificatori,
costanti, separatori, parole chiave, commenti
ecc) e la struttura della frase (del programma)
)) dicevamo, - il compilatore puo' procedere alla traduzione
vera e propria, in base a regole (date una volta
per tutte) sulla traduzione dei singoli pezzi dal
linguaggio (Pascal, C ecc) in linguaggio
macchina - questa fase si dice analisi semantica
- segue un micro esempio..
52traduzione di un'istruzione molto semplice
- un esempio banale
- cab
- (istruzione linguaggio C)
- dove a,b,c sono variabili
- di indirizzi di memoria
- 7700, 7704, 7708
- per una macchina (unita'
- centrale) con istruzioni macchina del tipo
- carica da mem.in reg.
- move indirizzo,registro
- oper.aritm.reg-reg
- add registro,registro,
- copia da reg in mem
- move registro,indirizzo
dopo l'analisi lessicale (calcola indirizzi dei
simboli a,b,c) e sintattica (struttura) l'istruzio
ne sara' tradotta in linguaggio macchina, (R5,..
registri di lavoro) es move 7708,R7 //indir
di c in R7 move 7700,R5 // valore di a in
R5 move 7704,R6 // valore di b in R6 add R5,R6
// somma a in b move R6,(R7) //
memor.risult.da R6 // in
memoria indir.c che corrisponde
all'istruzione cab ovvero ( c ( a b)
) riscritta in notazione postfissa cab
ovvero (c ( ab ) )
53dove sta la grammatica in un compilatore ?
- per la maggior parte dei compilatori
- la grammatica del linguaggio e' inserita NEL
compilatore, - una volta per tutte, come pure la descrizione
della macchina cui e' destinata la traduzione - esistono compilatori dove la descrizioni del
linguaggio e' fornita con un testo (una tabella)
esterno, e - esistono compilatori dove la descrizione della
macchina di destinazione e' fornita con delle
tabelle esterne - - cambiando tabelle puo' cambiare il linguaggio
cui il compilatore e' destinato, e/o - puo' cambiare la macchina cui la traduzione e'
destinata.
54esempio di grammatica in un compilatore esterna
Gramm Pascal
descriz IstruzA
gramm S
cpu X
Pascal Prog.p
COMPILATORE con SINTASSI S e per CPU X
CPU_A
esempio qui il compilatore legge da file esterno
la descrizione delal grammatica e la descrizione
della macchina cui e' destinata la traduzione ...
Gramm C
descriz IstruzB
cpu X
gramm S
Progr. C
COMPILATORE con SINTASSI S e per CPU X
CPU_B
55esempio di analisi sintattica (cenni)
- esempio di riconoscimento di una stringa
- data una grammatica
- G19 (V,T,S,P),
- con V S, A, x, y, z , T x, y, z
, - e con P p1 S -gt xA p2 A-gt z p3
A -gt yA - voglio sapere se la stringa xyyyz e'
producibile da G19, - ovvero
- se si puo derivare s da S,
- ovvero
- se esiste una catena di derivazione S -gt s
- diremo che se s deriva da S allora abbiamo
riconosciuto s come stringa del linguaggio L(G19)
56esempio di analisi sintattica (cenni)
- data G19 (V,T,S,P), con V S,A,x,y,z,
Tx,y,z, - e con P p1 S -gt xA p2 A-gt z p3 A -gt
yA - riconoscere s xyyyz significa cercare una
catena di derivazione S -gt s - in genere s non e' ottenibile da S con una sola
produzione - cerco quindi una produzione pk che
generi almeno la parte iniziale di s - divido s xyyyz in due parti xyyyzxT,
- quindi la stringa da riconoscere e'
- s xT xyyyz, (Tyyyz),
- cerco allora una pk che generi una x iniziale
- tra le produzioni trovo p1 che produce una x
iniziale - S -gt xA
- al posto del problema trova catena produzioni S
-gt xyyyz - ho ora xA -gt xyyyz cioe' trova catena A
-gt yyyz
57esempio di analisi sintattica (cenni)
- ripetizione
- data G19 (V,T,S,P), con V
S,A,x,y,z, Tx,y,z, - e con P p1 S -gt xA p2 A-gt z
p3 A -gt yA - riconoscere s xyyyz equivale a
riconoscere - s xT xyyyz, (Tyyyz),
- cerco allora una pk che generi una x
iniziale - tra le produzioni trovo la p1 che
produce una x iniziale - S -gt xA
- quindi invece di S -gt
xyyyz ? - possiamo considerare xA -gt xyyyz
- possiamo dire di avere riconosciuto x,
- le due stringhe a sinistra e a destra iniziano
entrambe con x, lo tolgo, ... e quindi ora il
problema e' trovare se - A
-gt yyyz
58cont. esempio di analisi sintattica (cenni)
- data G19 (V,T,S,P), con V S,A,x,y,z,
Tx,y,z, - e con P p1 S -gt xA p2 A-gt z p3
A -gt yA - data s xyyyz domanda S s ?
- il procedimento consiste nel provare le
produzioni possibili, scelgo quella che mi da'
la parte iniziale uguale - S -gt xyyyz da la parte
iniziale di s, qui "x". - p1 S-gt xA xyyyz provo p1, "riconosco"
x, e lo elimino - ora devo
riconoscere yyyz come A - (cioe' se A
puo' produrre s2 yyyz) - A yyyz s2 inizia con y,
scelgo la p3 che da y - p3 A-gtyA yyyz riconosco y e lo
elimino abbiamo cosi' - A yyz riconosciuto i
primi due simboli x,y - della
stringa di partenza xyyyz
59cont. esempio di analisi sintattica (cenni)
- data G19 (V,T,S,P), con V S,A,x,y,z,
Tx,y,z, - e con P p1 S -gt xA p2 A-gt z p3
A -gt yA - data s xyyyz domanda S s ?
- procedim. provo le produzioni possibili, scelgo
quella che - S -gt xyyyz da la parte
iniziale di s, qui "x". - p1 S-gt xA xyyyz provo con p1, riconosco
x, e lo elimino - A yyyz s inizia con y,
scelgo la p3 che da y - p3 A-gtyA yyyz riconosco y e lo
elimino ripeto con - A yyz quello che
rimane A -gt yyz ? provo - p3 A-gt yA yyz ancora con p3 yA -gt
yyz ? riconosco - A yz la y iniziale,
resta da vedere se A-gtyz - p3 A-gt yA yz provo con p3,
riconosco y, elimino - A z cerco produz.
che da A mi da z, e p2 - p2 A -gt z z riconosco z,
elimino - e ho finito - abbiamo ricostruito la catena di derivazione S
s
60cont. esempio di analisi sintattica (cenni)
- data G19 (V,T,S,P), con
- V S,A,x,y,z, Tx,y,z,
- P p1 S -gt xA
- p2 A-gt z p3 A -gt yA
- abbiamo ricostruito la
- catena di derivazione della
- stringa s xyyyz
- S -gt1 xA -gt3 xyA
- -gt3 xyyA -gt3 xyyyA
- -gt2 xyyyz
- e quindi abbiamo anche
- costruito l albero sintattico
- cioe
- la struttura della frase s
1
1
3
3
3
3
3
3
2
61notazione delle produzioni l'operatore oppure
- nota - vi sono diversi formalismi o modi di
scrivere le produzioni - (vedremo in seguito la forma piu'usata o "forma
normale") - al posto di
- P S-gt A S-gt B A -gt xA A
-gt y - scrivo le stesse produzioni anche
cosi - P S -gt A B A -gt xA y
- il simbolo "" sta per alternativa, leggi
"oppure" - S produce A oppure B A produce xA
oppure y
62problemi di riconoscimento
- ma spesso il procedimento di analisi sintattica
di una stringa s (riconoscere la struttura, cioe
la catena delle produzioni che da S produce
s) NON e cosi semplice. Es - G20 ( V x,y,z,A,B,S, T x,y,z, S, P )
.... dove - P p1 S-gt A p2 S-gt B cioe
S produce A oppure B - p3 A -gt xA p4 A -gt y
- p5 B -gt xB p6 B -gt z
-
- nota due produzioni p3 e p5 producono
entrambe stringhe che iniziano con la x - ... vedremo che questo crea dei problemi)
- alcuni es. di derivazioni y e xy
appartengono a L(G20) - S -gt1 A -gt4 y S -gt1 A
-gt 3 xA -gt4 xy
63problemi di riconoscimento
- spesso il procedimento di analisi sintattica di
una stringa s (riconoscere la struttura, cioe la
catena delle produzioni che da S produce s)
NON e cosi semplice. Es - G20 ( x,y,z,A,B,S, x,y,z, S, P ) dove
- P p1 S-gt A p2 S-gt B cioe S
produce A oppure B - p3 A -gt xA p4 A -gt y p5 B -gt
xB p6 B -gt z - (nota vi sono due produz.,p3 e p5 che producono
stringhe che iniziano con la x vedremo che
questo crea dei problemi) - altri esempi di stringhe prodotte dalla G20
- S -gt2 B -gt6 z
- S -gt2 B -gt5 xB -gt6 xz
- S -gt1 A -gt3 xA -gt 3 xxA -gt4
xxy - S -gt2 B -gt5 xB -gt5 xxB -gt6
xxz - quindi y, xy, z, xz, xxy, xxz sono producibili
dal L(G20)
64problemi di riconoscimento
- G20 ( x,y,z,A,B,S, x,y,z, S, P ) dove
- P p1 S-gt A p2 S-gt B
- p3 A -gt xA p4 A -gt
y - p5 B -gt xB p6 B -gt
z - esempio riconoscere s xxz (che abbiamo
visto prodotto dalle produzioni 2,5,5,6 - S -gt2 B -gt5 xB -gt5 xxB -gt6
xxz - considero s xxz xt (con txz) quindi da
riconoscere x - p3 e p5 producono una x iniziale, scelgo la
prima, p3 quindi devo riconoscere una A - (catena a ritroso xA prodotto da A
prodotto da S ) - 1) S -gt A xxz
- 3) A -gt xA xxz ho riconosciuto il 1.o x,
rimane da - riconoscere se
A -gt xz quindi cerco - ancora una
produzione A -gt x....
65problemi di riconoscimento
- G20 ( x,y,z,A,B,S, x,y,z, S, P),
- P p1 S-gtA p2 S-gtB
- p3 A -gt xA p4 A -gt y p5
B -gt xB p6 B -gt z - da riconoscere s xxz, s xt (con
txz) quindi da riconoscere x p3 e p5
producono una x iniziale, scelgo p3 quindi
devo riconoscere una A, che e' producibile da S - (derivazioni S-gt1 A, A -gt3 xA )
- p1) S -gt A xxz
- p3) A -gt xA xxz ho riconosciuto il primo
x, rimane da - riconoscere se
A -gt xz, uso la p3 - p3) A -gt xA xz riconosco x, elimino,
resta da riconoscere - se A produce z
....
66problemi di riconoscimento
- G20 ( x,y,z,A,B,S, x,y,z, S, P), P p1
S-gtA p2 S-gtB - p3 A -gt xA p4 A -gt y p5 B
-gt xB p6 B -gt z - da riconoscere s xxz, s xt (con
txz) quindi da riconoscere x p3 e p5
producono una x iniziale, scelgo p3 quindi
devo riconoscere una A (derivaz. xA 3lt- A
1lt- S) - S -gt xxz
- 1) S -gt A xxz
- 3) A -gt xA xxz ho riconosciuto il 1.o x,
rimane da - riconoscere A
-gt xz, uso la p3 - 3) A -gt xA xz riconosco x, elimino, resta
da riconoscere - A z ma-unica produz. che
produce z e la p6, - la p6 produce z, MA inizia con B , nessunaltra
pk produce z ... concludo che ho sbagliato
strada in una delle scelte precedenti! Le
scelte per A -gt? xA erano senza
alternativa, devo cambiare "ritrattare" la
1) S -gt A
67problemi di riconoscimento ripensamenti
- G20 ( x,y,z,A,B,S, x,y,z, S, P), P p1
S-gtA p2 S-gtB - p3 A -gt xA p4 A -gt y p5 B
-gt xB p6 B -gt z - da riconoscere s xxz, cioe da trovare se S
-gt xxz
S -gt xxz la scelta 1) ci
1) S -gt A xxz porta in un vicolo
.... A z ? cieco, quindi
... S -gt xxz devo cambiare
e 2) S -gt B xxz scelgo la p2 5) B
-gt xB xxz poi la p5, infine 5) B -gt xB
xz riconosco z, e ho 6) B -gt z
z finito,e ho la strut-
tura a fianco
2
5
5
5
5
6
il procedimento di ripensamento che si deve
applicare se si arriva ad un punto dove non e
possibile trovare una pro- duzione che vada bene
si dice "backtracking"
68nota...
- Abbiamo visto due algoritmi a backtracking o a
prova e riprova (problema delle 8 regine,
problema del cavallo) - ma abbiamo anche visto che i tempi di esecuzione
crescono enormemente al crescere della dimensione
del problema! - Un programma traduttore deve poter riconoscere
la struttura del programma senza troppi tentativi
infruttuosi, - e senza ripensamenti...
- si pensi ai tempi di traduzione di un programma
di 100 pagine ovvero 5000 righe ... - in effetti i linguaggi di programmazione sono
definiti in modo da consentire un riconoscimento
veloce, senza tornare indietro nel testo (testo
letto e tradotto in una passata)
69problemi di riconoscimento
- talvolta e possibile riscrivere la grammatica in
modo che il processo di riconoscimento non
richieda ripensamenti (senza backtracking)
per la G20 di prima, - P S-gt AB A-gt xAy B-gt xBz
- ricorda le P della G20 producono
stringhe del tipo - y,z,xy,xz,xxy,xxz,xxxy,xxxz ...
- in due produzioni di G20 la parte destra
inizia con lo stesso simbolo x questo causa
backtracking - da evitare! ... - al posto delle P della G20 di sopra definiamo le
produzioni - P1 S-gt xS C C -gt y z
- dove la prima produzione produce una o piu x e
la seconda produzione S -gt C genera una C al
posto di S, - C che poi produce o una y o una z abbiamo ora...
70riconoscimento una grammmatica migliore
- G20bis
- P1p1,2 S-gt xSC p3,4 C -gt yz
- p1 S -gt xS cioe S produce una o piu x,
- p2 S -gt C cioe' S genera una C che poi
- p3 S -gt yz ovvero C produce una y (p3) o
una z (p4) - ora per riconoscere xxz
- S -gt xxz ?
- S -gt1 xS -gt xxz riconosco x, elimino,
guardo il resto - S -gt xz di nuovo la
produzione p1 - S -gt1 xS -gt xz riconosco x, elimino,
guardo il resto - S -gt z per riconoscere z
non va bene p1 o p2 - S -gt2 C -gt z ma indirettamente
C-gtz, e S-gtC - C -gt4 z z provo con p4, riconosco
z e ho finito.
71riconoscimento una grammmatica migliore
- ...
- una grammatica tale da consentire un
- riconoscimento veloce di una stringa
- (e quindi tale che permetta una
- traduzione veloce dei nostri
programmi...) - deve avere alcune proprieta' ...
- per definire una "buona" grammatica che poi
consenta un riconoscimento veloce vi sono
diverse precauzioni da usare - ma noi ci fermiamo qui
- ...
72esercizi sull' analisi sintattica - primo
esercizio
- esercizio
- definire una grammatica che produce stringhe del
tipo - 1.0
- 33.22
- 4.5E-2
- 77.88E123
- (costante floating senza segno)
- segue una soluzione
trovare una grammatica per le stringhe date
significa trovare uno schema di struttura
comune a tutte queste stringhe .. individuo due
parti, la parte cifre e la parte esponente a
loro volta le due parti hanno una struttura...
73esercizi sull' analisi sintattica - primo
esercizio
- es. definire una grammatica che produce stringhe
del tipo - costante floating senza segno
- 1.0
- 33.22
- 4.5E-2
- 77.88E123
- segue una soluzione
trovare grammatica per le stringhe date
significa trovare uno schema di struttura
comune a tutte queste stringhe individuo due
parti, la parte cifre e la parte esponente a
loro volta le due parti hanno una
struttura parte cifre e' fatta da due parti
intere separate da un punto , parte esponente e'
fatta da una E seguita da un segno seguito da un
intero...
74esercizi sull' analisi sintattica - primo
esercizio
- 1.0 2.3 33.22 4.5E-2 3.3E-5
77.88E123 - costante float ha due parti, la parte cifre e la
parte esponente a loro volta le due parti hanno
una struttura parte cifre e' fatta da due parti
intere separate da un punto , parte esponente e'
fatta da una E seguita da un segno seguito da un
intero... - G21 ( S, T, V, P ), con T
(0,1,2,3,4,5,6,7,8,9,0,,-,E) - S X Y (X cost senza parte espon, Y
con espon) - X I . I (I intero senza segno)
- I C C I ( C cifra, un Intero e' una o
piu' cifre) - Y X E Z I (costante con parte esponente)
- Z - (segno)
- es. di derivazione per le due stringhe 1.0 e
3.3E-5 - S -gt X -gt I.I -gt C.I -gt 1.I -gt 1.C
-gt 1.0 - S -gt Y -gt X E Z I -gt I.I E Z I -gt C.CEZI -gt
3.3EZI -gt 3.3E-5
75esercizi sull' analisi sintattica - primo
esercizio
- riprendiamo la grammatica di costante floating
senza segno -
- G21 ( S, T, V, P ), con T (0,1,2,3,4,5,6,7,8,
9,0,,-,E) - S X Y (X cost senza parte espon, Y con
espon) - X I . I (I intero senza segno)
- I C C I ( C cifra, un Intero e' una o
piu' cifre) - Y X E S I (costante con parte esponente)
- S - (segno)
-
- con questa grammatica posso produrre anche
costanti tipo -
- 1234567987654.12345678987654E1234567898765432
1 -
- perche' questa grammatica non specifica
limiti -
- esempio di stringa non corretta
- 1E-2 ... manca il punto (le
cifre del dato sono prodotte da X, con la
produzione X-gt I . I )
76- riprendiamo ancora alcune considerazioni...
- l analisi sintattica e alla base di ogni
programma traduttore (compilatore) da un
linguaggio di programmazione (Pascal, C, Fortran,
...) in linguaggio macchina - il compilatore deve ricostruire la derivazione
- S -gt programma,
- e cioe lalbero sintattico ovvero la struttura
del programma - (programma frase del linguaggio Pascal o C..)
- e in base alla struttura traduce il nostro
programma in linguaggio macchina - ( mantenendo il significato semantica del
programma ) - La gramm. e (quasi) sempre "incorporata" nel
compilatore.
77- riprendiamo ancora alcune considerazioni...
- l analisi sintattica il compilatore deve
ricostruire la catena di derivazione - S -gt programma,
- cioe lalbero sintattico o la struttura del
programma (programma frase del linguaggio C ) - in generale una prima parte del compilatore
riconosce le "parole", ovvero gli
"identificatori", - e ricostruisce il lessico usato nel programma (fa
un "dizionario" delle parole usate nel programma)
... gt - questa parte si chiama analisi lessicale
78traduzione di un programma dalla versione Ada
o Pascal o C alla versione in linguaggio
macchina con lo stesso significato (stessa
semantica)
79esercizi sull' analisi sintattica - secondo
esercizio
- data G21 ( V, T, S, P ), T a,b,1,2 , V
T u L,C,I,S , - P p1 S -gt I
- p2 I -gt IL p3 I -gt IC p4 I
-gt L p5 I -gt C - p6 L -gt a p7 L -gt b p8 C
-gt 1 p9 C -gt 2 - es
- S -gt1 I -gt3 IC -gt2 ILC -gt3 ICLC -gt4
LCLC - -gt6 aCLC -gt8 a1LC -gt6 a1aC -gt9
a1a2 - (nota L lettera, Ccifra, I
Itemelemento) - domanda
- 2b2 appartiene a L(G21) ?
- ovvero e producibile dalla grammatica G11 ?
- segue soluzione
80continua 2.o esercizio sull' analisi
sintattica
- G21 P 1 S-gt I 2 I-gt IL 3
I-gt IC 4 I-gt L - 5 I-gt C 6 L-gt a 7 L-gt b 8
C-gt 1 9 C-gt 2 - domanda 2b2 appartiene a (e producibile
da) L(G21) ? - per riconoscere 2b2 procedo come segue
- ? -gt 2b2 cerco produz. con 2 in 1.a
posiz. a dest., e' la p9 - C? -gt9 2b2 quindi C seguito da ? produce 2
seguito da b2 - ? -gt Cb2 cerco produzione con C in 1.a
posiz.a destra - I? -gt5 Cb2 solo la p5 produce C come
richiesto, quindi - ? -gt Ib2 -gt5 Cb2 -gt9 2b2 dopo 2 tentativi di
riconoscimento
81continua 2.o esercizio sull' analisi
sintattica
- G21 P 1 S-gt I 2 I-gt IL 3
I-gt IC 4 I-gt L - 5 I-gt C 6 L-gt a 7 L-gt b 8
C-gt 1 9 C-gt 2 - ... (continua) per riconoscere 2b2 abbiamo
trovato - ? -gt Ib2 -gt5 Cb2 -gt9 2b2 dopo 2 tentativi di
riconoscimento - ? -gt Ib2 devo ottenere I in 1.a posizione a
destra - provo (in ordine) le produzioni che
soddisfano questa condizione - provo con p1
- S -gt1 I che da' luogo alla catena di
produzioni - S -gt1 I -gt5 C -gt9 2 ... ma rimane da
riconoscere b2 ! -gt - queste scelte fatte per ricostruire questa
catena non e' ok-gt - cambio ? C-gt9 2 non si puo' cambiare, I-gt5 C
non si puo', cambio S-gt1 I, scelgo la
prossima p che produce I in 1.a posizione I-gt2
IL per produrre I in 1.a posizione, -gt - I -gt2 IL -gt5 CL -gt9 2L ... rimane da
trovare se L -gt b2
82continua 2.o esercizio sull' analisi
sintattica
- G21 P 1 S-gt I 2 I-gt IL 3
I-gt IC 4 I-gt L - 5 I-gt C 6 L-gt a 7 L-gt b 8
C-gt 1 9 C-gt 2 - S -gt ? 2b2 ... dopo alcuni tentativi si
propone la catena - S -gt1 I -gt2? IL -gt? Ib2 -gt5
Cb2 -gt9 2b2 - rimane da trovare se L -gt b2 ...
- dopo altri tentativi, sempre applicando le
produzioni in ordine, si trova che - S -gt1 I -gt3 IC -gt2 ILC -gt5
CLC -gt9 2LC - -gt7 2bC -9 2b2
- ... per riconoscere la stringa molto semplice 2b2
abbiamo - dovuto ritrattare piu' volte una scelta di
produzione ! - ... non e' una grammatica che consenta
- un riconoscimento veloce ...
83continua 2.o esercizio sull' analisi
sintattica
- G21 P 1 S-gt I 2 I-gt IL 3
I-gt IC 4 I-gt L - 5 I-gt C 6 L-gt a 7 L-gt b 8
C-gt 1 9 C-gt 2 - G21bis cambio la grammatica in modo da avere le
produzioni ricorsive a sinistra invece che a
destra, e in modo da non avere lo stesso simbolo
all'inizio della parte destra in piu' produzioni
vediamo come si riconosce 2b2 ... - P 1 S-gt I 2 I-gt II 4 I-gtL
5 I-gtC - 6 L-gt a 7 L-gt b 8 C-gt 1
9 C-gt 2 - Cb2 -gt9 2b2
- I? -gt5 Cb2 riconosco 2 come una C, e
C come una I - poi analizzo il
resto della stringa... - L? -gt7 b2
- ? -gt? 2 come gia' visto, C
-gt9 2, e - I -gt5 C abbiamo cosi'
riconosciuto tutta la 2b2
84continua 2.o esercizio sull' analisi
sintattica
- G21bis
- P 1 S-gt I 2 I-gt II 4