Sei sulla pagina 1di 5

CLASSIFICAZIONE DEI LINGUAGGI:

linguaggi naturali: con cui l’uomo si esprime, linguaggi formali: utilizzati per comunicazioni tra enti
precisi ed infine i linguaggi di programmazione: È un linguaggio con cui è possibile descrivere
algoritmi in maniera non ambigua e comprensibile dall’esecutore.
Anche un linguaggio di programmazione per essere tale ci sono regole:
Sintassi: regole per costruire esattamente le frasi.
Necessita di una grammatica.
Semantica: specifica il significato delle frasi definite dal linguaggio.
GRAMMATICA:
Una grammatica è definita da 4 elementi:
1. Insieme finito T di simboli terminali (sentenze del linguaggio)
2. Insieme finito N di simboli non terminali o metasimboli → usato nella costituzione delle
sentenze del linguaggio
3. Insieme finito P di regole di produzione (Es. specificano come un metasimbolo può
essere sostituito da una sequenza di simboli terminali e metasimboli)
4. Simbolo iniziale S → appartiene ai simboli non terminali → punto di partenza delle
sentenze
CARTE SINTATTICHE:
• Si specifica una carta sintattica per ciascun simbolo non terminale della
grammatica.
• Rettangoli → simboli non terminali (che vanno espansi con le carte sintattiche
corrispondenti).
• Ovali → simboli terminali.
• Biforcazione → alternativa.
CLASSIFICAZIONE DEI LINGUAGGI:
-Linguaggi di basso livello – machine oriented
Linguaggio macchina (1° generazione)
Assembly (2° generazione)
-Linguaggi ad alto livello
Fortran, Cobol, Basic, Pascal, C… (3° generazione)
4GL: SQL
5GL: intelligenza artificiale → possibilità di utilizzare linguaggi naturali.
TASSONOMIA DEI LINGUAGGI:
-Linguaggi di prima generazione:
Linguaggio macchina
-Linguaggi di seconda generazione:
Linguaggi assemblativi
LINGUAGGI:
linguaggi imperativi:
procedurali(c, pascal), ad oggetti(c++, java), paralleli(implem. parallele)
linguaggi dichiarativi:
funzionali, logici, relazionali

LINGUAGGI IMPERATIVI:
• Il modello computazionale è basato sui cambiamenti di stato della memoria
della macchina.
• È centrale il concetto di assegnazione di un valore ad una locazione di
memoria (variabile).
• Il compito del programmatore è costruire una sequenza di assegnazioni
(spesso reiterate) che producano lo stato finale → rappresenta la soluzione
del problema.
LINGUAGGI DICHIARATIVI
• Il modello computazionale è basato sui concetti di funzione e relazione.
• Il programmatore non ragiona in termini di assegnazioni di valori, ma di
relazioni fra entità e di valori di una funzione.
LINGUAGGI AD OGGETTI
• Il modello computazionale è basato sul concetto di classe (insieme) di oggetti
con cui sono definite le strutture dati per la rappresentazione delle
informazioni su cui opera il programma.
• Le funzioni e le procedure sono metodi definiti per operare su specifici
oggetti.
• Si basano sui concetti di incapsulamento, ereditarietà, polimorfismo.
ATTIVITÀ DEL CICLO DI SVILUPPO
• Progettazione
• Testing
• Documentazione
• Manutenzione
COMPILATORI E INTERPRETI
• Ogni traduttore è in grado di interpretare e tradurre un solo linguaggio
TRADUTTORI
• Compilatori
• Interpreti
• Assemblatori
COMPILATORI
• Un compilatore, dopo aver svolto un’analisi sintattica, traduce una serie di
istruzioni scritte in un determinato linguaggio di istruzioni (codice sorgente) in
istruzioni di un altro linguaggio (codice oggetto o codice eseguibile)
• Esegue una sola volta il processo:
Legge TUTTE le istruzioni del programma sorgente, ne verifica la correttezza e le
traduce in linguaggio macchina.
Memorizza su disco il programma eseguibile tradotto in linguaggio macchina.
• Al termine della compilazione: programma “eseguibile” in linguaggio
macchina
• La traduzione di ogni istruzione avviene una sola volta, anche se una stessa
istruzione viene ripetuta più volte all’interno del programma
• Non ho bisogno di avere il compilatore ed il “sorgente” per eseguire il
programma: basta il programma “eseguibile”
FASE DI ANALISI
• Serve per:
Riconoscere le frasi appartenenti al linguaggio ed interpretarne il risultato.
Se il riconoscimento fallisce rileva gli errori (violazioni delle regole
grammaticali)
Costure un insieme di informazioni sulle variabili, costanti,
funzioni/procedure, tipi di dati definiti dall’utente, spazio necessario per
contenere i dati.
FASE DI ANALISI E LINGUAGGIO
• Per comprendere il funzionamento della fase di analisi occorre definire gli
aspetti costitutivi del linguaggio → la GRAMMATICA
SCANNER
• Scanner: modulo del compilatore che esegue l’analisi lessicale
• Verifica le regole di costruzione delle parole, estraendone i TOKEN (parole
chiave, identificatori, costanti, operatori, …)
• Trasforma il codice sorgente in una sequenza di token

IDE
Integrated Development Environment:
Ambiente di sviluppo integrato: comprende una
varietà di strumenti coordinati per supportare il
processo di sviluppo dei programmi (creazione,
traduzione, esecuzione, test…)
●Editor
●Compilatore
●Linker
●Debugger

●Editor: pgm che permette di creare, modificare,


salvare e stampare un pgm sorgente
●Pgm sorgente: prg scritto in un linguaggio di
programmazione → file testuale
●Compilatore: programma che svolge analisi
sintattica e traduce le istruzioni scritte in un
determinato linguaggio di programmazione
(codice sorgente) in istruzioni di un altro
linguaggio (codice oggetto)
●Linker: programma che effettua il collegamento
tra programma oggetto e librerie del linguaggio
necessarie all'esecuzione del programma creando
il pgm eseguibile
●Libreria: insieme di funzioni (in formato
compilato) predisposte per essere collegate ad un
programma
●Debugger: programma per l'analisi e
l'eliminazione dei bug. Esegue la trace di un pgm
in modo automatico
●Help: pgm di aiuto – online, contestuale,
ipertestuale

ci possono essere vari tipi di errori:


-errori di compilazione(sintattici)
-errori di esecuzione(run time)
-errori logici: i risultati del pgm sono diversi da quelli attesi
ALIAS di tipo
● Permette di assegnare nomi alternativi a tipi di
dato esistenti
● Typedef
– Esempio:
typedef km_orari int;

Gerarchia degli operatori


● ! -(unario)
●*/%
●+-
● > >= < <=
● == !=
● &&
● ||
● ?:
●=

scope e lifetime:
Le variabili possono essere dichiarate e definite quasi ovunque in un pgm. la visibilità (scope) di una
variabile dipende da dove la variabile è stata dichiarata Attenzione! La stessa variabile può essere ri-
dichiarata (con visibilità diversa). Questo è da evitare (se possibile) per non rendere il programma
oscuro e a rischio di errore!
Namespace:
● Funzioni e variabili definite a global scope sono visibili dappertutto
● Per evitare che funzioni diverse (definite in librerie diverse) con lo stesso nome possano interferire
(name clash) → namespace → introduce un ulteriore, più alto livello di scope
funzioni di libreria:
● Funzione: insieme di istruzioni che realizzano un particolare compito
Funzioni di lib e prototipi:
● Per utilizzare una funzione di libreria bisogna conoscerne il prototipo (dichiarazione)
– int abs(int num);
– double sqrt(double num);
● I prototipi sono contenuti negli header file che devono essere inclusi all’inizio di un pgm

Black box:
● Non è necessario conoscere il suo funzionamento interno ma solo in e out
● Attraverso il prototipo (interfaccia) si sa cosa fa e come interagisce con l’esterno, ma non come lo fa

incrementi pre e post:


post:
● Il valore viene prima usato poi incrementato
int x,y;
y=4;
x=y++;
(x vale 4, y vale 5)
pre:
● Il valore viene prima incrementato, poi usato
int x,y;
y=4;
x=++y
(x vale 5, y vale 5)

Potrebbero piacerti anche