• Non ci sono risultati.

Corso di Programmazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Corso di Programmazione"

Copied!
55
0
0

Testo completo

(1)

Corso di Programmazione

Linguaggi di Programmazione

Dott. Stefano Ferilli

ferilli@di.uniba.it

Università degli Studi di Bari

(2)

Linguaggio

• Insieme di sequenze di simboli

appartenenti ad un definito lessico, giustapposti in sequenza

secondo una opportuna grammatica (o sintassi)

• Per descriverlo è necessario un

meta-linguaggio

(3)

Messaggio

• Sequenza di frasi espresse in un linguaggio

– Analizzabile dal punto di vista

• Sintattico

– Si verifica la forma linguistica in cui è codificato (sintassi)

• Semantico

– Si individua il significato associato alla forma linguistica (semantica)

(4)

Comunicazione Diretta

• Requisiti per i due interlocutori:

l’estensore del messaggio

– al momento della sua formulazione

e il ricevitore

– al momento della ricezione

diano al messaggio eguale significato

(5)

Comunicazione Indiretta

• Cause:

– Il ricevitore non conosce il linguaggio usato per la stesura del messaggio

– Estensore e ricevitore hanno un diverso grado di conoscenza del linguaggio

– Tra i due mancano adeguate convenzioni per un’interpretazione unica del messaggio

• Occorre un traduttore

(6)

Programma

• Messaggio di comunicazione fra l’uomo e la macchina

– Insieme di frasi costruite secondo regole molto rigide

• Eliminazione di ambiguità nell’interpretazione dei comandi da parte della macchina

– Necessità di linguaggi molto precisi

• Le istruzioni obbediscono a rigorose regole grammaticali

(7)

Sistema di Calcolo

• Gerarchia di componenti software e hardware

– Software applicativo (es. pacchetti ad usi speciali)

• Insieme di programmi da utilizzare per applicazioni particolari

• Generalmente scritti in un linguaggio ad alto livello

• Forniti direttamente da costruttori di computer o ditte specializzate nella produzione di programmi

– Software di sistema (sistemi operativi, traduttori, ecc.)

• Insieme dei programmi che forniscono servizi e svolgono funzioni vitali per il software applicativo

– Hardware (CPU, memorie, dispositivi di I/O, ecc.)

(8)

Comunicazione Uomo-Macchina

• Processore nudo

– La macchina comprende il linguaggio macchina

• Costituito da un insieme di istruzioni elementari

• Ogni istruzione è una stringa di cifre binarie che specifica un’operazione e la cella di memoria implicata nell’operazione

• Processore vestito

– Macchina in grado di comprendere un linguaggio di livello superiore

• Usato per facilitare il compito di programmare la soluzione di

(9)

Linguaggio Naturale

• Usato per la comunicazione verbale fra esseri umani

– Fonti di ambiguità:

• Evoluzione

– Neologismi, Arcaismi

• Polisemia

– Parole con significati differenti a seconda del contesto

• Intrinseca

– …una vecchia porta la sbarra…

– Inadatto alla comunicazione con la macchina

(10)

Linguaggi di Programmazione

• A basso livello

– Più vicini alla struttura reale della macchina ed al suo linguaggio

• Ad alto livello

– Più vicini al linguaggio dei problemi

– Più facili da

comprendere per l’uomo

– Portabili

• Utilizzabili, senza modifiche, su diversi

(11)

Linguaggi di Programmazione

ad alto livello

• Procedurali

– Descrivono i passi

necessari per ottenere i risultati desiderati

• “come”

– Basati sui concetti di

• Variabile

• Assegnamento

• Non procedurali

– Esprimono le proprietà dei risultati che si

vogliono ottenere

• “cosa”

– Esempio

Radice quadrata di y

• Quel valore x tale che x*x = y

(12)

Linguaggi di Programmazione

Sintassi

• L’insieme delle regole che indicano quali sono le istruzioni formali permesse

– Poche, semplici, rigide

• Il programma va accuratamente controllato dal punto di vista formale per garantire la correttezza sintattica

– Codifica ambigua o non interpretabile

(13)

Linguaggi di Programmazione

Semantica

• Riguarda il contenuto informativo ed il significato di una frase

– Il lavoro più grosso è verificare e controllare il programma sul fronte logico per garantire la correttezza a livello semantico

• Informazione trasmessa non corrispondente allo scopo desiderato

– Connessa all’analisi del problema e l’algoritmo

(14)

Sintassi e Semantica

Esempio

• “Io ho andato”

– Errata sintatticamente

• “La penna sta mangiando”

– Corretta sintatticamente

• Forma

– Errata semanticamente

• Significato

(15)

Traduttore

• Programma che traduce in linguaggio macchina programmi in un linguaggio di livello superiore

– Analizza i messaggi (comandi) e verifica che siano scritti (codificati) in un linguaggio a lui noto

• Correttezza sintattica

– Attribuisce alle sequenze di simboli l’opportuno significato in modo da eseguire le giuste azioni

• Interpretazione unica di ogni istruzione

– Fa parte del software di sistema

• Livello intermedio della gerarchia software-hardware

(16)

Traduttori

• Nei programmi ad alto livello operano su due tipi di entità:

– Istruzioni

• Molto più potenti che nel linguaggio macchina

– Strutture di dati (liste, sequenze, alberi, ecc.)

• Non direttamente disponibili al livello di linguaggio macchina

• Devono essere rappresentate in termini di bit, indirizzi e legami tra locazioni

(17)

Traduttori

• Interpreti

• Compilatori

– Specifici per ogni linguaggio

– Forniti entrambi dai sistemi di sviluppo del software per i linguaggi supportati

Processore vestito

Linguaggio di Programmazione

Processore nudo Linguaggio

Macchina Traduzione

(18)

Interpretazione

• Dopo l’analisi sintattica, la traduzione procede passo passo con l’esecuzione

– Traduzione ed esecuzione istruzione per istruzione

• Ogni istruzione tradotta tante volte quante viene eseguita

Interprete

Programma

Risultati

(19)

Compilazione

• Il programma originale (Sorgente) è analizzato sintatticamente e tradotto in codice oggetto, quindi eseguito

– Traduzione completamente effettuata prima che cominci l’esecuzione

• Ogni istruzione è tradotta una sola volta Compilatore

Programma Codice

Oggetto

Macchina Risultati

(20)

Interpreti vs. Compilatori

Programma sorgente residente in memoria

+ Semplici – Efficienti

Tempo e Spazio

+ Interattivi

+ Errori comprensibili

Riferiti al sorgente

Programma sorgente

non residente in memoria

+ Ottimizzabili + Efficienti

Tempo e Spazio

– Interattivi

+ Errori scoperti prima

Riferiti al codice oggetto

(21)

Processo di Compilazione

Fasi

• Analisi Lessicale

– Divisione della stringa di caratteri del programma in token

• Segni di interpunzione, nomi di dati, operatori, parole riservate

• Analisi Sintattica

– Definizione della struttura sintattica del programma usando le regole grammaticali del linguaggio

• Generazione del Codice

– Generazione di appropriate istruzioni in linguaggio macchina per ogni elemento sintattico del programma

(22)

Processo di Compilazione

• Le fasi sono tra loro interrelate

– I moduli di programma responsabili dell’analisi sintattica possono utilizzare

• I moduli dell’analisi lessicale per ottenere un token

• I moduli di generazione del codice per produrre il codice oggetto dell’istruzione analizzata

• Per capire come vengono effettuate le

analisi è necessaria la teoria dei linguaggi

(23)

Alfabeto

• Insieme finito e non vuoto di simboli primitivi (caratteri) tramite i quali è

possibile costruire gli elementi base del linguaggio

– Esempio:

Alfabeto dei numeri reali

A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, +, –, .}

• 23 354.35 –86.6 +5589.0

(24)

Concatenazione di Simboli

di un alfabeto

• L’oggetto ottenuto prendendo nell’ordine i simboli da concatenare

– Esempio:

Dato l’alfabeto per i numeri reali

• La concatenazione di 3 e 4 è 34

• La concatenazione di +, 4, 7, . e 5 è +47.5

• La concatenazione di 4, ., 7, . e 5 è 4.7.5 !!!!

– Non tutte le sequenze di simboli che si possono costruire

(25)

Stringa o Parola

su un alfabeto

• Sequenza di simboli ottenuta come concatenazione di un numero finito di elementi dell’alfabeto

Λ denota la stringa non contenente alcun simbolo (parola vuota)

• La concatenazione di due parole

– Parola formata dai simboli della prima seguiti da quelli della seconda

– Esempi:

Λp = pΛ = p per ogni parola p

la concatenazione di +3 con 4.5 è +34.5

(26)

Prodotto di Insiemi di Parole

su un alfabeto

• Insieme ottenuto concatenando ogni parola di un insieme con ogni parola dell’altro

– Esempio:

concatenando {1, 21, 1.4} con {2, 398}

si ottiene {12, 1398, 212, 21398, 1.42, 1.4398}

(27)

Potenza di un Alfabeto A

• A è un particolare insieme di parole su A

– Si possono considerare i prodotti

• AA

• AAA

• …

– Esempio:

per l’alfabeto dei numeri reali fanno parte di A

3

• 213 3.5 –29 +55 21. .65 4.. …

– Le ultime due stringhe non fanno parte dei numeri reali

(28)

Potenza

di un Alfabeto A

• A

n

– Parole costituite da n simboli dell’alfabeto A

• A0 = {Λ}

• A1 = A

• A2 = AA

• A3 = AAA

• …

– n è detta lunghezza della parola

(29)

Chiusura

di un Alfabeto A

• Bisogna delimitare l’universo linguistico esprimibile

– Tutte le possibili parole di lunghezza finita costituite da simboli dell’alfabeto

• A

+

= A

1

∪ A

2

∪ … ∪ A

n

∪ …

– Insieme di tutte le parole su A di lunghezza finita

• Unione di tutti gli insiemi di parole di varia lunghezza

• A

*

= { Λ } ∪ A

+

– Chiusura di A

(30)

Linguaggio

su un alfabeto A

• Un sottoinsieme di A

*

– Tra le parole di A

*

ci sono parole ammesse nel linguaggio e parole non ammesse

• Linguaggio Generato da una Grammatica

– Insieme delle frasi costruite, a partire

dall’alfabeto, secondo le regole specificate da

una grammatica

(31)

Simboli Non Terminali

• Non fanno parte dell’alfabeto

– Sono variabili

– Rappresentano opportune sequenze di simboli

• Nomi che specificano le categorie sintattiche

– Componenti delle frasi del linguaggio generato dalla grammatica

• Il loro insieme è detto alfabeto dei simboli non terminali

– Su di esso è costruito il metalinguaggio

(32)

Simboli Non Terminali

Esempio

• Linguaggio naturale

– Parole classificate in

• frase, soggetto, predicato, articolo, nome, verbo, ecc.

– <soggetto > → <articolo> <nome>

il cane

• Linguaggio algebrico

– <formula> → <variabile> = <espressione aritmetica>

x = y + z * 12

(33)

Regola o Produzione

• Coppia ordinata di parole (p, q) tale che, se

– A è l’alfabeto dei simboli terminali

– N è l’alfabeto dei simboli non terminali

p e q possono appartenere tanto ad A* N*

• Scriviamo p q

• “la stringa p produce la stringa q”

• “la stringa p può essere riscritta come q”

– p (≠ Λ) è detta parte sinistra – q è detta parte destra

(34)

Regola o Produzione

Convenzione

• Le parti destre di produzioni con la stessa parte sinistra si possono riunire come

alternative in un’unica parte destra, separate col simbolo | (“oppure”)

– Esempio

p → q p → r p → s p → t si può compattare in

p → q | r | s | t

(35)

Grammatica

• Insieme delle regole che consentono di definire, tra tutte le possibili sequenze di simboli di lunghezza finita che si possono costruire, quelle lecite (frasi)

– Le regole di formazione delle frasi del

linguaggio si dicono regole di produzione

• Coinvolgono simboli dell’alfabeto ed altri simboli che rappresentano categorie sintattiche

(36)

Grammatica

• Quadrupla [Chomsky]

G = < A, N, α , P >

– A alfabeto terminale

– N alfabeto non terminale α scopo della grammatica

(simbolo di partenza)

– P insieme delle regole di produzione

(37)

Grammatica

Esempio

• Grammatica che genera il linguaggio dei numeri pari

– A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

– N = { α , β }

∀α indica il numero pari

– Scopo per cui costruiamo la grammatica

∀β indica un numero qualunque

– P = { α → βα | 0 | 2 | 4 | 6 | 8, β → 0 | 1 | 2 | … | 8 | 9 |

β 0 | β 1 | β 2 | … | β 8 | β 9 }

(38)

Grammatica

Esempio

• A = {il, la, cane, donna, mangia, dorme}

• N = { <frase>, <soggetto>,

<articolo>, <nome>, <verbo>}

∀ α = <frase>

• P = {

<frase> → <soggetto> <verbo>

<soggetto> → il <nome> | la <nome>

il <nome> → il cane la <nome> → la donna

(39)

Generazione di Stringhe

• Una stringa di terminali e non, S

1

, genera un’altra stringa S

2

– Direttamente (S1 ⇒ S2) – Indirettamente (S1* S2)

se quest’ultima si ottiene dalla prima applicando

– Una produzione

– Una sequenza di produzioni

della grammatica

(40)

Derivabilità

• Una sequenza di simboli S

2

è derivabile da un’altra S

1

se

– Entrambe sono stringhe di terminali e non – S1 ha almeno un non terminale γ

– C’è una regola che, sostituendo γ con S3 in S1, porta a S2

• La frase w costruita sui simboli terminali di G, con simbolo iniziale α , è derivabile se

n, ∃ s ,…,s ∈ (A ∪ N)

*

∋′ α → s → … → s → w

(41)

Derivabilità

• Una frase w è generata da G se si ottiene

applicando ripetutamente le regole di P, partendo da α

– La struttura del linguaggio dipende dalle regole di

produzione che determinano le modalità di formazione delle frasi del linguaggio generato dalla grammatica – Una grammatica è libera da contesto se le sue regole

sono del tipo b w

• b simbolo non terminale

• w sequenza di simboli terminali e/o non terminali

(42)

Tipi di Grammatiche

• Dipendenti dalle restrizioni imposte alle produzioni

– 0 (Nessuna restrizione)

• p q p, q (AN)*

– 1 (Dipendenti dal contesto)

• xay xby a N; x,y,b (AN)*; b Λ

– 2 (Non contestuali)

• p q p N; Λ q (AN)*

– 3 (Regolari)

• p ax p N; a A*; x N

(43)

Albero Sintattico

• Rappresentazione grafica del processo di derivazione

– Radice = scopo della grammatica

– Relazione padre-figlio = applicazione di regole di produzione

– Foglie = simboli terminali

• La sequenza di foglie, lette da sinistra verso destra, è detta frontiera

• Grafo orientato e ordinato aciclico

(44)

Albero Sintattico di un Programma

• Albero che si ricava dalle regole di produzione della grammatica di un linguaggio di programmazione

– Radice: <programma>

– Foglie

• caratteri alfanumerici

• simboli speciali

• parole chiave

(45)

Analisi Sintattica

• Procedimento di costruzione della derivazione di una frase rispetto ad una grammatica G

• Effettuato da un analizzatore sintattico (parser)

– Programma che opera su una stringa, e

• se questa appartiene al linguaggio generato dalla grammatica, ne produce una derivazione

• altrimenti si ferma segnalando il punto dove si è verificato l’errore

• A seconda dell’ordine seguito nel costruire le

derivazioni, è detta ascendente o discendente

(46)

Analisi Sintattica

Esempio

• Produzioni:

1. S → aSAB 2. S → b

3. A → bA 4. A → a 5. B → cB 6. B → a

• Una frase è

S1

a S1 A4 B6 a S2 A3 B6 a a

b b A3 a b A4

(47)

9

6

1 4 5

3

2

7 8

Analisi Sintattica Ascendente

Esempio

S1

a S1 A4 B6

a S2 A3 B6 a a

b b A3 a b A4

(48)

1

2

3 4 7

5

6

8 9

Analisi Sintattica Discendente

Esempio

S1

a S1 A4 B6

a S2 A3 B6 a a

b b A3 a

b A

(49)

Forma (Normale) di Backus- Naur

• Notazione per scrivere la grammatica BNF

– Usata per specificare la sintassi di un linguaggio di programmazione

• Simboli non terminali scritti fra parentesi uncinate <…>

• Simbolo → sostituito da ::=

(50)

Forma di Backus-Naur

Esempio

• Grammatica per i numeri pari (infiniti)

– <numero pari>::= 0 | 2 | 4 | 6 | 8 |

<numero><numero pari>

– <numero> ::= 0 | 1 | 2 | … | 8 | 9 |

<numero> 0 | … | <numero> 9 – 64932 è ottenibile?

• <numero pari>::= <numero><numero pari> ::=

<numero>2 ::= <numero>32 ::= <numero>932 ::=

<numero>4932 ::= 64932

(51)

Forma di Backus-Naur

Esempio

• Grammatica per le stringhe palindrome

– Simmetria speculare

– <frase> ::= Λ

– <frase> ::= a<frase>a – <frase> ::= b<frase>b

• È possibile derivare infinite stringhe

(52)

Carte Sintattiche

• Grafi costituiti da blocchi uniti da frecce

– Blocchi arrotondati

• Simboli terminali del linguaggio

– Blocchi rettangolari

• Simboli non terminali

– Rimandi alla corrispondente carta sintattica

– Frecce

• Indicano le vie percorribili per costrutti validi

– I bivi rappresentano possibilità alternative

(53)

Carte Sintattiche

• Iniziando dalla carta principale, seguire le frecce

– Quando si dipartono scegliere una strada

• Attraversando un blocco arrotondato

– Trascriverne il contenuto

• Attraversando un blocco rettangolare, passare alla carta corrispondente e seguirla

– Ogni carta ha esattamente un inizio e una fine, come il blocco

(54)

Carte Sintattiche

• Ogni traiettoria percorsa nel verso delle frecce definisce un costrutto sintattico valido del linguaggio

• Tutti i simboli terminali incontrati nel

percorso ed in quella data sequenza

costituiscono una frase legale del

linguaggio

(55)

Carte Sintattiche

Esempio

• Identificatore:

– Lettera seguita (eventualmente) da lettere o cifre

• <identificatore> ::= <lettera> | <lettera><stringa alfanumerica>

• <stringa alfanumerica> ::= <lettera> | <cifra> |

<lettera><stringa alfanumerica> |

<cifra><stringa alfanumerica>

• <lettera> ::= a | b | c | d | e | f | g | h | … | z

• <cifra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

lettera

lettera

Riferimenti

Documenti correlati

XPD measurements were performed on the surface phase formed after oxygen exposure in order to get information about the atomic structure of the features observed in the STM

Specifically, the major difference between the two cases is the larger adsorption energy of oxygen atoms on the bare silicate (around 16000 K in our study) with respect to the

Preliminary report of the Asian- Oceanian Clinical Oncology Association randomized trial compar- ing cisplatin and epirubicin followed by radiotherapy versus radio- therapy alone in

L’indebolirsi poi di un interesse forte per uno schema di storia nazionale, la perdita di senso politico e civile del- la urgenza e della necessità di un racconto nazionale sul

Among the most often cited ones are the following (in no particular order): lack of corporate innovation culture, shortage of good text-books, relative complexity of TRIZ, its

Specializzazioni, corsi di perfezionamento post luream, master dottorato. ecc., coerenti con la tipologia

Dunque, anche la frazione della norma reale, costituita dalle regole che governano modi e tempi delle condot- te volte ad accertare se si sia o no verificato l’accadimento