Linguaggi Classificati rispetto alle caratteristiche principali potere espressivo

  • Slides: 35
Download presentation
Linguaggi • Classificati rispetto alle caratteristiche principali: – potere espressivo che influenza lo stile

Linguaggi • Classificati rispetto alle caratteristiche principali: – potere espressivo che influenza lo stile di programmazione Fondamenti di Informatica 1

Linguaggi - basso livello • Il linguaggio macchina specifica solo le operazioni che l'elaboratore

Linguaggi - basso livello • Il linguaggio macchina specifica solo le operazioni che l'elaboratore può eseguire – sintattica molto elementare" – diverso per ogni processore • dipende dalle caratteristiche architetturali • E' più orientato alla macchina che ai problemi da trattare – è infatti definito di "basso livello" Fondamenti di Informatica 2

Linguaggi - basso livello • Una prima evoluzione è stata l'introduzione di linguaggi simbolici:

Linguaggi - basso livello • Una prima evoluzione è stata l'introduzione di linguaggi simbolici: linguaggi assemblativi – ancora orientati alla macchina e non ai problemi – più immediati da utilizzare – definiscono variabili, simboli, . . . Fondamenti di Informatica 3

Linguaggi - alto livello • Altri linguaggi sono basati su: – la descrizione del

Linguaggi - alto livello • Altri linguaggi sono basati su: – la descrizione del problema in modo intuitivo, dimenticandosi che verranno eseguiti da un calcolatore – obiettivo: fornire un mezzo espressivo per specificare all'elaboratore il compito da eseguire Fondamenti di Informatica 4

Linguaggi - alto livello • Caratteristiche: – ognuno ha i propri paradigmi che garantiscono

Linguaggi - alto livello • Caratteristiche: – ognuno ha i propri paradigmi che garantiscono forme espressive appropriate per alcuni problemi specifici – questa specificità ha favorito la loro proliferazione (fenomeno intrinseco alla natura del linguaggio come forma di comunicazione) Fondamenti di Informatica 5

Linguaggi Imperativi • Linguaggi più evoluti: – permettono di descrivere operazioni più complesse di

Linguaggi Imperativi • Linguaggi più evoluti: – permettono di descrivere operazioni più complesse di quelle che l'elaboratore può eseguire – livello di astrazione più alto – risalgono agli anni '50 – detti di alto livello di tipo imperativo – Es: Basic, Fortran, Pascal Fondamenti di Informatica 6

Linguaggi Imperativi • Caratteristiche: – di utilizzo più semplice – indipendenti dall'elaboratore – purtroppo

Linguaggi Imperativi • Caratteristiche: – di utilizzo più semplice – indipendenti dall'elaboratore – purtroppo ancora legati al modello di Von Neumann: • i programmi sono ancora una sequenza di istruzioni; l'evoluzione del calcolo è costituita da una variazione dello stato della memoria Fondamenti di Informatica 7

Linguaggi Imperativi • Eseguono 3 tipi di operazioni: – trasferimento dati – operazioni aritmetiche

Linguaggi Imperativi • Eseguono 3 tipi di operazioni: – trasferimento dati – operazioni aritmetiche – alterazione del flusso del programma • Già discussi in precedenza • Basic (semplice ma poco espressivo) • Fortran (molto usato per il calcolo scientifico e le librerie molto complete) Fondamenti di Informatica 8

Linguaggi Funzionali • Non sono legati al modello di Von Neumann ma al concetto

Linguaggi Funzionali • Non sono legati al modello di Von Neumann ma al concetto di programmazione funzionale • Il primo linguaggio funzionale: – Lisp (List Processing), fine anni '50 – caratteristiche di manipolazione agevole di informazioni di tipo simbolico Fondamenti di Informatica 9

Linguaggi Funzionali • Differenze con i linguaggi imperativi: – il calcolo è basato sul

Linguaggi Funzionali • Differenze con i linguaggi imperativi: – il calcolo è basato sul calcolo di valori e non sull'assegnamento di valori a variabili – basato su valori e non su effetti – il risultato è il risultato di una funzione, non l'effetto causato dalla esecuzione di una sequenza di operazioni Fondamenti di Informatica 10

Linguaggi Funzionali • Caratteristiche: – meccanismo di definizione funzionale per casi (tipo switch in

Linguaggi Funzionali • Caratteristiche: – meccanismo di definizione funzionale per casi (tipo switch in C) – è possibile la ricorsione (utilizzando tali costrutti condizionali) – Il Lisp, però, consente anche l'iterazione e l'assegnamento (tipico dei ling. Imperativi) Fondamenti di Informatica 11

Linguaggi Dichiarativi • Basati sulla logica – obiettivo: formalizzare il ragionamento – caratterizzati da

Linguaggi Dichiarativi • Basati sulla logica – obiettivo: formalizzare il ragionamento – caratterizzati da meccanismi deduttivi • Programmare significa: – descrivere il problema con formule del linguaggio – interrogare il sistema, che effetua deduzioni sulla base delle definizioni Fondamenti di Informatica 12

Linguaggi Dichiarativi • Programmazione: – semplice (occorre solo definire la propria conoscenza del problema)

Linguaggi Dichiarativi • Programmazione: – semplice (occorre solo definire la propria conoscenza del problema) – avviene tramite una formulazione dichiarativa • Esempio: Prolog Fondamenti di Informatica 13

Linguaggi Dichiarativi • Un programma Prolog è costituito da: – Asserzioni incondizionate (fatti): –

Linguaggi Dichiarativi • Un programma Prolog è costituito da: – Asserzioni incondizionate (fatti): – Asserzioni condizionate (o regole): A IF B, C, D, … A • A: è la conclusione (conseguente) • B, C, D: sono le premesse (o antecedenti) • Una interrogazione ha la forma: ? A, B, C, … Fondamenti di Informatica 14

Esempio • Il fattoriale: Fatt (0, 1) Fatt (z, w) IF Dec(z, z 1),

Esempio • Il fattoriale: Fatt (0, 1) Fatt (z, w) IF Dec(z, z 1), Fatt(z 1, w 1), Prod(z, w 1, w) • Problemi risolubili: – calcolo del fatoriale: ? Fatt(3, x) – calcolo di quel numero il cui fattoriale è noto: ? Fatt(x, 6) Fondamenti di Informatica 15

Esempio B • Ricerca in un grafo orientato: A go(A) arc(A, B) arc(B, C)

Esempio B • Ricerca in un grafo orientato: A go(A) arc(A, B) arc(B, C) arc(D, C) arc(A, C) arc(B, D) arc(C, E) go(y) IF arc(x, y), go(x) D C E – con la richiesta ? go(E) viene determinata la sequenza E, C, A Fondamenti di Informatica 16

Sintassi e Semantica • Nei linguaggi naturali si distinguono: – sintassi (si occupa della

Sintassi e Semantica • Nei linguaggi naturali si distinguono: – sintassi (si occupa della forma delle frasi, delle regole per la loro creazione) – semantica (significato delle frasi) • Analogamente per i linguaggi di programmazione: – sintassi: definisce i programmi legali – semantica: significato dei programmi Fondamenti di Informatica 17

Sintassi e Semantica • Dopo la definizione di un linguaggio (con sintassi e semantica)

Sintassi e Semantica • Dopo la definizione di un linguaggio (con sintassi e semantica) serve un sistema che possa eseguire i programmi scritti in tale linguaggio • Si parla di implementazione di un linguaggio – generalmente è un traduttore verso il linguaggio macchina di un dato elaboratore Fondamenti di Informatica 18

Sintassi • Per definire la sintassi di un linguaggio, è necessario definire le grammatiche

Sintassi • Per definire la sintassi di un linguaggio, è necessario definire le grammatiche • La grammatica è un insieme di regole che servono per costruire una frase Fondamenti di Informatica 19

Grammatica • La grammatica è definita da: – V: un alfabeto di simboli terminali

Grammatica • La grammatica è definita da: – V: un alfabeto di simboli terminali (l'alfabeto del linguaggio) – N: un alfabeto di simboli non terminali – S: un simbolo iniziale (o assioma) – P: un insieme finito di regole sintattiche (dette produzioni) espresse nella forma: X a Fondamenti di Informatica 20

Grammatica • Le produzioni possono essere scritte: – anche nella forma alternativa: X :

Grammatica • Le produzioni possono essere scritte: – anche nella forma alternativa: X : : = a – se esistono più produzioni con parte sinistra uguale, X : : = a X : : = b X : : = c allora si può scrivere: X : : = a | b | c Fondamenti di Informatica 21

Grammatica • Derivazioni: – una stringa c deriva dalla stringa b se esse possono

Grammatica • Derivazioni: – una stringa c deriva dalla stringa b se esse possono essere decomposte in: b=m. An c=man con m e n simboli non terminali e se esiste la produzione A : : = a Fondamenti di Informatica 22

Grammatica • Data una grammatica, il linguaggio generato è definito come l'insieme delle frasi

Grammatica • Data una grammatica, il linguaggio generato è definito come l'insieme delle frasi derivabili a partire dall'assioma S • Le frasi di un linguaggio di programmazione sono dette programmi Fondamenti di Informatica 23

Formalismo di Backus-Naur (Backus -Naur Form, BNF) • Il modo visto per definire una

Formalismo di Backus-Naur (Backus -Naur Form, BNF) • Il modo visto per definire una grammatica è detto di Backus-Naur – introdotto negli anni '50 da Backus e Naur • Esiste anche una estensione (Extended BNF, EBNF) che permette una scrittura più sintetica Fondamenti di Informatica 24

Esempio di grammatica V: { il, lo, gatto, topo, sasso, mangia, beve } N:

Esempio di grammatica V: { il, lo, gatto, topo, sasso, mangia, beve } N: {<frase>, <soggetto>, <verbo>, <compl-oggetto>, <articolo>} S: <frase> P contiene le seguenti produzioni: <frase>: : =<soggetto><verbo><compl-oggetto> <soggetto>: : =<articolo><nome> <articolo>: : = il | lo <nome>: : = gatto | topo | sasso <verbo>: : = mangia | beve <compl-oggetto>: : =<articolo><nome> Fondamenti di Informatica 25

Extended BNF X : : = [a]b X : : = {a}nb equivale a

Extended BNF X : : = [a]b 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 | a. X (ricorsiva) Fondamenti di Informatica 26

Esempio di grammatica V: { 0, 1, 2, 3, 4, 5, 6, 7, 8,

Esempio di grammatica 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> : : = <cifra> | <cifra-non-nulla><numero> : : = <cifra> | <cifra><numero> <cifra> : : = <cifra-non-nulla> | 0 <cifra-non-nulla> : : = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Fondamenti di Informatica 27

Alberi sintattici • Il processo di derivazione può essere descritto tramite un albero sintattico

Alberi sintattici • Il processo di derivazione può essere descritto tramite un albero sintattico <frase> <soggetto> <verbo> <articolo> <nome> il gatto <compl-oggetto> <articolo> <nome> mangia Fondamenti di Informatica il topo 28

Diagrammi sintattici • Sono dei grafi: – nodi: etichettati con simboli (terminali e non

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 – si possono aggiungere nodi fittizi per rappresentare le diramazioni Fondamenti di Informatica 29

Esempio di diagramma sintattico <intero> : : = 0 + - <cifra-non-nulla> <cifra> Fondamenti

Esempio di diagramma sintattico <intero> : : = 0 + - <cifra-non-nulla> <cifra> Fondamenti di Informatica 30

Sintassi dei linguaggi di programmazione • Considerazioni sui linguaggi: – uno stesso linguaggio può

Sintassi dei linguaggi di programmazione • Considerazioni sui linguaggi: – uno stesso linguaggio può essere generato da più di una grammatica – alcune grammatiche sono ambigue: cioè esistono diversi elementi che possono essere generati da diverse derivazioni (esistono cioè diversi alberi sintattici). Situazione da evitare! Fondamenti di Informatica 31

Esempio di grammatica ambigua • Esempio: <expr> : : = x | y |

Esempio di grammatica ambigua • Esempio: <expr> : : = x | y | z | (<expr>) | <expr>+<expr> | <expr>*<expr> • All'espressione x+y*z possono essere associati due alberi sintattici diversi – questo influenza anche il modo con cui viene attribuito il significato all'espressione Fondamenti di Informatica 32

Esempio di grammatica ambigua • Nella definizione dei linguaggi si deve evitare l'ambiguità •

Esempio di grammatica ambigua • Nella definizione dei linguaggi si deve evitare l'ambiguità • Esempio: <istruzione-if> : : = if <espressione> then <istruzione> else <istruzione> Fondamenti di Informatica 33

Analizzatore sintattico • L'analisi della correttezza è eseguita dall'elaboratore: è suddiviso in 3 passi:

Analizzatore sintattico • L'analisi della correttezza è eseguita dall'elaboratore: è suddiviso in 3 passi: – analisi lessicale: controlla che i simboli utilizzati appartengano all'alfabeto – analisi grammaticale: verifica il rispetto delle regole grammaticali – analisi sintattica contestuale: verifica restrizioni di tipo contestuale (tipi di dati, identificatori non definiti, …) Fondamenti di Informatica 34

Analizzatore sintattico • Generalmente l'analizzatore sintattico esegue le tre verifiche simultaneamente • Si dice

Analizzatore sintattico • Generalmente l'analizzatore sintattico esegue le tre verifiche simultaneamente • Si dice "ad una passata " • Durante la scansione, se viene trovato un errore, si cerca di recuperare e si prosegue fino al termine Fondamenti di Informatica 35