1 SISTEMI FORMALI e GRAMMATICHE ( parte 1 - sistemi formali )

  • Published on
    01-May-2015

  • View
    218

  • Download
    2

Transcript

<ul><li> Slide 1 </li> <li> 1 SISTEMI FORMALI e GRAMMATICHE ( parte 1 - sistemi formali ) </li> <li> Slide 2 </li> <li> 2 per capire un'po'le grammatiche dei linguaggi di programmazione e per avere un'idea del procedimento di traduzione eseguito da un compilatore C++, Java, Fortran.. presentiamo di alcune nozioni preliminari * sistemi formali * linguaggi * grammatiche generative * classificazione dei linguaggi alla Chomsky * grammatiche BNF e EBNF * riconoscimento di strutture grammaticali </li> <li> Slide 3 </li> <li> 3 sistemi formali - definizioni: alfabeto Da un punto di vista formale un linguaggio (ad es di programmazione) e' un sistema formale basato su : un alfabeto (un insieme di simboli base predefiniti) con tale alfabeto si possono formare delle stringhe di caratteri,. ad es.: alfabeto 0,1 stringhe: 0, 1010, 11110011110101,... ma: non tutte le stringhe appartengono al linguaggio! un insieme di regole per stabilire se una stringa appartiene al linguaggio e/o per costruire stringhe del linguaggio. vediamo prima delle definizioni... </li> <li> Slide 4 </li> <li> 4 sistemi formali - definizioni : alfabeto, stringa Definizioni ALFABETO - INSIEME FINITO DI SIMBOLI DISTINTI tre es. A1 = { a, b, c } A2 = { (, ) }, A3 = { 0, 1, 2, 3, 4, 5, 6, 7 } dove { a, b, c } sta per "insieme di tre elementi a, b, c" ecc. si definisce: STRINGA su A= sequenza finita (event. vuota) di simboli di A, es. di stringhe su A1: a, caaaaab, babcab, aabcbaa,... su A2: ))), )(, ), ()()((())), (()),... su A3: 0, 42, 313, 1775, 65432107654, </li> <li> Slide 5 </li> <li> 5 sistemi formali - definizioni: lunghezza di stringa abbiamo visto che: alfabeto = insieme A di simboli, si definisce stringa su A = sequenza finita (event.vuota) di simboli di A, si definisce LUNGHEZZA di una stringa s il numero dei simboli di s e si indica con | s | : | s | = lunghezza della stringa s es.: | abba | = 4, | 33 | = 2, |micheze| = 7 se \ e' una stringa vuota di zero caratteri, allora | \ | = 0 </li> <li> Slide 6 </li> <li> 6 sistemi formali - definizioni: A stellato abbiamo visto che: un alfabeto = insieme A di simboli, stringa su A = sequenza finita (event.vuota) di simboli di A, lunghezza di una stringa = |s| = nr.o simboli di s es.: |abba| = 4, |22| = 2, | \ | = 0 si definisce linsieme A stellato A * l'insieme di TUTTE le stringhe che si possono formare con i caratteri (simboli) dell'alfabeto A: A * = { s | s stringa su A, |s| &gt;= 0 } es. se l'alfabeto e' A1= { a,b }, allora A1 * = { a, b, aa, ab, ba, bb, aaa, aab, aba,...} e' un insieme infinito ! </li> <li> Slide 7 </li> <li> 7 sistemi formali - definizioni A2 e A3 abbiamo definito: A = insieme finito di simboli distinti, ad es. { 0, 1 } s = stringa di simboli di A |s| = lunghezza della stringa s (numero simboli di s) A * = insieme A stellato = insieme di tutte le stringhe s che si possono formare con i simboli di A altri esempi di alfabeti e di A * : A2 = { (,) }, ancora un alfabeto di due simboli, A2 * = { (, ), ((, (), )), )(, (((, ((), (),...))), ((((,....} A3 = { 0, 1, 2, 3, 4, 5, 6, 7 } alfabeto di 8 simboli, usato per rappresentare i numeri in base otto (in ottale): A3 * = { 0, 1, 2,.., 10, 11,12,..100,101,102,... 313,... 7,...} sono tutti i numeri in ottale... quanti sono? </li> <li> Slide 8 </li> <li> 8 sistemi formali - esempi A4 seguono due esempi "limite": 4.o esempio: A4, alfabeto vuoto: A4 = 0 [insieme vuoto] - anche in tale caso A4 * esiste ed ha un solo elemento, A4 * e' l'insieme formato da un solo elemento, la stringa vuota \ ( veramente, \ sta per lambda! ;-) quindi: se l' alfabeto e' vuoto: A4 = 0 [insieme vuoto] allora: A4 * = 0 * = { \ } </li> <li> Slide 9 </li> <li> 9 sistemi formali - esempi A5 5. es. A5, alfabeto con un solo elemento, ad es.: un 1, ovvero A5 = { 1 } allora A5 * ha infiniti elementi del tipo 1, 11, 111,... (ricordi il sistema unario?) A5 * = { \, 1, 11, 111, 1111,...} che possiamo scrivere: A5 * = { x | x = \, x = 1 n } (leggi: A stellato e' un insieme di x, dove x puo' essere la stringa vuota oppure una stringa fatta di simboli 1 ripetuti, dove 1 n sta per stringa di simboli 1 ripetuti n volte ) </li> <li> Slide 10 </li> <li> 10 sistemi formali - alcuni esempi A6 es.6) alfabeto con due elementi: (ad es.:) A6 = { 1,X } A6 * e' un insieme di infiniti elementi del tipo: A6 * = { \, 1, X, 11, 1X, X1, XX, 111, 11X, 1X1, 1XX, X11, X1X, XX1, XXX, 1111, 111X, 11X1, 11XX,... XXXX, 11111, 1111X,.... XXXXX,.... } che possiamo scrivere: = { s | s = \ oppure s = z n, con z = 1 oppure z = X } dove z n sta per z ripetuto n volte (stringa di n caratteri) </li> <li> Slide 11 </li> <li> 11 sistemi formali - alcuni esempi A7 es.7) alfabeto A7 con n elementi, ad es. sei: A7 = {a,b,c,d,e,f} A7 * ha infiniti elementi, numerabili A7 * = { \, (stringa vuota) a, b, c, d, e, f, (stringhe di 1 carattere), aa, ab, ac, ad, ae, ba, bc, bd, be,.. ff, (stringhe di 2 caratt) aaa,... fff, (str.di 3 caratteri) ecc ecc } Si osservi che (come e' per ipotesi) se A e' finito allora A * e' numerabile: basta ordinare le stringhe secondo un certo ordine - ad es prima tutte le s con |s|=1, poi tutte le s con |s|=2, poi... : a, b, c, d, e, f, aa, ab, ac, ad, ae, af, ba, bc, bf,.. ff, aaa, aab,.. (ricorda la numerazione in base n, oppure l'ordine lessicogr.) </li> <li> Slide 12 </li> <li> 12 sistemi formali - definizioni: A + ricorda: dato un alfabeto = insieme A di simboli, s = stringa su A = sequenza finita (ev.vuota) di simboli di A, defin. A stellato insieme A * = { s | s stringa su A, |s| &gt;= 0 } due nuove definizioni: si definisce A + = A * - { \ } ovvero: A + { s | s stringa su A, |s| &gt; 0 } es.: dato lalfabeto A8 = { 0,1,2,3,4,5,6,7,8,9 } allora A8 + = { 0, 1, 2,..9, 10, 11,.. 99, 100, 101,.. 999, 1000,... } e linsieme dei numeri interi non negativi. </li> <li> Slide 13 </li> <li> 13 sistemi formali - definizioni: concatenazione definiamo ancora l'operazione di concatenazione: date alcune stringhe su un alfabeto A ad es. A9 = { a, b, c, d } s1 = aa, s2 = bbb, s3 = c, ottengo altre stringhe con la concatenazione: s4 = s1 s2 = aabbb, s5 = s1 s3 s2 = aacbbb diremo per la stringa s5 definita come s5 = s1 s3 s2 che: - s1 = prefisso, - s2 = suffisso, - s1, s2, s3 = sottostringhe di s5 </li> <li> Slide 14 </li> <li> 14 sistemi formali - proprieta'della concatenazione proprieta della concatenazione di stringhe s dellinsieme w = A stellato = A * a) w e chiuso rispetto la concatenazione ovvero: se x,y appartengono a w allora anche z = xy appartiene a w; b) vale la proprieta associativa: x(yz)= (xy)z = xyz c) esiste un elemento identita, che e la stringa vuota \ tale che per qualunque x di w vale \ x = x \ = x d) att: non e commutativa: [se A ha piu di un elem.] esistono x, y tali che xy yx e) per la lunghezza, per qualunque x,y di w vale |xy| = |x| + |y| </li> <li> Slide 15 </li> <li> 15 sistemi formali - definizioni dagli esempi visti finora si vede che se A e finito (come lo e' per ipotesi) allora A * e numerabile ovvero si possono mettere in corrispondenza biunivoca le stringhe di A * ed i numeri naturali e... finalmente, arriviamo alla definizione seguente... </li> <li> Slide 16 </li> <li> 16 sistemi formali e linguaggi / definizioni: linguaggio definizione: un LINGUAGGIO I e un SOTTOINSIEME di A * I c A * definizione: se s appartiene ad I allora diremo che s e' una stringa ben formata, e viceversa: I e' l' insieme delle s.b.f. quindi nell'insieme A * introduco un criterio per cui alcune stringhe di A sono "buone" o "ben formate", altre non lo sono... </li> <li> Slide 17 </li> <li> 17 sistemi formali e linguaggi / definizioni: linguaggio definz: LINGUAGGIO I eun SOTTOINSIEME di A I c A * nel senso seguente: definz: se s (stringa) appartiene ad I diremo che s e' una stringa ben formata, e viceversa: I e' l' insieme delle s.b.f. (stringhe ben form.) diremo (ma senza pretesa moralistica ;-) alcune stringhe di A sono "buone" o "ben formate", altre non lo sono: introduco una "discriminazione" nella popolazione di A * ovvero una proprieta' che alcune stringhe di A * hanno e altre no, da cui riconosco le stringhe ben formate ! </li> <li> Slide 18 </li> <li> 18 sistemi formali e linguaggi / esempio: abbiamo definito un LINGUAGGIO I come un SOTTOINSIEME di A * cioe' I c A * e abbiamo definito le stringhe ben formate: se s appartiene ad I allora diremo che s e' ben formata, e viceversa: I e' l' insieme delle s.b.f. es: A10 = { a,b }, e A10 * = { \, a, b, aa, ab, ba, bb, aaa,..} definiamo il "linguaggio" Ip come Ip = insieme delle stringhe palindrome di A10 * ovvero delle stringhe simmetriche ( se un linguaggio ha delle regole per produrre parole nuove (e in genere ogni linguaggio naturale ha queste regole) allora il numero di parole del linguaggio non e' limitato - non e' finito (*) inteso come insieme di parole ben formate (elencate in un dizionario)"&gt; </li> <li> 22 sistemi formali / come definire I: a)linguaggio dato con elenco completo delle stringhe ben formate di I - metodo applicabile solo per insiemi finiti : e i linguaggi naturali? il linguaggio (*) di Manzoni e' finito; i linguaggi di Camilleri e/o Benni e/o Trabucchi sono finiti? un linguaggio naturale (italiano, azero, wolof, ainu, ecc) e' finito? =&gt; se un linguaggio ha delle regole per produrre parole nuove (e in genere ogni linguaggio naturale ha queste regole) allora il numero di parole del linguaggio non e' limitato - non e' finito (*) inteso come insieme di parole ben formate (elencate in un dizionario) </li> <li> Slide 23 </li> <li> 23 sistemi formali / come definire I: b) in forma parametrica b) linguaggio I su A definito in forma parametrica es.1 : alfabeto A21 = { a,b }, allora: A21 * = { \, a,b,aa,bb,ab,ba,aaa,aab,aba,abb,baa,bab,.... }, A21 * = tutte le stringhe fattibili con i simboli di A11 definiamo ad esempio: I21 = { s = a k b n | k,n&gt;=0 } quindi: I21= linguaggio formato da stringhe s su A, con la proprieta : le stringhe di I21 sono fatte di un po di simboli a seguiti da un po di simboli b -- nota: a 3 = aaa, in generale a k = stringa formata da a ripetuto k volte I21 = { a,b,aa,ab,aaa,aaab,abb,...} </li> <li> Slide 24 </li> <li> 24 sistemi formali / definizione parametrica es.2 : alfabeto di due simboli, zero e uno: A22 = { 0,1 }, linsieme A22stellato e : A22 * = {\, 0, 1,00,01,10,11,100,101,110,.... }, definiamo su A22 un linguaggio come insieme di stringhe formate come un simbolo (0 oppure 1) ripetuto n volte, con n maggiore di zero: I22 = { s = a n | con a = 0 oppure a=1, e n&gt;0 } ovvero { 0,1, 00,11, 000,111, 0000,1111,...} </li> <li> Slide 25 </li> <li> 25 sistemi formali / come definire I: in forma parametrica.... ancora un esempio: es.3 : A23 = { (,) }, A23 * = {\, (, ), ((, )), (), )(, (((, ((),.... }, I23 = { s = ( k ) k | k&gt;0 } linguaggio I23 dato da stringhe formate da un po di parentesi aperte seguite dallo stesso numero di parentesi chiuse: ovvero { (), (( )), ((( ))), (((( )))), ((((( ))))),...} </li> <li> Slide 26 </li> <li> 26 sistemi formali / come definire I:... fine degli esempi di definizione parametrica dell'insieme I; abbiamo detto che SI PUO' DEFINIRE un LINGUAGGIO in vari modi: a)elenco completo b)in forma parametrica c)con un criterio di appartenenza d)con delle regole di produzione vediamo il terzo metodo: definizione di un linguaggio con un criterio di appartenenza </li> <li> Slide 27 </li> <li> 27 sistemi formali / definire I con criterio di appartenenza definizione di un linguaggio I su un alfabeto A con un criterio di appartenenza: dato A appartengono ad un linguaggio I tutte le stringhe di A * che hanno una certa proprieta caratteristica. quindi dato un alfabeto A e l'insieme A * per sapere se una stringa appartiene a I devo controllare se essa possiede la proprieta' richiesta ! es.: tutte le stringhe sull'insieme A * che contengono la sequenza di lettere "ndamen" </li> <li> Slide 28 </li> <li> 28 sistemi formali / definire I con criterio di appartenenza Es.1) : stringhe di parentesi ben formate, definite da: A31 = { ), ( }, A31 * = { \, (, ), ((, )), (), )(, (((, ))), ()(),.... }, I31 = { s | s di A *, s tale che 1) ad ogni ( in s segue una ) e 2) ogni ) in s e preceduta da una ( } es. stringhe di I31: ( ), ( )( ), (( )), ((( ))), ( )( )( ), (( )( )), (( ))(), () (()) ((())) (()) (),.. es di stringhe che non appartengono a I31: ((, ( ) ), ))), )(, (( ),... </li> <li> Slide 29 </li> <li> 29 sistemi formali, definire I con un criterio di appartenenza (cont.) il modo di definire un linguaggio I su un alfabeto A con un criterio di appartenenza: dato A appartengono ad un linguaggio I tutte le stringhe di A * che hanno una certa proprieta caratteristica. Talvolta e possibile definire un automa riconoscitore [una macchina, un programma] che riceve come dato in ingresso una stringa generica s di A stellato e fornisce come risultato la risposta si oppure no. Ritorneremo su questo argomento.... (si provi a scrivere un programma che riconosce se una stringa di caratteri data se e' del tipo ( k ) k oppure no ) </li> <li> Slide 30 </li> <li> 30 sistemi formali, definire I con un criterio di appartenenza ancora due esempi : A32 = { a,b }, A32 * = { \, a,b,aa,bb,ab,ba,aaa,aab,aba,abb,baa,bab,.... }, I32 = { s | s di A *, con s palindroma } ricorda: stringa palindroma = simmetrica rispetto il centro stringa, esempi di stringhe palindrome (ben formate per il ling. I32): a,b,aa,bb,aaa, aba,bab,bbb, abba, baab, bbbb,... stringhe "cattive" o non ben formate: ab, aab, baba, abbbbb,.... </li> <li> Slide 31 </li> <li> 31 sistemi formali, definire I con un criterio di appartenenza es.3 : A33 = { 0, 1 } A33 * = { 0, 1, 00, 01, 10, 11, 100, 101,..., 111, 1000,... } I33 = { s | s di B *, s tale che il numero degli 1 in s e pari} esempi di s.b.f. : 0, 11, 011, 101, 110, 01010,.... esempi di s.NON b.f.: 1, 010, 001, 111, 01110, 101010,.... </li> <li> Slide 32 </li> <li> 32 esercizio: date le tre definizioni gia' viste di linguaggi: A31 = { ), ( }, A31 * = {\, (, ), ((, )), (), )(, (((, ))), ()(),... }, I31 = { s | s di A31 *, s tale che 1): ad ogni ( in s segue una ) e che 2): ogni ) in s epreceduta da una ( } A32 = { a,b }, A32 * = {\, a,b,aa,bb,ab, ba,aaa,aab,aba,... }, I32 = { s | s di A32 *, con s palindroma } = { a,b,aa,bb,aaa, aba,bab,bbb, abba, baab, bbbb,...} dove aba e' s.b.f. mentre aab non e' s.b.f. A33 = { 0, 1 } A33 * = { 0, 1, 00, 01, 10, 11, 100,..1000,... } I33 = { s | s di A33 *, s tale che il numero degli 1 in s e pari} = { 0, 11, 011, 101, 110, 01010,.... } le stringhe seguenti appartengono a uno dei linguaggi: ( ) ( ), 1111, babbab, ( ( ) ( ), baba, ( ( ) ), 01101, ( (, 1101101, babbab, 101101, ( ) ( ( ) ) ( ) ? </li> <li> Slide 33 </li> <li> 33 A31 = { ), ( }, A31 * = {\, (, ), ((, )), (), )(, (((, ))), ()(),... }, I31 = { s | s di A31 *, s tale che 1): ad ogni ( in s segue una ) e s tale che 2): ogni ) in s epreceduta da una ( } A32 = { a,b }, A32 * = {\, a,b,aa,bb,ab, ba,aaa,aab,aba,... }, I32 = { s | s di A32 *, con s palindroma } = { a,b,aa,bb,aaa, aba,bab,bbb, abba, baab, bbbb,...} A33 = { 0, 1 }, A33 * = { 0, 1, 00, 01, 10, 11, 100,..1000,....</li></ul>

Recommended

View more >