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

Embed Size (px)

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

  • Slide 1
  • 1 SISTEMI FORMALI e GRAMMATICHE ( parte 1 - sistemi formali )
  • Slide 2
  • 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
  • Slide 3
  • 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...
  • Slide 4
  • 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,
  • Slide 5
  • 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
  • Slide 6
  • 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| >= 0 } es. se l'alfabeto e' A1= { a,b }, allora A1 * = { a, b, aa, ab, ba, bb, aaa, aab, aba,...} e' un insieme infinito !
  • Slide 7
  • 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?
  • Slide 8
  • 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 * = { \ }
  • Slide 9
  • 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 )
  • Slide 10
  • 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)
  • Slide 11
  • 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.)
  • Slide 12
  • 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| >= 0 } due nuove definizioni: si definisce A + = A * - { \ } ovvero: A + { s | s stringa su A, |s| > 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.
  • Slide 13
  • 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
  • Slide 14
  • 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|
  • Slide 15
  • 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...
  • Slide 16
  • 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...
  • Slide 17
  • 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 !
  • Slide 18
  • 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)">
  • 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? => 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)
  • Slide 23
  • 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 s