Il 0% ha trovato utile questo documento (0 voti)
10 visualizzazioni5 pagine

5 - Linguaggi

Caricato da

dueporco777
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
10 visualizzazioni5 pagine

5 - Linguaggi

Caricato da

dueporco777
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 5

PROGETTO E SVILUPPO DEL SOFTWARE PROGETTO E METODOLOGIE

• Il costo del software è alto


• Progettare algoritmi complessi non è banale
Occorre semplificare la progettazione degli algoritmi e
produrre programmi di qualità.

Obiettivo:
produrre programmi corretti, leggibili, efficienti, modificabili,
riusabili (generali), portabili, robusti.

Due dimensioni del progetto:


• Programmazione in piccolo (in-the-small)
• Programmazione in grande (in-the-large)

IL PUNTO DI PARTENZA
Principi base:
• La “macchina”... ma non la macchina hardware!
• procedere per livelli di astrazione
• Occorre un livello di • garantire al programma strutturazione e modularità
astrazione adeguato
Macchina
Due metodologie di sviluppo:
Linguaggio di • metodologia TOP-DOWN
Hardware
alto livello
• metodologia BOTTOM-UP

1 2

LINGUAGGI DI ALTO LIVELLO


METODOLOGIE
• Si basano su una “macchina” le cui “mosse” non sono
quelle della macchina hardware
Procede per decomposizione del → realizzano una “macchina virtuale”
problema in sotto-problemi, tramite • Supportano concetti
passi di raffinamento successivi
• Promuovono metodologie per agevolare lo sviluppo del
software

PERCHÉ TANTI LINGUAGGI?


Diverse “sorgenti”:

 architettura di Von Neumann → linguaggi imperativi


 astrazioni logico-matematiche → linguaggi funzionali
linguaggi dichiarativi

Ma… CHE COS’È UN LINGUAGGIO??

Procede per composizione di


componenti e funzionalità elementari,
fino alla costruzione dell’intero algoritmo
(“dal dettaglio all’astratto”)

3 4
LINGUAGGI LINGUAGGI DI PROGRAMMAZIONE
Dal dizionario: Un linguaggio di programmazione è una notazione formale
per descrivere algoritmi.
Un linguaggio è un insieme di parole e di metodi di
combinazione delle parole usate e comprese da una PROGRAMMA
comunità di persone.
È la descrizione di un algoritmo in un particolare linguaggio
È una definizione poco precisa, perché: di programmazione.
• non evita le ambiguità tipiche dei linguaggi naturali
• Quali “parole chiave” ?
• non si presta a descrivere processi computazionali • Quali meccanismi di combinazione ?
meccanizzabili
• non aiuta a stabilire proprietà su cui poter effettuare
ragionamenti
SINTASSI e SEMANTICA
Ogni linguaggio è caratterizzato da:

Ci serve una nozione di linguaggio più precisa: • sintassi: l’insieme di regole formali per la scrittura di
programmi in quel linguaggio, che dettano le modalità
LINGUAGGIO come SISTEMA MATEMATICO
per costruire frasi corrette nel linguaggio stesso.
in modo da poter rispondere a domande come:
• quali sono le frasi lecite? • semantica: l’insieme dei significati da attribuire alle
frasi (sintatticamente corrette) costruite nel linguaggio.
• si può stabilire se una frase appartiene al linguaggio?
• come si stabilisce il significato di una frase?
• quali elementi linguistici primitivi occorrono per poter Una frase può essere sintatticamente corretta
esprimere la soluzione a qualsiasi problema (risolubile)? e tuttavia non aver alcun significato!

5 6

SINTASSI DEFINIZIONE DI LINGUAGGIO


Le regole sintattiche sono espresse attraverso notazioni • Un linguaggio è un insieme di frasi
formali:
• Una frase è una sequenza di simboli appartenenti a un
 BNF (Backus-Naur Form) e EBNF (Extended BNF)
certo alfabeto
 diagrammi sintattici
• Un linguaggio deve essere effettivamente generabile
ESEMPIO: sintassi di un numero naturale • Un linguaggio di programmazione dev’essere decidibile

<naturale> ::= 0| <cifra-non-nulla> {<cifra>}


DEFINIZIONI
<cifra-non-nulla> ::= 1|2|3|4|5|6|7|9
<cifra> ::= 0|<cifra-non-nulla> Alfabeto V (o vocabolario o lessico)
È l'insieme dei simboli con cui si costruiscono le frasi (ad
esempio, parole chiave o singoli caratteri).
0
Universo linguistico V* di un alfabeto V
cifra-non-nulla
È l’insieme di tutte le frasi (sequenze finite di lunghezza
cifra arbitraria) di elementi di V.

Linguaggio L su un alfabeto V
SEMANTICA
È un sottoinsieme di V*.
La semantica è esprimibile:
 a parole → poco precisa e ambigua ESEMPIO
 mediante azioni (sem. operazionale) Sia V = { if, el3e, ==, A, 0, =, +, 1, 2, (, ) }
 mediante funzioni matematiche (sem. denotazionale)
Allora V* = {
 mediante formule logiche (sem. assiomatica) Non tutte queste
if (A == 0) A = A + 2,
if el3e A, frasi faranno parte
del linguaggio!
do =A,
...
}

7 8
LINGUAGGI e GRAMMATICHE LINGUAGGI e GRAMMATICHE (segue)
Come specificare il sottoinsieme di V*
che definisce il linguaggio? Una Grammatica BNF definisce quindi un linguaggio
sull’alfabeto terminale mediante un meccanismo di
Specificando il modo formale e preciso la sintassi delle derivazione o riscrittura.
frasi del linguaggio.

DERIVAZIONE
GRAMMATICA FORMALE
Sia G una grammatica e ,  due stringhe, cioè due
Una Grammatica è una notazione matematica per elementi dell’universo linguistico (VNVT)*
esprimere in modo rigoroso la sintassi di un linguaggio.
Si dice che  deriva direttamente da  (e si scrive  → )
se le stringhe si possono decomporre in:
Una Grammatica BNF è una quadrupla VT,VN,P,S dove:
=A =
• VT è un insieme finito di simboli terminali ed esiste la produzione A::= .
Alfabeto
• VN è un insieme finito di simboli non terminali
• P è un insieme finito di produzioni, ossia di regole di Si dice che  deriva da  se esiste una sequenza di
riscrittura derivazioni dirette che da  possono infine produrre :
 =  →  →  →  → n = 
• S è un particolare simbolo non-terminale detto
simbolo iniziale o scopo della grammatica.
LINGUAGGIO GENERATO DA UNA
GRAMMATICA
Una Grammatica BNF è una grammatica le cui regole di
produzione hanno la forma: Data una grammatica G, si dice
X ::= A linguaggio LG generato da G
dove l’insieme delle frasi di V derivabili dal simbolo iniziale S,
• X  VN è un simbolo non terminale, e applicando le produzioni P.
• A è una stringa, ossia una sequenza di simboli ciascuno
appartenente all’alfabeto V = VN  VT. Le frasi di un linguaggio di programmazione vengono dette
programmi di tale linguaggio.

9 10

FORMA COMPATTA ALBERO SINTATTICO


Un albero sintattico è un grafo che esprime il processo
In una grammatica BNF possono esistere più regole con la
di derivazione di una frase usando una data grammatica.
stessa parte sinistra:
X ::= A1 ESEMPIO: derivazione di “il gatto mangia il topo”
X ::= A2
frase
....
X ::= AN
soggetto verbo compl-oggetto
Per comodità si stabilisce allora di poterle compattare:
X ::= A1 | A2 | .. | AN articolo nome mangia articolo nome
dove il simbolo | indica l’alternativa (“oppure”).
il gatto il topo

ESEMPIO
G = VT,VN,P,S ESEMPIO DI DERIVAZIONE (LEFT-MOST)

VT = { il, gatto, topo, sasso, mangia, beve } A partire dallo scopo della grammatica, si riscrive sempre il
simbolo non-terminale più a sinistra.
VN = { <frase>, <soggetto>, <verbo>, <compl-oggetto>,
<articolo>, <nome> }
<frase>
S = <frase>
→ <soggetto> <verbo> <compl-oggetto>
P = { → <articolo> <nome> <verbo> <compl-oggetto>
<frase> ::= <soggetto> <verbo><compl-oggetto> → <articolo> <nome> <verbo> <compl-oggetto>
<soggetto> ::= <articolo><nome> → il gatto <verbo> <compl-oggetto>
<articolo> ::= il
→ il gatto mangia <compl-oggetto>
<nome> ::= gatto | topo | sasso
<verbo> ::= mangia | beve → il gatto mangia <articolo><nome>
<compl-oggetto> ::= <articolo> <nome> → il gatto mangia <articolo> <nome>
} → il gatto mangia il topo

11 12
EXTENDED BNF ESEMPIO 2: LA SINTASSI DEI NUMERI INTERI

Introduce alcune notazioni compatte per alleggerire la Numeri interi di lunghezza qualsiasi, con o senza segno
scrittura delle produzioni.
Scelta: non si permettono numeri che iniziano per 0, a
Forma EBNF BNF equivalente significato eccezione di 0 stesso (ad esempio, 03 non è ammesso).
a può comparire
X ::= [a] B X ::= B | aB
0 o 1 volta
X ::= B | aB | …| a B a può comparire
n V = { 0,1,2,3,4,5,6,7,8,9, +, -}
X ::= {a}n B
da 0 a n volte
a può comparire 0 N = { <intero>, <intero-senza-segno>, <cifra>,
X ::= {a} B X ::= B | aX <cifra-non-nulla>}
o più volte
S = <intero>
NOTARE che la produzione X ::= B | aX è ricorsiva.
P= {
<intero> ::= [+|-] <intero-senza-segno>
Per raggruppare categorie sintattiche: <intero-senza-segno> ::= 0 | <cifra-non-nulla> {<cifra>}
<cifra>::= 0 | <cifra-non-nulla>
Forma EBNF BNF equivalente significato <cifra-non-nulla> ::= 1|2|3|4|5|6|7|8|9
}
X ::= (a | b ) D | c X ::= a D | b D | c raggruppa categorie
sintattiche

ESEMPIO 1: LA SINTASSI DEI NUMERI NATURALI ESEMPIO 3: LA SINTASSI DEGLI IDENTIFICATORI

V = { 0,1,2,3,4,5,6,7,8,9 } Nell’uso pratico, spesso si danno semplicemente le regole


di produzione, definendo S, VT e VN implicitamente.
N = { <naturale>, <cifra>, <cifra-non-nulla>}
S = <naturale> <identificatore> ::= <lettera> { <lettera> | <cifra>}
P={ <naturale> ::= <cifra>|<cifra-non-nulla> {<cifra>} <lettera> ::= A | B | ... | Z
<cifra> ::= 0 | <cifra-non-nulla> <cifra> ::= 0|1|2|3|4|5|6|7|8|9
<cifra-non-nulla>::=1|2|3|4|5|6|7|8|9
}

13 14

ESEMPIO 4: ALBERO SINTATTICO PER INTERI RAPPRESENTAZIONI ALTERNATIVE


DIAGRAMMI SINTATTICI
Albero sintattico per la generazione del numero -3547
usando la grammatica EBNF dell’esempio precedente:

NB:
poiché X ::= {a} B equivale a X ::= B | aX, <intero>::= <intero-senza-segno>
-
la forma X ::= C {a} equivale a X ::= C | Xa,
+
e la regola:
<intero-senza-segno> ::= <cifra-non-nulla> {<cifra>} <intero-senza-segno>::= 0

equivale a:
<intero-senza-segno> ::= <cifra-non-nulla>
<cifra-non-nulla> | <intero-senza-segno> <cifra>
<cifra>

<identificatore>::= <lettera>
<intero>

<lettera>

- <intero-senza-segno>
<cifra>

<intero-senza-segno> <cifra

<intero-senza-segno> <cifra 7

<intero-senza-segno> <cifra 5

<cifra-non-nulla> 4

15 16
GRAMMATICHE, LINGUAGGI e MACCHINE PER RICONOSCERE LINGUAGGI
MACCHINE PER RICONOSCERE LINGUAGGI
Per i linguaggi generati da grammatiche di tipo 1
Grammatiche di diversa struttura comportano (e quindi anche di tipo 2 e tipo 3, che sono casi particolari)
linguaggi con diverse proprietà, e implicano esiste un procedimento effettivo (algoritmo) per
macchine di diversa “potenza computazionale” decidere se una frase appartiene al linguaggio.
per riconoscere tali linguaggi.
Un tale procedimento non esiste invece per grammatiche
di tipo 0.
CLASSIFICAZIONE DELLE GRAMMATICHE
SECONDO CHOMSKY
A ogni tipo di grammatica corrisponde un tipo di
Le grammatiche vengono classificate in base alla struttura macchina astratta capace di riconoscerne le frasi:
delle regole di produzione.
• tipo 1 (grammatica dipendente dal contesto)
→ Macchina di Turing
Tipo 0:

Generalità
• tipo 2 (grammatica libera dal contesto)
nessuna restrizione sulle produzioni
→ Macchina a stack
Tipo 1 (dipendenti dal contesto): • tipo 3 (grammatiche regolari)
Generalità

→ Automi a stati finiti


x A y ::= x  y x,y,(VTVN)*, AVN,   

Tipo 2 (libere da contesto):


A ::=  AVN, (VTVN)*-{}

Tipo 3 (regolari):

A ::= a | aB (ricorsiva a destra) A,BVN aVT


A ::= a | Ba (ricorsiva a sinistra)

Le grammatiche di tipo 0 sono le più generali, quelle di tipo


3 le più restrittive.

17 18

UN ESEMPIO DI GRAMMATICA REGOLARE: SEMANTICA DI UN LINGUAGGIO


LA SINTASSI DEGLI IDENTIFICATORI Attribuisce un significato ai costrutti linguistici del
linguaggio:
<identificatore> ::= <lettera> { <lettera> | <cifra>} Non tutte le frasi sintatticamente
<lettera> ::= A | B | ... | Z corrette hanno anche senso!!
<cifra> ::= 0|1|2|3|4|5|6|7|8|9 Ad esempio, la grammatica:
<frase> ::= <soggetto> <verbo><compl-oggetto>
<soggetto> ::= <articolo><nome>
AUTOMA A STATI FINITI CHE LA RICONOSCE: <articolo> ::= il
<nome> ::= gatto | topo | sasso
Stato iniziale: S0 <verbo> ::= mangia | beve
<compl-oggetto> ::= <articolo> <nome>
Frase riconosciuta → stato finale = S1
consente di generare anche la frase: corretta..
Frase non riconosciuta → stato finale = S2
“il sasso beve il topo”
..ma senza senso!
lettera

Molto spesso la semantica di un linguaggio non è definita


lettera formalmente, ma solo “a parole” → rischio di ambiguità.
o cifra
S0 S1
Metodi formali:
• semantica operazionale → azioni
• semantica denotazionale → funzioni matematiche
cifra o altro altro • semantica assiomatica → formule logiche
simbolo simbolo
BENEFICI
S2 • per il programmatore:
comprensione dei costrutti, prove formali di correttezza
• per l’implementatore:
costruzione del traduttore corretto
qualunque simbolo • per il progettista di linguaggi:
strumenti formali di progetto.
19 20

Potrebbero piacerti anche