1 / 35

Linguaggi di Programmazione - elementi

Corso di Laurea in Informatica (AA 2005/2006). Linguaggi di Programmazione - elementi. Gabriella Pasi e Carla Simone gabriella.pasi@itc.cnr.it simone@disco.unimib.it. Linguaggi e programmi.

linh
Download Presentation

Linguaggi di Programmazione - elementi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Corso di Laurea in Informatica (AA 2005/2006) Linguaggi di Programmazione - elementi Gabriella Pasi e Carla Simone gabriella.pasi@itc.cnr.it simone@disco.unimib.it

  2. Linguaggi e programmi Insieme di regole formali che definiscono le modalità per costruire espressioni corrette (valide) del linguaggio Il significato da attribuire alle frasi (sintatticamente corrette) del linguaggio mediante un’interpretazione. Dato un algoritmo, un programma è la sua descrizione in un particolare linguaggio di programmazione. Un linguaggio di programmazione è caratterizzato da due aspetti: – SINTASSI – SEMANTICA N.B.: una frase può essere sintatticamente corretta ma priva di significato.

  3. GRAMMATICHE Una grammatica è uno strumento formale per definire un linguaggio attraverso la descrizione delle proprietà strutturali delle sue frasi. Tale costruzione si effettua partendo da una frase particolare e riscrivendo via via parti di essa applicando una delle regole specificate nella grammatica stessa.

  4. GRAMMATICHE Le grammatiche formali generalmente studiate nel contesto informatico sono denominate Grammatiche di Chomsky perché furono introdotte dal linguista Noam Chomsky. Le grammatiche formali hanno un ruolo fondamentale nello studio delle proprietà sintattiche dei programmi e dei linguaggi di programmazione.

  5. GRAMMATICHE ELEMENTI BASE DELLA SINTASSI DI UN LINGUAGGIO V : alfabeto Un alfabeto è un insieme finito e non vuoto di simboli. L’insieme di tutte le sequenze finite di simboli in V, dette stringhe o frasi su V, è denotato da V*. V* : universo linguistico su V. Il simbolo e denota la stringa vuota ed appartiene a V*. L : un linguaggio su V è un insieme di stringhe su V, cioè un sottoinsieme di frasi in V* generato da una grammatica.

  6. GRAMMATICHE Una grammatica G = (V,N,P,S) per la generazione di un linguaggio L è definita da: V: insieme di simboli terminali, alfabeto di L N: insieme di simboli non terminali o metasimboli (categorie sintattiche come per esempio: <frase>, <soggetto>, <verbo>, <complemento>, <articolo>, <nome>, ...) P: insieme finito di regole sintattiche (o produzioni) del tipo X  Y S : elemento di N (assioma o simbolo iniziale)

  7. GRAMMATICHE Si dice forma di frase (sentential form) una qualsiasi stringa comprendente sia simboli terminali sia simboli non terminali derivabile dall’assioma S. L’insieme delle forme di frase di Gè l’insieme delle parole su V  Nderivabili a partire da S, cioè le parole su V  N tali che S* v. Si dice fraseuna forma di frase comprendente solo simboli terminali. Il linguaggio generato dalla grammatica Gè l’insieme di frasi applicando in sequenza le possibili regole in P, iniziando da S.

  8. GRAMMATICHE • Notazione: • simboli terminali in minuscolo • simboli non terminali in maiuscolo • regole di produzione X  Y: dalla parte a sinistra per sostituzione si deriva la parte a destra. Il simbolo/stringa X viene cioè sostituito dal simbolo/stringa Y in un passo di derivazione. Esempio di grammatica: V = {a,b} N = {A,S} start symbol S P = {S  A; A  bAb; A  a } Linguaggio generato da G: L(G) = {bnabn |n0}

  9. GRAMMATICHE Data una grammatica G = (V,N,P,S), diciamo che da una stringa u=u1Au2 (V  N)* possiamo derivare in un passo una stringa v= u1wu2 (V  N)* se esiste una produzione A  w e scriviamo u  v Diciamo che v è derivabile da u, e scriviamo u * v, se esiste una catena finita di stringhe u1, u2 ….. un  (V  N)* tale u =u1 u2 …..  un =v per mezzo di applicazione delle regole in P. Esempio di derivazione della grammatica precedente: SA bAb bbAbb  bbabb

  10. CLASSIFICAZIONE DELLE GRAMMATICHE – TIPO 0: ricorsivamente enumerabile quando le stringhe che appaiono nelle produzioni a  b non sono soggette ad alcuna limitazione (a e b non vuote) – TIPO 1: dipendente dal contesto (context dependent) quando le produzioni sono del tipo aAb  axb dove A è un non terminale e x è non vuota – TIPO 2: libera dal contesto (context free) quando le produzioni sono limitate ad A  x dove A è un non terminale e x è non vuota – TIPO 3: regolare (a stati finiti) quando le produzioni sono limitate ad A  a e A  aB più eventualmente S e, oppure a A  a e A  Ba più eventualmente S e, dove A e B sono non terminali e a è un terminale

  11. GERARCHIA DI CHOMSKY

  12. Regola di tipo “self-embedding” GRAMMATICHE INDIPENDENTI DAL CONTESTO (context free) Le produzioni sono della forma A  w, dove A  N e w  (V  N)*. Esempio: V = {a,b,c,d} N = {A,S} start symbol S P = {S cAd, A  bAb, A  a} Linguaggio generato da G: L(G) = {cbnabnd|n0} Derivazione per cbbbabbbd? S cAd cbAbd  cbbAbbd  cbbbAbbbd  cbbbabbbd

  13. GRAMMATICHE INDIPENDENTI DAL CONTESTO (context free) Esempio: V = {a} N = {A,S} start symbol S P = {S Aa, A  Aa, A  e} Linguaggio generato da G: L(G) = {a, aa, aaa, ...} S Aa  a S Aa  Aaa  aa

  14. GRAMMATICHE INDIPENDENTI DAL CONTESTO (context free) V = {a,b,c} N = {S,X} S assioma P = {S  X, S  e, X  aXa, X  bXb, X  c} NOTA BENE: notazione che sintetizza le produzioni che hanno lo stesso simbolo non terminale nella parte sinistra: X  aXa | bXb | c Linguaggio generato da G: il linguaggio delle stringhe palindrome su {a,b,c} con una e una sola c al centro, piu’ la stringa vuota. Derivazione per abcba S X aXa  abXba  abcba

  15. GRAMMATICHE INDIPENDENTI DAL CONTESTO (context free) Esempio: V = {a, b} N = {A,B,S} start symbol S P = {S  A, A  Ba | e, B  Ab | e } Linguaggio generato da G: L(G) = {e, a,ba, aba, baba ...} NOTA BENE: le frasi generate,alternando b ed a, che terminano sempre con il simbolo terminale a (tranne e S A e S A Ba  Aba  ba S A Ba  Aba  Baba  Ababa  baba

  16. GRAMMATICHE INDIPENDENTI DAL CONTESTO (context free) Esempio: V = {0, 1, … 9} N = {A, S} start symbol S P = {S  A, A  2, A  4, A  6, A  8, A  0 A  0A, A  1A, … A  9A} Linguaggio generato da G: notazione decimale dei numeri pari S A 2A  23A  230 S 1A 10 S 1A 11A 113A 1132

  17. GRAMMATICHE INDIPENDENTI DAL CONTESTO (context free) Esempio: V = {_,a, … z, A, … Z, 0, …, 9} N = {A, B} start symbol A P = {A  aB, A  bB, …, A  AB, …, A  ZB B _B; B  aB, B  bB, …, B  AB, …, B  ZB B  0B, B  1B, …, B  9B, B  e} Linguaggio generato da G: questa grammatica genera gli identificatori del linguaggio C. Infatti come prima produzione si deve usare una produzione su A, che aggiunge un carattere iniziale non numerico. Dopo, le produzioni su B permettono di proseguire con qualsiasi sequenza di caratteri.

  18. GRAMMATICHE REGOLARI (a stati finiti) TIPO 3: Le produzioni sono della forma A  w, dove A  N e w  (V  N)  V oppure w  (N  V)  V. Quindi le produzioni sono limitate alle seguenti forme: A  a oppure A  aB oppure A  Ba dove A e B sono non terminali e a è un terminale . Le grammatiche regolari possono essere lineari a destra o lineari a sinistra. Il termine “lineare” deriva dal fatto che al lato destro di ogni produzione compare al più un simbolo non terminale. Le grammatiche con SOLE regole del tipo A  a e A  aB si dicono lineari a destra. Le grammatiche con SOLE regole del tipo A  a e A  Ba si dicono lineari a sinistra. (A e B sono non terminali e a è un terminale)

  19. GRAMMATICHE LINEARI Si dice lineare una grammatica non contestuale in cui la parte destra di ogni produzione contenga al più un non terminale. Esempio di regole di grammatica lineare ma NON regolare

  20. GRAMMATICHE REGOLARI Esempio: V = {0, 1} N = {U,V,S} start symbol S P = {S  U0 | V1, U  S1 | 1, V  S0 | 0 } Grammatica regolare lineare a sinistra Linguaggio generato da G: L(G) = {01, 0101, 0110, 1010, 10 ...}

  21. GRAMMATICHE REGOLARI Per ogni grammatica lineare destra ne esiste una lineare sinistra equivalente e viceversa. Esempio: L = {anb | n  0} A) V = {a, b} N = {S} Grammatica regolare lineare a destra P = {S  aS, S  b} B) V = {a, b} N = {S, A} Grammatica regolare lineare a sinistra P = {S  Ab | b, A  Aa | a}

  22. Sintassi: notazioni Le regole sintattiche sono espresse per mezzo di notazioni formali, come ad esempio: • BNF (Backus-Naur Form) notazione algebrica • EBNF(Extended BNF) notazione algebrica • diagrammi sintattici notazione grafica

  23. BACKUS NAUR FORM Per descrivere le grammatiche con notazione più compatta di quella vista precedentemente si usa la BNF(Backus-Naur Form). I simboli non terminali vengono descritti da parole, mentre i terminali in grassetto. Nelle regole di produzione, al posto di  si utilizza la notazione ::= Il simbolo | rappresenta la disgiunzione. La notazione A ::= a | b | c | d significa che la grammatica contiene le produzioni A ::=a, A ::=b, A ::=c, A ::=d.

  24. BACKUS NAUR FORM esempio Esempio: V = {0, 1}N = {U,V,S} Start Symbol S P = {S ::= U0 | V1, U ::= S1 | 1, V ::= S0 |0} Linguaggio generato da G: L(G) = {01, 0101, 0110, 1010, 10 ...}

  25. EXTENDED BACKUS NAUR FORM La notazione [w] nella parte destra di una produzione significa che la parola w può comparire o meno, è cioè opzionale. La notazione w} nella parte destra di una produzione significa che la parola w può comparire zero o più volte. Le parentesi tonde possono essere utilizzate per raggruppare: ad esempio, (a | b) [c] è diverso da a | (b [c]), che è uguale ad a | b [c].

  26. EXTENDED BACKUS NAUR FORM X ::= [a]b equivale a X ::= b|ab X ::= {a}nb equivale a X ::= b|ab|aab|… ripetendo a fino a n volte X ::= {a}b equivale a X ::= b|ab|aab|… ripetendo a un numero di volte indefinito Equivale ad avere nella grammatica la produzione X ::= b | aX (ricorsiva)

  27. EXTENDED BACKUS NAUR FORM • V: { 0,1,2,3,4,5,6,7,8,9,+,- } • N: {<intero><int-senza-segno><numero> <cifra-non-nulla><cifra>} • S: <intero> • P contiene le seguenti produzioni: • <intero> ::= [+ | - ] <int-senza-segno> • <int-senza-segno> ::= <cifra> | <cifra-non-nulla><numero> • <numero> ::= <cifra> | <cifra><numero> • <cifra> ::= <cifra-non-nulla> | 0 • <cifra-non-nulla> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  28. EXTENDED BACKUS NAUR FORM Attenzione: nel linguaggio generato da questa grammatica i simboli { e } sono simboli terminali ! Per denotare ripetizione si usa il simbolo * <program> ::= { <statement>* } <statement> ::= <assignment> | <conditional> | <loop> <assignment> ::= <identifier> = <expr> ; <conditional> ::= if <expr> { <statement> + } | if <expr> { <statement> + } else { <statement> + } <loop> ::= while <expr> { <statement> + } <expr> ::= <identifier> | <number> | ( <expr> ) | <expr> <operator> <expr>

  29. EXTENDED BACKUS NAUR FORM <operator> ::= + | - | * | / | = | /= | < | > | <= | >= <identifier> ::= <letter> <ld>* <ld> ::= <letter> | <digit> <number> ::= <digit>+ <letter> ::= a | b | c | . . . | z <digit> ::= 0 | 1 | . . . | 9 Nota bene: * è sia un simbolo sia un metasimbolo

  30. DIAGRAMMI SINTATTICI Sono dei grafi: • nodi: etichettati con simboli (terminali e non terminali), collegati da archi orientati • un arco da i a j significa che il simbolo i è seguito dal simbolo j • più archi rappresentano alternative

  31. program { } statement assignment statement conditional loop assignment ; e xpression identifier = conditional if e statement expression { } else { statement } DIAGRAMMI SINTATTICI

  32. expression expression operator expression identifier number ( expression ) DIAGRAMMI SINTATTICI loop statement expression } { while

  33. letterale letterale cifra cifra 0 - 9 cifra Unicode escape DIAGRAMMI SINTATTICI Identificatore in Java

  34. ESEMPIO DI GRAMMATICA DIPENDENTE DAL CONTESTO Il linguaggio L= {anbn cn , con n≥ 1} e’ generato dalla seguente regole, appartenenti a una grammatica dipendente dal contesto: 1) S  aSBC 2) S  aBC 3) CB  BC 4) aB  ab 5) bB  bb 6) bC  bc 7) cC  cc

  35. infatti …. E’ possibile usare la produzione 1) per n-1 volte ed ottenere an-1 S (BC)n-1. Quindi, usare la produzione 2) ed ottenere an (BC)n. La produzione 3) consente di scambiare le B e le C in modo da avere tutte le B prima delle C, ed ottenere quindi an Bn Cn. Usando la produzione 4) una volta si ottiene an bBn-1 Cn. A questo punto, usando la produzione 5) n-1 volte si ottiene an bn Cn . Infine, usando la produzione 6) una volta si ottiene an bn c Cn -1 e usando la produzione 7) n-1 volte si ottiene anbn cn

More Related