I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il...

26
1 I Linguaggi di Programmazione

Transcript of I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il...

Page 1: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

1

I Linguaggi di Programmazione

Page 2: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

2

Linguaggio naturale e linguaggio macchina

•  La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio.

•  Caratteristiche del Linguaggio Naturale:

–  Vantaggi: •  Ricchezza espressiva;

–  Svantaggi: •  Ambiguità; •  Ridondanza.

•  Caratteristiche del Linguaggio Macchina (codice binario): –  Vantaggi:

•  Legato alla struttura fisica dell’elaboratore; •  Potente e veloce;

–  Svantaggi: •  Programmi lunghi e di difficile scrittura; •  Difficoltà di messa a punto dei programmi.

Page 3: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

3

Linguaggio di Programmazione

•  Programma: formulazione di un algoritmo nei termini di un linguaggio di programmazione.

•  Linguaggio di Programmazione: –  Linguaggio intermedio fra il linguaggio macchina e il

linguaggio naturale; –  Descrive gli algoritmi con una ricchezza espressiva

comparabile con quella dei linguaggi naturali; –  Descrive gli algoritmi in modo rigoroso.

Page 4: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

4

Linguaggio Naturale

Linguaggio di Programmazione

Linguaggio Macchina

Grammatica

Traduttore

Page 5: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

5

Problema

Algoritmo

Programma

Risultati

Analisi Diagramma a blocchi

Programmazione

Linguaggio programmativo

Uso dei Linguaggi di Programmazione

Page 6: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

6

Traduttori •  Il linguaggio macchina è l’unico linguaggio compreso

dall’elaboratore;

•  Qualsiasi altro linguaggio di programmazione ha bisogno di un traduttore (non è possibile progettare un traduttore per i linguaggi naturali);

•  I linguaggio di programmazione sono comprensibili sia dalla macchina (attraverso un traduttore) che dall’uomo.

Page 7: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

7

Traduttori •  Programma sorgente:

–  Programma espresso in linguaggio di programmazione;

•  Programma oggetto: –  Programma espresso in linguaggio macchina;

•  Traduttore: –  Programma scritto in linguaggio macchina che traduce un

programma sorgente in un programma oggetto; –  E’ funzione del linguaggio di programmazione e

dell’architettura dell’elaboratore;

Programma sorgente

Programma oggetto

Traduttore Programma sorgente e programma oggetto sono equivalenti (stessi risultati sugli stessi dati)

Page 8: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

8

Tipi di Traduttori: Assemblatori, Compilatori e Interpreti

Linguaggi ad alto livello (orientati all’uomo)

Linguaggi a basso livello (linguaggi assemblativi, orientati alla macchina)

Linguaggio macchina

Compilatori o Interpreti Assemblatori

Page 9: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Il compilatore

2

Page 10: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Il compilatore

2

Page 11: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

11

Schema di Interpretazione

•  Interprete: –  Legge una singola frase in linguaggio sorgente, la trasforma

in una sequenza di istruzioni macchina e le manda in esecuzione;

–  Traduzione e esecuzione sono contestuali.

Programma sorgente

Dati

Interprete

Risultati

Page 12: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

12

Schema di Interpretazione

Programma sorgente

Dati

Interprete

Risultati

Page 13: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

13

Schema di Compilazione •  Compilatore:

–  riceve un intero programma sorgente e produce in un file l’intero programma oggetto.

Programma sorgente

Programma oggetto

Compilatore

Dati

Linker

Programma eseguibile Risultati

•  Linker: –  Collega più moduli oggetto prodotti dal compilatore in un

unico programma eseguibile; –  I riferimenti esterni ad ogni modulo non sono risolti dal

compilatore –  Il linker risolve i riferimenti esterni.

mod1.obj mod2.obj …

mod1.c mod2.c …

Es in C: nome_progr.exe

Page 14: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Linguaggio sorgente e obiettivo •   Esistono... migliaia di linguaggi sorgente ▫   Linguaggi di programmazione generici �   C, C++, Pascal, Fortran, Java, Basic, Lisp, Prolog, perl.... ▫   Linguaggi specializzati �   Formattazione di testi (Tex, Latex...) �   Interrogazione di basi di dati •   Il compilatore traduce il linguaggio sorgente in ▫   Un altro linguaggio di programmazione (pascal -> C) ▫   Il linguaggio macchina per un dato processore

3

Page 15: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

5

Il “contesto” del compilatore scheletro programma sorgente

preprocessore programma sorgente programma assembly assembler programma oggetto

linker/loader programma eseguibile

librerie

include, define (macro)

Page 16: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Analisi e sintesi

4

X = A+B*C X *

+ =

C B

A

Page 17: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Analisi lessicale (scanning)

7

int somma, diff = 0.3;

Page 18: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Analisi lessicale (scanning)

7

int somma, diff = 0.3;

Page 19: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Analisi sintattica

8

identificatore espressione

espressione espressione A

istruzione di assegnazione

= +

* identificatore

B espressione identificatore

C

espressione numero 60

Page 20: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Regole sintattiche

9

regole base

regole ricorsive

Page 21: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

10

Analisi semantica •   Ricava il significato associato alla struttura sintattica ▫   Verifica che le regole di impiego del linguaggio siano soddisfatte �   dichiarazione degli identificatori (ridefinizione,...) �   controllo dei tipi (uso nelle espressioni, conversione automatica di tipo, tipo di indici nei vettori, ecc..) *

C

D

int D; float C;

funzione di conversione

int -> float

Page 22: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

11

Tavola dei simboli •   Memorizza gli identificatori con i relativi attributi ▫   utilizzo di memoria ▫   tipo ▫   campo di visibilità ▫   numero e tipo dei parametri per le funzioni Allocazione in memoria

Page 23: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

Generazione del codice oggetto

12

= id1

id2 id3

+ * int-to-float

60 t1 = int-to-float(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3

t1 = id3 * 60.0 id1 = id2 + t1 MOVF id3, R2 MULF #60.0, R2 .............

rappresentazione interna

generazione di codice intermedio ottimizzazione del codice generazione del codice oggetto

Page 24: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

24

Compilatori e Interpreti: caratteristiche

•  Compilatori: –  Codice ottimizzato; –  Programmi più veloci da eseguire; –  I compilatori sono legati all’architettura dell’elaboratore

tramite il sistema operativo.

•  Interpreti: –  Programmi più lenti (traduzione ed esecuzione sono

contestuali); –  Messa a punto del programma (debugging) migliore (si

conosce la riga di programma dove si è verificato un errore); –  Gli interpreti sono legati all’architettura dell’elaboratore

tramite il sistema operativo.

Page 25: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

25

Linguaggi Assemblativi e Assemblatori

•  Un programma scritto in linguaggio macchina è una sequenza di istruzioni elementari codificate in binario;

•  Scrittura dei programmi difficile (variabili legate ad indirizzi di macchina, ogni nuova istruzione inserita può determinare lo spostamento delle locazioni di memoria per ogni variabile);

•  I linguaggi assemblativi sono linguaggi simbolici che usano simboli (nomi) per indicare il codice operativo e le variabili;

•  Assemblatori: sono i traduttori dei linguaggi assemblativi;

Programma sorgente in ling. assemblativo

Dati

Assemblatore

Risultati Programma in linguaggio macchina

Page 26: I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il linguaggio macchina per un dato processore 3 . 5 Il “contesto” del compilatore scheletro

26

Linguaggi e Metalinguaggi •  Un traduttore deve essere in grado di riconoscere le frasi come

appartenenti al linguaggio che deve tradurre; •  Occorre definire un linguaggio mediante una sintassi (regole

grammaticali) che consentono al traduttore di stabilire se una frase appartiene o meno al linguaggio;

•  Sintassi: insieme delle regole che servono per determinare se un testo è strutturato correttamente;

•  Semantica: insieme delle regole che consentono di dare un significato alle frasi del linguaggio;

•  Metalinguaggio: –  linguaggio che consente la definizione di linguaggi; –  Insieme delle categorie sintattiche (es: soggetto verbo) e delle

regole sintattiche (es: una frase nominale è composta da un soggetto seguito da un verbo).