AMBIENTI DI PROGRAMMAZIONE

Documenti analoghi
Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

Laboratorio di Informatica I

LINGUAGGI DI ALTO LIVELLO

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.

Linguaggi di Programmazione

Alfabeto ed elementi lessicali del linguaggio C

LIVELLI DI ASTRAZIONE PROBLEMI E SPECIFICHE GRAMMATICHE BNF LINGUAGGI DI PROGRAMMAZIONE SEMANTICA SINTASSI DI UN LINGUAGGIO DI PROGRAMMAZIONE

LIVELLI DI ASTRAZIONE

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Breve storia e caratteristiche

I Fondamenti del Linguaggio

Dati due punti sul piano calcolare la loro distanza

1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Linguaggi di programmazione

La sintassi del C APPENDICE H

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

Linguaggi di Programmazione

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Linguaggi di Programmazione

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Le basi del linguaggio Java

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,

INFORMATICA. L informatica comprende:

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

Breve storia e caratteristiche

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

AMBIENTI DI PROGRAMMAZIONE

Struttura di un programma C++

Laboratorio di Informatica I

Variabili e Funzioni. Informatica 1 / 19

Struttura dei programmi e Variabili

Introduzione alla programmazione. Alice Pavarani

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione

Linguaggi, Traduttori e le Basi della Programmazione

Unità Didattica 2 I Linguaggi di Programmazione

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Università degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

Linguaggi di programmazione

Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici i (parole chiave)

Linguaggi Sintassi e Semantica

Un po di storia sui linguaggi

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 20 ottobre Corso di laurea in Economia

Laboratorio di informatica Ingegneria meccanica

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Introduzione alla programmazione in C(++)

Introduzione alla programmazione in linguaggio C

È una notazione con cui è possibile descrivere gli algoritmi.

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

LINGUAGGI DI PROGRAMMAZIONE

Introduzione al linguaggio C Primi programmi

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)

Fondamenti di Informatica

Corso sul linguaggio C

LINGUAGGI DI PROGRAMMAZIONE!

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio

Introduzione al Linguaggio C

Informatica (A-K) 7. Linguaggio C - 1

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Dichiarazioni e tipi predefiniti nel linguaggio C

Struttura dei programmi C

Lezione 5: Introduzione alla programmazione in C

Il linguaggio C Variabili e tipi di dato primitivi

I Linguaggi di Programmazione

Linguaggio di Programmazione. Fondamenti di Informatica T

Primi passi col linguaggio C

Un po di storia sui linguaggi

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Struttura di un linguaggio

Fondamenti di Informatica. Ingegneria elettronica

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Il Linguaggio C. Caratteristiche. Caratteristiche. Esempio di programma in C. Tipi di dato primitivi in C. Dati

Transcript:

2 AMBIENTI DI PROGRAMMAZIONE È l'insieme dei programmi che consentono la scrittura, la verifica e l'esecuzione di nuovi programmi (fasi di sviluppo). Sviluppo di un programma: Affinché un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi eseguibile) da un calcolatore, occorre tradurlo dal linguaggio originario al linguaggio della macchina. Questa operazione viene normalmente svolta da speciali programmi, detti traduttori. 2 TRADUZIONE DI UN PROGRAMMA PROGRAMMA TRADUZIONE main() { int A; 00000... A=A+; 00.. if... 000.. Il traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione (sorgenti) nella corrispondente rappresentazione in linguaggio macchina (programma eseguibile).

2 SVILUPPO DI PROGRAMMI Programma Sorgente: main(){.. Programma eseguibile: 0000... Esecuzione Due categorie di traduttori: i Compilatori traducono lʼintero programma (senza eseguirlo!) e producono in uscita il programma convertito in linguaggio macchina gli Interpreti traducono ed eseguono immediatamente ogni singola istruzione del programma sorgente. 2 SVILUPPO DI PROGRAMMI Programma Sorgente: main(){.. Programma eseguibile: 0000... Esecuzione Quindi: nel caso del compilatore, lo schema precedente viene percorso una volta sola prima dellʼesecuzione nel caso dellʼinterprete, lo schema viene invece attraversato tante volte quante sono le istruzioni che compongono il programma. 2

2 SVILUPPO DI PROGRAMMI Programma Sorgente: main(){.. Programma eseguibile: 0000... Esecuzione Generalmente, l'esecuzione di un programma compilato è più veloce dellʼesecuzione di un programma interpretato Però cʼè da eseguire un passo di compilazione, che nel caso dellʼinterpretazione manca 2 AMBIENTI DI PROGRAMMAZIONE COMPONENTI Editor: serve per creare file che contengono testi (cioè sequenze di caratteri). In particolare, lʼeditor consente di scrivere il programma sorgente. E poi.

2 AMBIENTI DI PROGRAMMAZIONE I CASO: COMPILAZIONE Compiler: opera la traduzione di un programma sorgente (scritto in un linguaggio ad alto livello) in un programma oggetto direttamente eseguibile dal calcolatore. PRIMA si traduce tutto il programma POI si esegue la versione tradotta. 2 AMBIENTI DI PROGRAMMAZIONE I CASO: COMPILAZIONE (segue) Linker: nel caso in cui la costruzione del programma oggetto richieda lʼunione di più moduli (compilati separatamente), il linker provvede a collegarli formando un unico programma eseguibile. Debugger: consente di eseguire passo-passo un programma, controllando via via quel che succede, al fine di scoprire ed eliminare errori non rilevati in fase di compilazione. 4

2 AMBIENTI DI PROGRAMMAZIONE II CASO: INTERPRETAZIONE Interpreter: traduce ed esegue direttamente ciascuna istruzione del programma sorgente, istruzione per istruzione. È alternativo al compilatore (raramente sono presenti entrambi). Traduzione ed esecuzione sono intercalate, e avvengono istruzione per istruzione. LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione viene definito mediante: alfabeto (o vocabolario): stabilisce tutti i simboli che possono essere utilizzati nella scrittura di programmi sintassi: specifica le regole grammaticali per la costruzione di frasi corrette (mediante la composizione di simboli) semantica: associa un significato (ad esempio, in termini di azioni da eseguire) ad ogni frase sintatticamente corretta. 5

SEMANTICA Attribuisce un significato ad ogni frase del linguaggio sintatticamente corretta. Molto spesso è definita informalmente (per esempio, a parole). Esistono metodi formali per definire la semantica di un linguaggio di programmazione in termini di azioni (semantica operazionale) funzioni matematiche (semantica denotazionale) formule logiche (semantica assiomatica) Benefici per il programmatore (comprensione dei costrutti, prove formali di correttezza), l implementatore (costruzione del traduttore corretto), il progettista di linguaggi (strumenti formali di progetto). SINTASSI DI UN LINGUAGGIO DI PROGRAMMAZIONE La sintassi di un linguaggio può essere descritta: in modo informale (ad esempio, a parole), oppure in modo formale (mediante una grammatica formale). Grammatica formale: è una notazione matematica che consente di esprimere in modo rigoroso la sintassi dei linguaggi di programmazione. Un formalismo molto usato: BNF (Backus-Naur Form) 6

GRAMMATICHE BNF Una grammatica BNF è un insieme di 4 elementi:. un alfabeto terminale V: è l insieme di tutti i simboli consentiti nella composizione di frasi sintatticamente corrette; 2. un alfabeto non terminale N (simboli indicati tra parentesi angolari < >). un insieme finito di regole (produzioni) P del tipo: X ::= A dove X N, ed A è una sequenza di simboli α ( stringhe ) tali che α (N V). 4. un assioma (o simbolo iniziale, o scopo) S Ν ESEMPIO DI GRAMMATICA BNF Esempio: il linguaggio per esprimere i naturali V : { 0,, 2,, 4, 5, 6, 7, 8, 9 } N : { <naturale>, <cifra-non-nulla>, <cifra> } P : <naturale> ::= 0 <cifra-non-nulla> { <cifra> } <cifra-non-nulla> ::= 2 4 5 6 7 9 <cifra> ::= 0 <cifra-non-nulla> S : <naturale> 7

DERIVAZIONE Una BNF definisce un linguaggio sull alfabeto terminale, mediante un meccanismo di derivazione (o riscrittura): Definizione: Data una grammatica G e due stringhe β, γ elementi di (N V)*, si dice che γ deriva direttamente da β (β γ) se le stringhe si possono decomporre in: β = η A δ γ = η α δ ed esiste la produzione A ::= α. Si dice che γ deriva da β se: β=β0 β β2... βn = γ IL TOPO MANGIA IL GATTO V : { il, gatto, topo, Tom, Jerry, mangia } N : { <frase>, <soggetto>, <verbo>, <compl-oggetto>, <articolo>, <nome> } S : <frase> P (produzioni) : <frase> ::= <soggetto> <verbo> <compl-oggetto> <soggetto> ::= <articolo> <nome> <nome-proprio> <compl-oggetto> ::= <articolo> <nome> <nome-proprio> <articolo> ::= il <nome> ::= gatto topo <nome-proprio> ::= Tom Jerry <verbo> ::= mangia 8

ALBERO SINTATTICO Albero sintattico: esprime il processo di derivazione di una frase mediante una grammatica. Serve per analizzare la correttezza sintattica di una stringa di simboli terminali. S : il topo mangia il gatto <frase> derivazione left-most <soggetto> <verbo> <compl-oggetto> <articolo> <nome> <articolo> <nome> il topo mangia il gatto Definizioni: LINGUAGGIO Data una grammatica G, si dice linguaggio generato da G, LG, l insieme delle sequenze di simboli di V (frasi) derivabili, applicando le produzioni, a partire dal simbolo iniziale S. Le frasi di un linguaggio di programmazione vengono dette programmi di tale linguaggio. 9

EBNF: Extended BNF X ::= [a]b a puo comparire al più una volta: equivale a X ::= B ab X ::= {a} n B a puo comparire da 0 a n volte Es.: X ::= {a} B, equivale a X ::= B ab aab aaab X ::= {a} B equivale a X ::= B ax (ricorsiva) (a puo comparire da 0 ad un massimo finito arbitrario di volte) () per raggruppare categorie sintattiche: Es.: X ::= ( a b ) D c equivale a X ::= a D b D c ESEMPIO Numeri interi di lunghezza qualsiasi con o senza segno (non si permettono numeri con più di una cifra se quella più a sinistra è 0 es: 059) V : {0,, 2,, 4, 5, 6, 7, 8, 9 } U { +, - } N : { <intero>, <int-senza-segno>, <cifra>, <cifra-non-nulla> } S : <intero> P : <intero> ::= [ + - ] <intero-senza-segno> <int-senza-segno> ::= { <cifra> } 0 <cifra-non-nulla> <cifra> ::= <cifra-non-nulla> 0 <cifra-non-nulla> ::= 2 4 5 6 7 9 0

Albero sintattico: Albero sintattico per la generazione del numero -547 usando la grammatica EBNF: per esercizio Il linguaggio C Struttura e sintassi di un programma main() { /*definizioni variabili: */ char y= a ; /*codice(a)=97*/ int x,x,y; unsigned int Z; float SUM; double r; /* parte istruzioni: */ X=27; Y=4; Z = X + Y -00; X = Z / 0 + 2; Y = (X + Z) / 0 * 0; /* qui X=0, Y=00, Z=70 */ X = X + 70; Y = Y % 0; Z = Z + X -70; SUM = Z * 0; /* X=00, Y=0, Z=00, SUM=000.0*/ x=y; /* char -> int: x=97*/ x=y+x; /*x=94*/ r=y+.; /* char -> int -> double*/ x=r; /* coercizione -> troncamento: x=98*/ }

Breve storia e caratteristiche Progettato nel 972 da D. M. Ritchie presso i laboratori AT&T Bell, per poter riscrivere in un linguaggio di alto livello il codice del sistema operativo UNIX. Definizione formale nel 978 (B.W. Kernigham e D. M. Ritchie) Nel 98 è stato definito uno standard (ANSI C) da parte dell'american National Standards Institute. Alcune caratteristiche: Elevato potere espressivo: Tipi di dato primitivi e tipi di dato definibili dall utente Strutture di controllo (programmazione strutturata, funzioni e procedure) Caratteristiche di basso livello Gestione della memoria, accesso alla rappresentazione Esempio di programma in C #include <stdio.h> main() { // dichiarazione variabili int A, B; // input dei dati printf( "Immettere due numeri: " ); scanf( "%d %d", &A, &B ); // eseguo semisomma e mostro risult. printf( "Semisomma: %d\n", (A+B)/2 ); } 2

Elementi del testo di un programma C Nel testo di un programma C possono comparire: parole chiave: sono parole riservate che esprimono istruzioni, tipi di dato, e altri elementi predefiniti nel linguaggio identificatori: nomi che rappresentano oggetti usati nel programma (ad esempio: variabili, costanti, tipi, funzioni, etc.) costanti: numeri (interi o reali), caratteri e stringhe operatori: sono simboli che consentono la combinazione di dati in espressioni commenti Elementi del programma in C /* programma per la semisomma */ #include <stdio.h> parola main() { identificatori chiave commenti costanti operatori // dichiarazione variabili int A, B; // input dei dati printf( "Immettere due numeri: " ); scanf( "%d %d", &A, &B ); // eseguo semisomma e mostro risult. printf( "Semisomma: %d\n", (A+B)/2 ); }

Parole chiave Esprimono istruzioni, tipi di dato,e altri elementi predefiniti nel linguaggio Sono parole riservate (cioè non possono essere utilizzate come identificatori) auto break case const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned void volatile while Identificatori Un identificatore è un nome che denota un oggetto usato nel programma (es.: variabili, costanti, tipi, funzioni). Deve iniziare con una lettera (o con il carattere _ ), alla quale possono seguire lettere e cifre in numero qualunque: <identificatore> ::= <lettera> { <lettera> <cifra> } distinzione tra maiuscole e minuscole (case-sensitive) Es.: Alfa, beta, Gamma, X sono identificatori validi X, int non sono identificatori validi Regola Generale: prima di essere usato, ogni identificatore deve essere gia` stato definito in una parte di testo precedente. 4

Costanti Valori interi : Rappresentano numeri relativi (quindi con segno): 2 byte 4 byte base decimale 2 70000, 2L base ottale 04 020560 base esadecimale 0xFF 0x70 Valori reali : 24.0 2.4E 240.0E- Suffissi: l, L, u, U ( interi - long, unsigned ) f, F ( reali - floating ) Prefissi: 0 (ottale) 0x, 0X ( esadecimale ) Caratteri : Insieme dei caratteri disponibili (è dipendente dalla realizzazione). In genere, ASCII esteso (256 caratteri). Si indicano tra apici singoli: 'a' 'A' ' ' '' ';' '\'' Costanti Caratteri speciali: sono caratteri ai quali non è associato alcun simbolo grafico, ai quali è associato un significato predefinito Newline '\n' se stampato, provoca l'avanzamento alla linea successiva backspace '\b' se stampato, provoca l'arretramento al carattere precedente form feed '\f' se stampato, provoca l'avanzamento alla pagina successiva carriage return '\r' se stampato, provoca l'arretramento all'inizio della linea corrente ecc. Stringhe: Sono sequenze di caratteri tra doppi apici. "a" "aaa" "" (stringa nulla) 5

Commenti: Sono sequenze di caratteri ignorate dal compilatore: vanno racchiuse tra /* e */ oppure precedute da // /* questo codice non deve essere eseguito: int X, Y; */ int A, B; // ho cambiato i nomi alle variabili I commenti vengono generalmente usati per introdurre note esplicative nel codice di un programma. Struttura di un programma C Nel caso più semplice, un programma C consiste in: <programma> ::= [ <parte-dich-globale> ] { <dich-funzione> } <main> { <dich-funzione> } <main> ::= main() { <parte-dichiarazioni> <parte-istruzioni> } dichiarazioni: oggetti che verranno utilizzati dal main (variabili, tipi, costanti, etichette, etc.); istruzioni: implementano l algoritmo risolutivo utilizzato, mediante istruzioni del linguaggio. Formalmente, il main è una funzione 6

Esempio: #include <stdio.h> main() { // dichiarazione variabili int A, B; // input dei dati dichiarazioni istruzioni printf( "Immettere due numeri: " ); scanf( "%d %d", &A, &B ); // eseguo semisomma e mostro risult. printf( "Semisomma: %d\n", (A+B)/2 ); } 7