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
 
 
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