SISTEMI FORMALI GENERATIVI: - PowerPoint PPT Presentation

1 / 153
About This Presentation
Title:

SISTEMI FORMALI GENERATIVI:

Description:

... ('48), IBM7090('57), IBM/360('65), Digital PDP11('71), Zilog Z80('75 ... Pascal Prog.p Gramm Pascal COMPILATORE con SINTASSI S e per CPU X ... – PowerPoint PPT presentation

Number of Views:62
Avg rating:3.0/5.0
Slides: 154
Provided by: stid152
Category:

less

Transcript and Presenter's Notes

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.

2
linguaggi 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

3
linguaggi 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)

4
linguaggi 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

5
linguaggi 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

6
linguaggi 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 ...

7
linguaggi 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

8
linguaggi 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

9
linguaggi 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

10
linguaggi 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

11
linguaggi 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

12
linguaggi 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 !

13
linguaggi 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

14
linguaggi 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

15
linguaggi 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

16
linguaggi 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
    ...

17
linguaggi 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

18
linguaggi 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)

19
linguaggi 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

20
linguaggi 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
  • ?

21
linguaggi 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

22
linguaggi 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

24
struttura 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

25
struttura 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
26
struttura 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
27
struttura 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
28
linguaggio 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"

29
linguaggio 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

30
linguaggio 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.

31
linguaggio 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

32
linguaggio 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 !
33
espressioni 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 !

34
espressioni 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 -

35
linguaggi 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

36
linguaggi 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
39
linguaggi 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

41
premessa traduzione
  • premessa
  • alcune osservazioni
  • introduttive
  • sui linguaggi di programmazione

42
premessa 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,

43
premessa 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.

44
premessa 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
    ....

45
premessa 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 ...

46
premessa 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 !

50
analisi 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

51
analisi 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..

52
traduzione 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 ) )
53
dove 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.

54
esempio 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
55
esempio 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)

56
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
  • 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

57
esempio 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

58
cont. 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

59
cont. 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

60
cont. 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

61
notazione 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

62
problemi 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

63
problemi 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)

64
problemi 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....

65
problemi 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
    ....

66
problemi 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

67
problemi 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"
68
nota...
  • 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)

69
problemi 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...

70
riconoscimento 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.

71
riconoscimento 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
  • ...

72
esercizi 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...
73
esercizi 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...
74
esercizi 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

75
esercizi 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

78
traduzione di un programma dalla versione Ada
o Pascal o C alla versione in linguaggio
macchina con lo stesso significato (stessa
semantica)
79
esercizi 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

80
continua 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

81
continua 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

82
continua 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 ...

83
continua 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

84
continua 2.o esercizio sull' analisi
sintattica
  • G21bis
  • P 1 S-gt I 2 I-gt II 4
Write a Comment
User Comments (0)
About PowerShow.com