LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI BASSO LIVELLO



Documenti analoghi
COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Corso di Informatica

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione

Analizzatore lessicale o scanner

Linguaggi e Paradigmi di Programmazione

Approccio stratificato

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

Linguaggi di programmazione

Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009. Prof. Raffaele Nicolussi

Dispensa YACC: generalità

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

Codifica: dal diagramma a blocchi al linguaggio C++

Linguaggi di programmazione

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

Programmi. Algoritmi scritti in un linguaggio di programmazione

La Macchina Virtuale

Il calcolatore oggi : UN SISTEMA DI ELABORAZIONE

Software. Algoritmo. Algoritmo INFORMATICA PER LE DISCIPLINE UMANISTICHE 2 (13042)

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

Introduzione a Dev-C++

Introduzione. Informatica B. Daniele Loiacono

Ottimizzazione delle interrogazioni (parte I)

Programmazione ad Oggetti. Java Parte I

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10

ToolChain: Come Generare Applicazioni in Linguaggio Macchina

Strumenti per la programmazione

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Il Sistema Operativo

Principi dell ingegneria del software Relazioni fra

INFORMATICA 1 L. Mezzalira

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Dispensa di Informatica I.1

FONDAMENTI di INFORMATICA L. Mezzalira

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Concetto di Funzione e Procedura METODI in Java

Java: Compilatore e Interprete

Progettaz. e sviluppo Data Base

Sistema operativo: Gestione della memoria

Lezione 10: Librerie e compilazione separata

Il Software. Il software del PC. Il BIOS

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

EXPLOit Content Management Data Base per documenti SGML/XML

PARTE 4 La Macchina Software


Protezione. Protezione. Protezione. Obiettivi della protezione

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Richiami di informatica e programmazione

Database. Si ringrazia Marco Bertini per le slides

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Le Infrastrutture Software ed il Sistema Operativo

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Software di base. Corso di Fondamenti di Informatica

LINGUAGGI - COMPILATORI - INTERPRETI

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

Introduzione alla programmazione in C

Dispensa di database Access

LINGUAGGI DI PROGRAMMAZIONE

I Linguaggi di Programmazione

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Introduzione. Laboratorio di Calcolo Corso di Laurea in Fisica. Università degli Studi di Roma La Sapienza

Il Sistema Operativo: il File System

connessioni tra i singoli elementi Hanno caratteristiche diverse e sono presentati con modalità diverse Tali relazioni vengono rappresentate QUINDI

Il Sistema Operativo (1)

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi

Linguaggio C. Fondamenti. Struttura di un programma.

Funzioni in C. Violetta Lonati

Ambienti di Sviluppo

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Guida all uso di Java Diagrammi ER

Calcolatori Elettronici A a.a. 2008/2009

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Richiamo compilatore FORTRAN 77

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi

Linguaggio C Compilazione, linking e preprocessor

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

1. Le macro in Access 2000/2003

Programmazione Orientata agli Oggetti in Linguaggio Java

Elementi del calcolatore: CPU

Introduzione ai linguaggi di programmazione

Strutturazione logica dei dati: i file

Problemi, Algoritmi e Programmi

Introduzione. Laboratorio di Calcolo Corso di Laurea in Fisica. Università degli Studi di Roma La Sapienza

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Programmazione per Bioinformatica Il Calcolatore e la Programmazione. Dr Damiano Macedonio Università di Verona

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Elementi di semantica operazionale

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Transcript:

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI BASSO LIVELLO Linguaggio macchina Uno per ogni processore o famiglia di processori Linguaggio assembler Versione simbolica di quello macchina. LINGUAGGI DI ALTO LIVELLO Linguaggi imperativi Orientati all assegnamento di locazioni di memoria o di registri. Es: Fortran (applicazioni scientifiche, ingegneristiche), Cobol (applicazioni gestionali), Pascal, C, Basic. Linguaggi imperativi orientati agli oggetti Basati sulle classi, che sono una evoluzione delle strutture ; le classi incorporano sia i dati che le funzioni che operano su di essi. Es: Smalltalk, C++, Java. Linguaggi funzionali Basati sulla combinazione di funzioni per ottenerne di più potenti. Es: Lisp, CommonLisp, Scheme. Linguaggi logici Es: Prolog SQL Programmazione imperativa usato in Intelligenza Artificiale orientato al reperimento di informazione nei databases; specifica le proprietà logiche dell operazione da eseguire e dell informazione su cui agire. (procedurale, strutturata, orientata agli oggetti) Programmazione dichiarativa (funzionale, logica) PROGRAMMAZIONE VISUALE Orientata alla possibilità di scrivere programmi partendo da oggetti posizionati sullo schermo ai quali sono associate azioni da compiere. Permette di scrivere in modo relativamente semplice programmi orientati agli oggetti; si scelgono alcune scatole, dei collegamenti con I/O appropriato, ecc. Ci sono ambienti di programmazione che consentono l uso più o meno esteso della programmazione visuale: Visual Basic, Hypercard, SQLWindows, J-Builder. 1

Redazione SVILUPPO DI UN PROGRAMMA TRADIZIONALE Con un editor che visualizza i caratteri stampabili ed interpreta quelli non stampabili; gli editor possono essere sensibili al linguggio di programmazione. Traduzione - Compilatori ma può avvenire anche con: - Interpreti - Compilatori just in time (CJT) - Soluzioni ibride Sorgente pascal Sorgente C Sorgente assembler Compilatore pascal compilatore C assemblatore Files di testo sorgenti non eseguibili COMP/ASSEMB Files binari oggetto non eseguibili LINKING File binario eseguibile LOADING in memoria principale 2

COMPILATORI Un compilatore è un programma che legge un programma scritto in un linguaggio, detto linguaggio sorgente, e lo traduce in un programma equivalente scritto in un altro linguaggio, detto linguaggio target. Come parte importante del processo di traduzione il compilatore comunica all'utente la presenza di errori nel programma sorgente. Ci sono migliaia di linguaggi sorgenti e migliaia di linguaggi target, ma i compiti di base che un compilatore deve compiere sono essenzialmente gli stessi. Concettualmente un compilatore opera in fasi, ciascuna delle quali trasforma il programma sorgente da una rappresentazione in un'altra. Oltre al compilatore, altri programmi possono essere necessari per creare un programma eseguibile. Preprocessori. Producono input per i compilatori. Essi possono completare il programma sorgente, ad esempio includendo il contenuto di alcuni files (come in C con #include <stdio.h>), espandere delle abbreviazioni, dette macro, in statements del linguaggio sorgente, permettere costrutti tipo if-statements per specificare condizioni di compilazione, ecc. Assemblatori. Un compilatore può creare un programma in linguaggio assembler, che successivamente deve essere tradotto da un assemblatore in codice macchina. Altri compilatori possono invece eseguire il compito dell'assemblatore, creando loro stessi codice macchina. Caricatori. Il processo di linking consiste nel creare un unico programma a partire da diversi files di codice macchina rilocabile; questi files possono essere il risultato di diverse compilazioni ed uno o più possono essere files di librerie di routines fornite dal sistema. Il processo di loading consiste nel prendere codice macchina rilocabile, e caricare istruzioni e dati in memoria all'indirizzo di caricamento desiderato. Spesso un unico programma, chiamato caricatore, esegue la duplice funzione di linking/loading. Il comando UNIX gcc serve sia per compilare che per legare e caricare i programmi C. Il compilatore genera un modulo oggetto, chiamato object file (nomefile.o), che può essere processato dal linker insieme ad altri object files. Il linker crea un modulo eseguibile il cui nome, se non specificato diversamente, è a.out. 3

FASI DI UN COMPILATORE Tre sono di analisi, tre di sintesi e due di interazione con le altre. source program analizzatore lessicale analizzatore sintattico analyzer gestore della tabella dei simboli analizzatore semantico analyzer generatore del codice intermedio gestore degli errori ottimizzatore del codice generatore del codice generator target program ANALISI LESSICALE Durante questa fase la sequenza di caratteri che costituisce il programma viene letta da sinistra verso destra e raggruppata in sequenze di caratteri (chiamate "token ") che hanno un senso logico globale, come un identificatore, una parola chiave, un simbolo di interpunzione. Es. la sequenza di caratteri nell'istruzione: position = initial + rate * 60 sarebbe raggruppata nei seguenti "tokens" : 1. Identificatore position 2. Simbolo di assegnamento = 3. Identificatore initial 4. Segno + 5. Identificatore rate 6. Segno * 7. Numero intero 60 I caratteri white che separano i "token" vengono di solito eliminati durante questa fase. La parte di compilatore che fa questa analisi si chiama scanner e lavora usando tecniche di teoria degli automi finiti. 4

ANALISI SINTATTICA È chiamata anche parsing (e parser si chiame la parte di compilatore che compie questa analisi) e consiste nel raggruppare i tokens in costrutti grammaticali che sono usati dal compilatore per sintetizzare l'output. Di solito i costrutti grammaticali sono rappresentati da un albero dell'analisi, così lo scopo del parser per lo più è quello di costruire il parse tree. Es. Un possibile albero dell'analisi (parse tree) per l'istruzione in esame è: assignment statement identifier = expression expression identifier initial position + expression expression identifier rate Un'altra comune rappresentazione della struttura sintattica dell'input è data dall'albero della sintassi (sintax tree), che è una forma compressa del parse tree nel quale gli operatori appaiono come nodi interni e gli operandi di un operatore sono i figli del nodo di quell'operatore. Un esempio di sintax tree per l'istruzione precedente è: * expression number 60 = + position * initial rate 60 5

ANALISI SEMANTICA Questa fase usa la struttura gerarchica determinata dalla fase precedente per identificare e controllare gli operatori e gli operandi delle espressioni e delle istruzioni ed identificare eventuali errori semantici nel programma sorgente. Compito principale di questa fase è il controllo dei tipi, cioè il controllo che ogni operatore abbia operandi permessi dalla specifica del linguaggio. Es. Nell'istruzione precedente, se tutti gli identificatori fossero stati dichiarati float, l'approccio sarebbe quello di convertire l'intero 60 in un float ed il compilatore rimpiazzerebbe la costante intera con una float equivalente. = + position * initial rate intofloat 60 GESTIONE DELLA TABELLA DEI SIMBOLI Scopo della gestione della tabella dei simboli è quello di memorizzare tutti gli identificatori usati nel programma sorgente e di collezionare gli attributi di ogni identificatore (la memoria allocata, il tipo, dove è valido nel programma, se è il nome di una procedura ed in tal caso il numero ed i tipi degli argomenti oltre al metodo di passaggio dei parametri ed al tipo del valore ritornato). Quando un identificatore viene individuato nel programma sorgente dall' analizzatore lessicale esso viene messo nella tabella dei simboli; i vari attributi vengono aggiunti via via che vengono collezionati dalle varie fasi. RILEVAMENTO E COMUNICAZIONE DEGLI ERRORI Ogni fase può trovare errori e comunicarli; il processo di compilazione prosegue alla ricerca del maggior numero di errori, senza interrompersi dopo ogni errore. 6

GENERAZIONE DEL CODICE INTERMEDIO Si può pensare alla rappresentazione intermedia come ad un programma per una macchina astratta. La forma intermedia deve essere facile da produrre a facile da tradurre nel linguaggio target. Di forme intermedie ne esistono una grande varietà; quella chiamata "codice a tre indirizzi" è simile ad un linguaggio macchina dove ogni locazione di memoria può agire come un registro. OTTIMIZZAZIONE DEL CODICE Cerca di migliorare il codice intermedio per poter ottenere codice finale più veloce. Nei cosiddetti "compilatori ottimizzanti" una parte significativa del tempo di compilazione è spesa in questa fase. Tuttavia ci sono semplici ottimizzazioni che non rallentano troppo la compilazione e che migliorano sensibilmente il tempo di esecuzione del programma target. GENERAZIONE DEL CODICE È la fase finale che genera il codice target, che di solito è codice macchina rilocabile o codice assembler. Locazioni di memoria sono scelte per ciascuna variabile del programma. Poi le istruzioni intermedie sono tradotte in una sequenza di istruzioni macchina equivalenti. Aspetto cruciale di questa fase è l'assegnazione dei registri. 7

ESEMPIO DI TRADUZIONE DI UNA ISTRUZIONE position = initial + rate * 60 lexical analyzer id 1 = id 2 + id 3 * 60 syntax analyzer = id 1 + * id 2 id 3 60 semantic analyzer SYMBOL TABLE position... initial... rate... = id 1 + * id 2 id 3 intofloat 60 intermediate code generator temp1=intoreal(60) temp2=id3 * temp1 temp3=id2 + temp2 id1=temp3 code optimizer temp=id3 * 60.0 id1=id2+temp code generator MOVF id3, R2 MULF #60.0, R2 MOVF id2,r1 ADDF R2, R1 MOVF R1,id1 8

COMPILER-COMPILER Regole lessicali Grammatica Routines semantiche COMPILER-COMPILER SCANNER PARSER GENERATORE DEL CODICE I compilatori generati con questa tecnica sono più grossi e compilano più lentamente di quelli scritti a mano, ma il codice generato è più veloce. INTERPRETI Un interprete processa un programma sorgente come un compilatore (esegue analisi lessicale e sintattica ed eventualmente traduce in una forma interna, tipo quadruple od una estensione della forma polacca postfissa) ma lo esegue direttamente, cioè senza tradurre in codice macchina. L interprete può essere visto come un insieme di funzioni la cui esecuzione è giudata dalla forma interna del programma. La fase di traduzione è più veloce che nei compilatori, ma l esecuzione è più lenta. È vantaggioso in fase di debugging, poichè si hanno in linea tutte le tabelle. La maggior parte dei linguaggi può essere sia interpretata che compilata. COMPILATORI JUST ON TIME (CJT) Sono un compromesso tra compilatori e interpreti. SOLUZIONI IBRIDE Le applet java, copiate via rete, contengono una compilazione del codice sorgente, chiamato byte-code; esso costituisce codice macchina generale, cioè indipendente da specifici processori e/o architetture. Al momento dell esecuzione il byte-code viene interpretato o compilato da parte di una JVM (Java Virtual Machine) e poi eseguito. Alcuni calcolatori hanno un processore in grado di eseguire il byte-code direttamente. 9