I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il...
-
Upload
trinhkhuong -
Category
Documents
-
view
231 -
download
0
Transcript of I Linguaggi di Programmazione · Un altro linguaggio di programmazione (pascal -> C) ! Il...
1
I Linguaggi di Programmazione
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.
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.
4
Linguaggio Naturale
Linguaggio di Programmazione
Linguaggio Macchina
Grammatica
Traduttore
5
Problema
Algoritmo
Programma
Risultati
Analisi Diagramma a blocchi
Programmazione
Linguaggio programmativo
Uso dei Linguaggi di Programmazione
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.
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)
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
Il compilatore
2
Il compilatore
2
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
12
Schema di Interpretazione
Programma sorgente
Dati
Interprete
Risultati
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
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
5
Il “contesto” del compilatore scheletro programma sorgente
preprocessore programma sorgente programma assembly assembler programma oggetto
linker/loader programma eseguibile
librerie
include, define (macro)
Analisi e sintesi
4
X = A+B*C X *
+ =
C B
A
Analisi lessicale (scanning)
7
int somma, diff = 0.3;
Analisi lessicale (scanning)
7
int somma, diff = 0.3;
Analisi sintattica
8
identificatore espressione
espressione espressione A
istruzione di assegnazione
= +
* identificatore
B espressione identificatore
C
espressione numero 60
Regole sintattiche
9
regole base
regole ricorsive
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
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
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
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.
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
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).