• Non ci sono risultati.

La definizione formale di grammatica

N/A
N/A
Protected

Academic year: 2021

Condividi "La definizione formale di grammatica"

Copied!
28
0
0

Testo completo

(1)

Grammatiche

• Gli automi sono un modello riconoscitivo/traduttivo/elaborativo (di linguaggi):

essi “ricevono” una stringa nel loro ingresso e la elaborano in vari modi

• Passiamo ora ad esaminare un modello generativo:

una grammatica produce o genera stringhe (di un linguaggio)

• Concetto generale di grammatica o sintassi (matematicamente, alfabeto e vocabolario e grammatica e sintassi sono sinonimi):

insieme di regole per costruire frasi di un linguaggio (stringhe): si applica a qualsiasi nozione di linguaggio nel senso più lato.

• In modo sostanzialmente simile ai normali meccanismi linguistici una

grammatica formale genera stringhe di un linguaggio attraverso un processo di riscrittura:

(2)

• “Una frase è costituita da un soggetto seguito da un predicato Un soggetto a sua volta può essere un sostantivo, oppure un pronome, oppure ….

Un predicato può essere costituito da un verbo seguito da un complemento …”

• Un programma è costituito da una parte dichiarativa e da una parte esecutiva

La parte dichiarativa …

La parte esecutiva è costituita da una sequenza di istruzioni Un’istruzione può essere semplice o composta ….

(3)

• Un messaggio di posta elettronica è costituito da una testata e da un corpo

La testata contiene indirizzo, ….

• In generale questo tipo di regole linguistiche descrive un

“oggetto principale” (libro, programma, messaggio,

protocollo, ...) come una sequenza di “oggetti componenti”

(soggetti, testate, parti dichiarative, …). Ognuno di questi viene poi “raffinato” rimpiazzandoli con altri oggetti più dettagliati e così via finché non si giunge ad una sequenza di elementi base (bit, caratteri, …)

Le varie riscritture possono presentare delle alternative: un soggetto può essere un nome o un pronome o altro,

un’istruzione può essere di assegnamento o di I/O, ...

(4)

La definizione formale di grammatica

• G = (V

N

, V

T

, P, S)

– VN : alfabeto o vocabolario nonterminale – VT : alfabeto o vocabolario terminale

– V = VN  VT

– S  VN : elemento particolare di VN detto assioma o simbolo iniziale

– P  VN+ V* : insieme delle regole di riscrittura, o produzioni – Per comodità scriveremo    al posto di (, )

(5)

Esempio

• V

N

= {S, A, B, C}

• V

T

= {a,b,c,d}

• S

• P = {S  AB, BA  cCd, CBS  ab, A  }

(6)

Relazione di derivazione immediata

  ,   V+,   V* se e solo se

 = 123,  = 123, 2  2  P

2 si riscrive come 2 nel contesto (1, 3)

Rispetto alla grammatica precedente:

aaBAS  aacCdS

Definiamo poi come al solito la chiusura riflessiva e transitiva di : *

(7)

Linguaggio generato da una grammatica L(G) = {x  V

T*

| S 

*

x}

Consiste di tutte le stringhe costituite da soli simboli terminali derivabili (in numero qualsiasi di passi) da S

(8)

Primo esempio

G1 = ({S, A, B}, {a, b, 0},

{S  aA, A  aS, S  bB, B  bS, S  0}, S) Alcune derivazioni

S  0

S  aA  aaS  aa0 S  bB  bbS  bb0

S  aA  aaS  aabB  aabbS  aabb0 Mediante una facile generalizzazione:

L(G1) = {aa, bb}* . 0

(9)

Secondo esempio

G2 = ({S}, {a, b},

{S  aSb | ab}, S) (abbreviazione per S  aSb, S  ab) Alcune derivazioni

S  ab

S  aSb  aabb

S  aSb  aaSbb  aaabbb

Mediante una facile generalizzazione:

L(G2) = {anbn | n > 0}

Se sostituiamo S  ab con S   otteniamo:

L(G2) = {anbn | n ≥ 0}

(10)

Terzo esempio

S  aACD, A  aAC, A  ,

CD  BDc, CB  BC, B  b, D   Alcune derivazioni

S  aACD  aCD  aBDc  abDc  abc S  aACD  aCD  aC no

S  aACD  aaACCD  aaCCD  aaCBDc  aaCbDc no S  aACD  aaACCD  aaCCD  aaCBDc  aaBCDc  aaBBDcc  aaBBcc 2 aabbcc

Di che linguaggio si tratta?

(11)

Alcune domande “naturali”

• Quale utilità pratica delle grammatiche (oltre ai

“divertimenti” con {a

n

b

n

}?)

• Quali linguaggi si possono ottenere con le grammatiche?

• Che relazioni esistono tra grammatiche e automi (o

meglio tra i linguaggi generati dalle grammatiche e i

linguaggi riconosciuti dagli automi)?

(12)

Alcune risposte

• Definizione della sintassi dei linguaggi di programmazione

• Applicazioni duali rispetto a quelle degli automi

• Esempio più semplice: la compilazione dei linguaggi (non solo di programmazione): la grammatica

definisce il linguaggio; l’automa lo riconosce e traduce.

• In modo un po’ più sistematico:

(13)

• Grammatiche non-contestuali (context-free):

Ogni produzione ha la forma    dove || = 1, cioè  è un elemento di VN.

Non-contestuale perché la riscrittura di  non dipende dal contesto in cui si trova.

Sono di fatto la stessa cosa della BNF usata per definire la sintassi dei linguaggi di programmazione (quindi vanno bene per definire certi meccanismi sintattici tipici dei linguaggi di programmazione e naturali … ma non tutti)

Le G1 e G2 precedenti sono non-contestuali, non così la G3.

Classi di grammatiche

(14)

Grammatiche regolari:

Ogni produzione ha la forma   , dove || = 1,   VT .VN  VT.

Le grammatiche regolari sono anche non-contestuali, ma non viceversa

La G1 precedente è regolare, ma non la G2.

Per la stringa vuota si deve ammettere anche S → 

(15)

Grammatiche monotone:

Ogni produzione ha la forma   , dove || ≤ ||

Per la stringa vuota si deve ammettere S → , però S non deve apparire in parti destre di produzioni

Le grammatiche regolari sono chiaramente monotone

quelle non-contestuali non lo sono, perché si possono avere produzioni del tipo A → . Queste però si possono eliminare abbastanza

facilmente.

es: se ho una produzione B → abaAcDA, la rimpiazzo con le produzioni B → abaAcDA | abacDA | abaAcD

Qualche minimo cenno, poi non ne parliamo più:

i linguaggi delle g. monotone sono anche detti contestuali e sono definiti da Automi Lineari (MT con lunghezza del nastro limitata)

(16)

Relazioni tra grammatiche e linguaggi (gerarchia di Chomsky)

G monotone (tipo 1)

G non-contestuali (tipo 2) G regolari (tipo 3) G generali o non ristrette (tipo 0)

(17)

Se ne deduce immediatamente che:

L

3

 L

2

 L

1

 L

0

Ma i contenimenti sono stretti?

La risposta dal confronto con gli automi

(18)

(senza troppe sorprese)

• GR equivalenti agli Automi a Stati Finiti

– Dato un FSA A, poniamo VN = Q, VT = I, S = q0, e, per ogni (q, i) = q' poniamo

q  i q'

inoltre se q'  F, aggiungiamo q  i – è intuitivo (facile induzione) che

(q, x) = q' se e solo se q  x q' – Viceversa:

– Data una GR, poniamo Q = VN {qF}, I = VT, q0 = S, F = {qF} e, per ogni A  bC poniamo (A, b) = C

per ogni A  b poniamo (A, b) = qF

NB: l’ASF così ottenuto è nondeterministico: molto più comodo!

(19)

• GNC equivalenti a AP (ND!)

giustificazione intuitiva (senza dimostrazione:

la dimostrazione costituisce il “cuore” della costruzione di un compilatore):

consideriamo la grammatica:

S  a S b | ab

(20)

, Z0 / Z0 S

, S / b S a

, S / b a

a, a / 

b, b / 

, Z0 / 

q0 q1

q2

(21)

aabb aSb

S  

a a b b

S

a a b b

bS a

a a b b

bS

a a b b

bb a

a a b b

bb

a a b b

Z0 Z0 Z0

Z0 Z0 Z0

(22)

• Data G costruiamo (a grandi linee) una MT a nastro singolo non deterministica, M, che accetti L(G):

La stringa x si trova nel nastro alla partenza.

– Ciclo:

– Il nastro (durante il funzionamento esso conterrà una stringa g  V*) viene scandito alla ricerca di una parte destra di qualche produzione   di P

– Quando se ne trova una -non necessariamente la prima, operando una scelta ND- essa viene sostituita dalla corrispondente parte

sinistra 

(23)

– In tal modo: g   sse c = <q, > ├

*

<q, g>

– in pratica seguo la relazione di derivazione 

da destra verso sinistra

Se e quando il contenuto del nastro diviene l'assioma S, x viene accettata, cioè <q

0

, x> ├

*

<q

F

, S>, altrimenti questa particolare sequenza di mosse non porta all’accettazione.

Nota: in caso di grammatiche monotone, useremo solo la memoria

occupata inizialmente da x, non celle ulteriori (Automa Lineare),

a parte il caso particolare della stringa vuota.

(24)

terminanti, senza poter concludere che x  L(G) (giustamente), ma neanche il contrario.

Infatti la definizione di accettazione richiede che M giunga in una

configurazione di accettazione se e solo se x  L, ma non richiede che M termini la computazione (in uno stato negativo) se x  L

Tornano in ballo il problema-complemento e l’asimmetria tra risolvere un problema in maniera positiva o in maniera negativa.

(25)

• Viceversa: data MT M (per comodità e senza perdere generalità, a nastro singolo) costruiamo (a grandi linee) una G, che generi L(M):

• In primo luogo G genera tutte le stringhe del tipo x$X, x  V

T*

X essendo una “copia di x” costituita da caratteri

nonterminali (ad esempio, per x = aba, x$X = aba$ABA).

• In effetti G lavora su X per simulare M, potendo

"manipolare" solo nonterminali.

(26)

S  S A' A S  S B' B S  $

A A'  A' A B A'  A' B A B'  B' A B B'  B' B

$A'  a$

$B'  b$

• L’obiettivo è di ricavare da x$X una derivazione x$X  x se e solo se x è accettata da M.

• L’idea base è di simulare ogni mossa di M mediante una derivazione immediata di G:

*

(27)

– Rappresento la configurazione

q

 B A C 

– Mediante la stringa (i casi particolari sono lasciati in esercizio):

$BqAC

– Se è definita:

• (q, A) = <q', A', R> si definisce in G la produzione qA  A' q'

• (q, A) = <q', A', S> si definisce in G la produzione qA  q' A'

• (q, A) = <q', A', L> si definisce in G la produzione BqA  q' BA'

 B dell’alfabeto di M (si ricordi che M è a nastro singolo e quindi ha un solo alfabeto per ingresso, memoria e uscita)

(28)

q

 B A C 

q'

 B A' C 

– Se e solo se: x$BqACx$BA'q'Cecc.

– Aggiungo infine produzioni che permettano a G di derivare da x$BqFACla sola x se -e solo se- M giunge a una

configurazione di accettazione (BqFAC)cancellando tutto ciò che si trova a destra di $, $ compreso.

Riferimenti

Documenti correlati

La mamma di Matteo insegna alla scuola dell'infanzia.. Mario canta una canzone

è formata dal SOGGETTO e dal PREDICATO che sono gli ELEMENTI FONDAMENTALI della frase.. Es: LA MAMMA cucina, cioè la mamma fa l’azione

Trova nelle seguenti frasi, soggetto, verbo/predicato e espansione. Sottolinea il soggetto di verde. Il predicato di rosso e l’espansione di giallo.. 1) Il gatto miagola davanti

Per fortuna l’informatore decide di aiutare ancora l’ispettore fornendogli indizi proprio attraverso il computer. Il numero

Finalmente arrivano informazioni sul complice della Signora Violet, l’abilissima ladra arrestata da Numerik.. Gli indizi sono contenuti in una busta chiusa: l’ispettore Numerik la

Ora riepiloghiamo i tempi del verbo finora conosciuti e facciamo notare ai bambini che esiste un tempo del verbo che non si riferisce né al presente né al passato e né

• “Una frase è costituita da un soggetto seguito da un predicato Un soggetto a sua volta può essere un sostantivo, oppure un pronome, oppure …?. Un predicato può essere

Si noti che sotto le ipotesi del teorema, l’affermazione ”tutti i sistemi sono impossibili oppure nessun sistema e’ impossibile” e’ falsa, cosi’ come e’ falsa