08 Lesson FI Algoritmi Complessita Linguaggi Di Programmazione
08 Lesson FI Algoritmi Complessita Linguaggi Di Programmazione
• Lessico
• Insieme di regole formali per la scrittura di insiemi di simboli dell’alfabeto, detti parole
• Crea il vocabolario, fatto di parole leggibili e comprensibili per chi le usa
• Sintassi
• Insieme di regole formali per la scrittura di frasi in un linguaggio, che stabiliscono la grammatica del
linguaggio stesso
• Semantica
• Insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio
Linguaggio macchina
• Linguaggio più semplice, direttamente compreso dalla CPU
• Stretto legame con l’hardware
• Alta velocità di esecuzione ed ottimizzazione nell’uso delle
risorse hardware
• Non c’è portabilità dei programmi tra processori differenti
• Un programma scritto per una CPU non è eseguibile da una CPU con
caratteristiche diverse
• Difficoltà di programmazione
• Gran numero di comandi per singole istruzioni
• Istruzioni espresse sotto forma di sequenze di bit!!!
Codifica delle istruzioni in linguaggio macchina
• Le istruzioni che un processore è in grado di eseguire sono rappresentate mediante un codice
binario definito dal cosiddetto linguaggio macchina del processore
Linguaggi di programmazione
Imperativi Dichiarativi
C++, Java,
C, Pascal,
Objective C, Occam Lisp Prolog
Fortran
C#
Linguaggi imperativi
• Il problema viene risolto mediante una sequenza ordinata di passi
• Sono fortemente legati al modello di Von Neumann (lo vedremo nelle prossime lezioni)
• Programmazione procedurale
• Permette di descrivere le operazioni in blocchi di codice detti sottoprogrammi
• Programmazione ad oggetti
• Consente la modellazione del problema come un insieme di oggetti che si scambiano
messaggi
• Gli oggetti sono istanze di tipi di dato astratto (le classi) definiti dal programmatore
• Trasversale
• Esistono linguaggi funzionali e logici ad oggetti, anche se è molto più frequente trovare linguaggi imperativi ad
oggetti
• Programmazione parallela
• Permette di descrivere formalmente algoritmi non sequenziali
Linguaggi dichiarativi
• Paradigma orientato al problema, cioè a cosa il programma deve fare per
risolvere un dato problema
• Programmazione funzionale
• Consiste nella valutazione di espressioni e nella combinazione di funzioni matematiche per
generare funzioni più potenti
• Programmazione logica
• Permette di descrivere la struttura logica del problema mediante definizioni ed
affermazioni, piuttosto che il modo di risolverlo
• L’esecuzione del programma consiste nell’utilizzare le informazioni ricevute per rispondere
alle interrogazioni dell’utente utilizzando regole di deduzione della logica classica
Elementi lessicali
• Un programma, scritto in un qualsiasi linguaggio di programmazione, prima di
essere eseguito viene sottoposto ad un processo di traduzione
• Lo scopo di questo processo è quello di tradurre il programma originale
(codice sorgente) in uno semanticamente equivalente, ma eseguibile su una
certa macchina
• Il processo di traduzione è suddiviso in più fasi, ciascuna delle quali volta
all'acquisizione di opportune informazioni necessarie alla fase successiva
Elementi lessicali
• La prima di queste fasi è nota come analisi lessicale ed ha il
compito di riconoscere gli elementi costitutivi del linguaggio
sorgente, individuandone anche la categoria lessicale
• Ogni linguaggio prevede un certo numero di categorie lessicali e in
C/C++ possiamo distinguere in particolare le seguenti categorie:
• Commenti
• Identificatori
• Parole riservate
• Costanti letterali
• Segni di punteggiatura e operatori
Traduzione dei programmi
¡ Per essere eseguito da una CPU, un Editor
¡ Interpretazione
§ la traduzione avviene ogni volta che il programma viene
eseguito
▪ tempi più lunghi
▪ maggiore portabilità
§ ad esempio, Python e PHP
Compilazione dei programmi
Editor
¡ Nell’approccio per compilazione la sola
traduzione non è sufficiente a rendere il prog.c
programma «eseguibile» dalla CPU
Compilatore
§ Servono delle funzionalità raccolte in librerie
▪ Interazione con il sistema operativo
prog.o
▪ Gestione dell’I/O lib.a
¡ Linker funz.o
Linker
§ attiva il programma
Compilatore
¡ Il suffisso dei file dipende dal sistema operativo
§ Windows § Unix prog.o
▪ lib.a
Sorgente: .c / .cpp ▪ Sorgente: .c / .cpp
Linker
▪ Oggetto: .obj ▪ Oggetto: .o funz.o
▪ Libreria: .lib ▪ Libreria: .a
prog.out
▪ Eseguibile: .exe ▪ Eseguibile: .out
Compilazione dei programmi
Editor
¡ Ambienti di sviluppo integrato (IDE)
§ In essi sono presenti funzionalità per prog.c