Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Valeria Vittorini » 8.Linguaggio e Programma


Fondamenti di Informatica

Linguaggio e Programma

Sommario

  • Linguaggi di programmazione
    • Linguaggio Macchina
    • Linguaggi simbolici
  • Processo di traduzione di un programma
  • Traduttori
    • Compilatori
    • Interpreti
  • Ciclo di vita di un programma

Un pò di storia…

All’inizio era …. Il bit.

  • Tra gli anni ‘40 e ‘50 si programmava in linguaggio macchina.

Il Primo Passo

  • I linguaggi assemblativi: le istruzioni del linguaggio macchina non perdono la loro individualità ma al posto dei codici operativi vengono utilizzati codici simbolici letterali, gli operandi sono indicati con nomi simbolici

Linguaggio macchina

  • Esempio di istruzione in linguaggio macchina per l’operazione C=A+B supponendo che il formato dell’istruzione su complessivi 32 bit sia:
    • codice operativo: 6 bit
    • primo operando: 5 bit
    • secondo operando: 5 bit
    • registro destinazione: 5 bit
    • offset: 5 bit
    • Variante del codice operativo: 6 bit

000000 10001 10010 01000 00000 100000

Linguaggio Assemblativo

  • l’istruzione in linguaggio assembler corrispondente all’istruzione in linguaggio macchina nella slide precedente potrebbe essere:

add $t0, $s1, $s2

  • dove i registri sono numerati come segue:

$t0=8, $s1=17, $s2=18

  • Un programma espresso in linguaggio assenbler è ancora strettamente orientato alla macchina ma ha già bisogno di essere tradotto per poter essere eseguito
  • La traduzione è effettuata a sua volta da un apposito programma detto assemblatore

Linguaggi di Programmazione

  • Dagli anni ‘50 in poi si è avuta una evoluzione dei linguaggi verso:
    • Astrazione
    • Semplificazione
    • Similarità con il ragionamento umano
  • I linguaggi di programmazione ad “alto livello” sono linguaggi simbolici orientati ai problemi (a differenza dei linguaggi assemblativi che sono linguaggi simbolici orientati alla macchina)
  • Uno dei primi linguaggi ad alto livello, sviluppato a partire dal 1954, è stato il FORTRAN (FORmula TRANslation), un linguaggio simbolico orientato a problemi di tipo tecnico-scientifico

Definizione dei Linguaggi

  • Un linguaggio di programmazione ha una sua definizione formale che non tratteremo in questo corso.
  • In generale è definito per mezzo della sua:
    • SINTASSI, che specifica le regole da seguire per la costruzionie di programmi formalmente corretti
    • SEMANTICA, che definisce il significato di ciascuna frase
  • Inoltre ciascun linguaggio ha un suo LESSICO, cioè i componenti elementari previsti dal linguaggio che possono essere utilizzati per costruire un programma (parole chiave, operatori, costanti, etc..), detti anche token

Macchina virtuale

  • Un linguaggio di programmazione definisce una macchina virtuale di alto livello -rispetto alla macchina base e a quella ottenuta aggiungendo lo strato di software di base- (lezione sulla struttura di un sistema di elaborazione):
    • in grado di eseguire azioni elementari più potenti
    • dotata di maggiore flessibilità nell’aggregare tali azioni
    • semplificando la specifica degli algoritmi

Programma

  • Le frasi di cui si compone un programma espresso mediante un linguaggio possono in generale essere di tipo:
  • dichiarativo: definiscono gli oggetti da trattare
  • esecutivo: nei linguaggi di tipo imperativo sono la specifica mediante il linguaggio delle azioni da eseguire
  • Si ricorda che un programma è la traduzione di un algoritmo in un linguaggio di programmazione ed è realizzato organizzando le frasi mediante gli strumenti messi a disposizione dal linguaggio per la specifica della sequenza statica (come spiegato nella lezione relativa ai concetti di informazione, elaborazione, ed algoritmo)

Processo di traduzione di un programma

  • Un programma espresso mediante un linguaggio simbolico deve necessariamente essere tradotto in linguaggio macchina per poter essere eseguito
  • Il processo di traduzione analizza il codice del programma (codice sorgente) e produce un codice oggetto (la traduzione) in due fasi principali:
    • Analisi
    • Traduzione

Analisi

  • Nella fase di analisi il traduttore svolge le seguenti attività a partire dal codice sorgente:
    • Analisi lessicale: riconoscimento dei componenti lessicali
    • Analisi sintattica: riconoscimento delle frasi e del costrutto sintattico in base alle regole sintattiche
    • Analisi semantica: determina se sarà possibile eseguire il programma, se in base alle regole semantiche il programma “ha senso”
  • In questa fase il traduttore è quindi in grado anche di verificare la correttezza lessicale, sintattica, e semantica del codice sorgente
  • Nel caso venga individuato un errore, l’errore viene segnalato ed il processo di traduzione viene interrotto

Traduttori

  • I traduttori possono appartenere a due diverse categorie:
    • Compilatori
      • L’esecuzione del programma si articola in due momenti distinti: tempo di compilazione e tempo di esecuzione
  • Interpreti
    • Il programma viene tradotto ed eseguito frase per frase, cioè l’interprete opera direttamente a tempo di esecuzione

Compilatori e Interpreti

  • Compilatori
    • Veloci nell’esecuzione
    • Necessitano di poca memoria
    • Permettono la compilazione separata
    • Difficili da scrivere
  • Interpreti
    • Lenti nell’esecuzione
    • Spesso si utilizza un linguaggio intermedio
    • Progetti di dimensione limitata
    • Facilità d’interazione col codice e velocità di sviluppo
    • Facili da scrivere

Ciclo di vita di un programma

  • I linguaggi ad alto livello possono dunque essere linguaggi compilativi od interpretativi. Nel seguito faremo riferimento a linguaggi compilativi
  • Il ciclo di vita di un programma espresso mediante un linguaggio compilativo si articola nei seguenti passi:
    • Preparazione del testo origine
    • Compilazione
    • Collegamento
    • Caricamento
    • Esecuzione
    • Debugging
    • Manutenzione

Ciclo di vita di un programma

  • Preparazione del testo origine: il codice sorgente viene prodotto utilizzando un editor e memorizzato in un file
  • Compilazione: il file sorgente viene compilato, se la compilazione va a buon fine viene prodotto il codice oggetto e memorizzato in un file oggetto. Se la compilazione è interrotta in fase di analisi per la presenza di errori, gli errori devono essere corretti e il file sorgente deve essere ricompilato
  • Collegamento: un file oggetto non è in generale un file eseguibile dalla macchina. Il programma infatti potrebbe essere costituito da più file sorgenti e/o utilizzare altri programmi di cui devono essere disponibili i relativi file oggetto. I diversi moduli oggetto costituenti il programma devono essere collegati da un programma detto collegatore o linker, per produrre un file eseguibile contenente il codice in linguaggio macchina. Errori possono essere individuati anche in questa fase. In tal caso è necessario correggerli e tornare al passo di compilazione

Ciclo di vita di un programma

  • Caricamento: il codice in linguaggio macchina deve essere memorizzato in memoria centrale da un programma (software di base) detto caricatore o loader
  • Esecuzione: il programma viene eseguito dalla macchina
  • Debugging: a fronte dell’esecuzione dei casi di test è necessaria una accurata revisione e/o correzione del programma prima che venga rilasciato ad i suoi utenti finali
  • Manutenzione: dopo il primo rilascio un programma è soggetto a modifiche e revisioni, ad esempio nel caso si debbano adattare funzionalità già presenti a mutate situazioni o aggiungere nuove funzionalità…

Ciclo di vita di un programma


Prossima lezione

Programmazione

  • Introduzione al linguaggio C++
  • Tipi semplici
  • Variabili e costanti

I materiali di supporto della lezione

Fadini, C. Savy, Fondamenti di Informatica I, Napoli, Liguori Ed., 1997: Parte 2, cap. I, par. 1,2,3,4,5; Parte 2, cap. XIII, par. 1,2; Parte 2, cap. XIV, par. 1,2

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion