Unità Didattica 2 I Linguaggi di Programmazione
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): Legato alla struttura fisica dell’elaboratore; Potente e veloce; Programmi lunghi e di difficile scrittura; Difficoltà di messa a punto dei programmi.
Linguaggio di Programmazione 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.
Linguaggio Naturale Grammatica Linguaggio di Programmazione Traduttore Linguaggio Macchina
Uso dei Linguaggi di Programmazione Problema Analisi Diagramma a blocchi Algoritmo Programmazione Linguaggio programmativo Programma Risultati
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.
Traduttori Programma sorgente: Programma oggetto: Traduttore: 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 e programma oggetto sono equivalenti (stessi risultati sugli stessi dati) Traduttore Programma sorgente Programma oggetto
Tipi di Traduttori: Assemblatori, Compilatori e Interpreti Linguaggi a basso livello (linguaggi assemblativi, orientati alla macchina) Linguaggi ad alto livello (orientati all’uomo) Compilatori o Interpreti Assemblatori Linguaggio macchina
Schema di Compilazione Compilatore: riceve un intero programma sorgente e produce in un file l’intero programma oggetto. Compilatore Linker Programma sorgente Programma oggetto Programma eseguibile Risultati Dati mod1.c mod2.c … mod1.obj mod2.obj … nome_progr.exe Es in C: 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.
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. Interprete Programma sorgente Risultati Dati
Compilatori e Interpreti: caratteristiche 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.
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 Risultati Dati
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).
Definizione di Grammatica G = (N, T, P, S) N = Simboli Non Terminali (categorie sintattiche (articolo, nome, verbo)); T = Simboli Terminali (elementi di un vocabolario); P = Produzioni (regole sintattiche, ogni produzione descrive le regole attraverso cui un simbolo non terminale è definito per mezzo di altri simboli non terminali e/o terminali); S = Scopo (particolare simbolo non terminale).
Definizione di Linguaggio E’ una definizione generativa di linguaggio; Un linguaggio, funzione di una grammatica, è l’insieme di tutte le frasi ottenute come combinazioni di simboli terminali, ammessi dalle regole di produzione che dallo scopo S generano le possibili frasi (w*) del linguaggio.
Esempi di descrizione di “Produzioni” Le più usate modalità di descrizione di regole sintattiche (Produzioni) sono: Notazione EBNF (Extended Backus-Naur Form); Diagrammi sintattici.
Esempio di Grammatica S = frase; T = {UN, GATTO, MANGIA, TOPO, VELOCEMENTE, GIRA, LENTAMENTE, BIANCO, IL, GRASSO, MAGRO}; N = {frase, soggetto, predicato, frase-nominale, lista-di-aggettivi, articolo, nome, aggettivo, verbo, avverbio}; P = [regole sintattiche descritte secondo “EBNF” o “Diagrammi Sintattici”].
Produzioni descritte mediante EBNF Frase = soggetto predicato “.” Soggetto = frase-nominale Predicato = verbo (frase-nominale | avverbio) Frase-nominale = articolo nome [lista-di-aggettivi] Lista-di-aggettivi = aggettivo {“,” aggettivo} Articolo = “UN” | “IL” Nome = “GATTO” | “TOPO” Aggettivo = “NERO” | “BIANCO” | “MAGRO” | “GRASSO” Verbo = “GIRA” | “MANGIA” Avverbio = “VELOCEMENTE” | “LENTAMENTE” ( | = oppure; { } = ripetizione; ( ) = raggruppano alternative; [ ] = parte opzionale)
Produzioni descritte mediante Diagrammi Sintattici frase Frase nominale Frase nominale . MANGIA GIRA VELOCEMENTE LENTAMENTE frase nominale UN GATTO Aggettivo IL TOPO ,
Analisi Sintattica Le regole sintattiche possono essere usate: Per costruire frasi sintatticamente corrette; Per riconoscere se una frase è sintatticamente corretta.
Esempio di Analisi Sintattica Bottom Up La frase è sintatticamente corretta frase soggetto predicato fase nominale fase nominale articolo nome verbo articolo nome IL GATTO MANGIA IL TOPO .
Struttura dei Linguaggi di Programmazione Rappresenta un algoritmo e specifica l’insieme di operazioni da applicarsi in una certa sequenza su un certo insieme di dati; Occorre definire: Caratteristiche dei dati; Modalità di accesso ai dati; Operazioni sui dati; Ordine di esecuzione delle operazioni. Ogni dato deve essere descritto rispetto al tipo e alla struttura: Tipo: definisce l’insieme delle operazioni ammissibili; Struttura: relazioni esistenti tra i valori che rappresentano il dato (matrici, vettori, strutture (record)); Un programma è composto di: Commenti; Frasi dichiarative (direttive al traduttore, ad esse non corrispondono istruzioni di macchina (Dichiarazione di variabili e funzioni)); Frasi esecutive (azioni da applicare ai dati, corrispondono ad istruzioni di macchina).