I Linguaggi di Programmazione 1
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. 2
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. 3
Linguaggio Naturale Linguaggio di Programmazione Linguaggio Macchina Grammatica Traduttore 4
Uso dei Linguaggi di Programmazione Problema Analisi Algoritmo Programmazione Programma Diagramma a blocchi Linguaggio programmativo Risultati 5
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. 6
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 Traduttore Programma oggetto Programma sorgente e programma oggetto sono equivalenti (stessi risultati sugli stessi dati) 7
Tipi di Traduttori: Assemblatori, Compilatori e Interpreti Linguaggi ad alto livello (orientati all uomo) Linguaggi a basso livello (linguaggi assemblativi, orientati alla macchina) Compilatori o Interpreti Assemblatori Linguaggio macchina 8
Il compilatore 2
Il compilatore 2
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 Interprete Dati Risultati 11
Schema di Interpretazione Programma sorgente Interprete Dati Risultati 12
Schema di Compilazione Compilatore: riceve un intero programma sorgente e produce in un file l intero programma oggetto. Compilatore Linker Es in C: Programma sorgente mod1.c mod2.c Programma oggetto mod1.obj mod2.obj Programma eseguibile Dati 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. nome_progr.exe Risultati 13
3 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
5 Il contesto del compilatore scheletro programma sorgente preprocessore include, define (macro) programma sorgente programma assembly assembler programma oggetto librerie linker/loader programma eseguibile
4 Analisi e sintesi X = A+B*C X = A + * B C
7 Analisi lessicale (scanning) int somma, diff = 0.3;
7 Analisi lessicale (scanning) int somma, diff = 0.3;
8 Analisi sintattica istruzione di assegnazione identificatore = espressione A espressione + espressione identificatore B espressione identificatore C * espressione numero 60
9 Regole sintattiche 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..) * int D; float C; C D 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
12 Generazione del codice oggetto rappresentazione interna id1 = id2 + id3 * int-to-float generazione di codice intermedio 60 t1 = int-to-float(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 ottimizzazione del codice t1 = id3 * 60.0 id1 = id2 + t1 generazione del codice oggetto MOVF id3, R2 MULF #60.0, R2...
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. 24
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; Assemblatore Programma sorgente in ling. assemblativo Programma in linguaggio macchina Dati Risultati 25
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). 26