I linguaggi di programmazione

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Software di base: Linguaggi di Programmazione
Evoluzione dei linguaggi di programmazione
Linguaggi di programmazione
Programmazione Procedurale in Linguaggio C++
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
la traduzione dei programmi
Grammatiche 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa A05 Autovalutazione.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
Programmazione: Iterazione Esistono tre tipi di iterazione fondamentali e vedremo la corrispondenza dei relativi diagrammi a blocchi e la loro traduzione.
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
INFORMATICA ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE.
I linguaggi di programmazione Gruppo iOS 47: Colombini Christian Flora Jonathan Rossi Francesco.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica PROBLEMI E ALGORITMI LINGUAGGIO MACCHINA.
Gestione della memoria
Introduzione alla programmazione MIDI
© 2007 SEI-Società Editrice Internazionale, Apogeo
Sistemi e Applicazioni per l’Amministrazione Digitale
Lavoro di gruppo 3^E sia Peroni Jessica Mascheroni Beatrice
La rappresentazione delle informazioni
Linguaggi: guardando la semantica
Introduzione al linguaggio C
Linguaggio C: Espressioni
Dal problema al processo risolutivo
INFORMATICA DI BASE I FONDAMENTI.
Gli array Moreno Marzolla
Il linguaggio C Puntatori Moreno Marzolla
Programmazione per la Musica | Adriano Baratè
Il linguaggio C Strutture Moreno Marzolla
7. Strutture di controllo Ing. Simona Colucci
Logica binaria Moreno Marzolla
Algoritmi e soluzioni di problemi
IL CONCETTO DI ALGORITMO
Dal problema al processo risolutivo
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Programmazione strutturata
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Controllo e microprogrammazione
Classe III A A.s – 2012 Programma di Informatica
Programmazione e Laboratorio di Programmazione
Programmare.
Linguaggio C++ Selezione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Strutture di Controllo
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Ricorsione 16/01/2019 package.
Sviluppo di un programma
© 2007 SEI-Società Editrice Internazionale, Apogeo
Definizione di linguaggio di programmazione
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
La struttura dei primi programma in C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
La programmazione strutturata
Corso di Fondamenti di Informatica
Algoritmi.
ALGORITMO E’ una successione finita di passi che consente di risolvere tutti i problemi di una classe e di determinare il risultato. Caratteristiche: Finito.
Semantica operazionale:
Programmazione Procedurale
Programmazione Procedurale
Programmazione Procedurale
Transcript della presentazione:

I linguaggi di programmazione Moreno Marzolla Dipartimento di Informatica—Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/

Linguaggi di programmazione Copyright © Mirko Viroli http://mirkoviroli.apice.unibo.it/ Copyright © 2011 Gianluca Amato http://fad.unich.it/course/view.php?id=12 Copyright © 2011, 2016, 2017 Moreno Marzolla http://www.moreno.marzolla.name/teaching/FINFA/ This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 international (CC BY-SA 4.0) License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Linguaggi di programmazione

Linguaggi di programmazione Ringraziamenti prof. Mirko Viroli, Università di Bologna http://mirkoviroli.apice.unibo.it/ prof. Gianluca Amato, Università di Chieti-Pescara http://www.sci.unich.it/~amato/ Linguaggi di programmazione

Linguaggi di programmazione Hardware e Software Hardware: tutto ciò che ha una consistenza fisica. Monitor, stampante, tastiera, mouse, etc. sono esempi di hardware. Software: tutto ciò che non ha consistenza fisica, quindi i programmi (Windows, Linux, Word, ...) Linguaggi di programmazione

Linguaggi di programmazione Computer e Programmi Un programma per computer è costituito da una sequenza di istruzioni che istruiscono il computer sulle operazioni da svolgere Analogia “culinaria” Un programma è l'equivalente di una ricetta. Il computer equivale a un cuoco. Così come il computer esegue un programma e ci dà dei risultati sullo schermo o sulla stampante, il cuoco esegue la ricetta per produrre una pietanza Linguaggi di programmazione

Linguaggi di programmazione Linguaggio macchina L'unico linguaggio di programmazione eseguibile dalla CPU è il linguaggio macchina Ogni istruzione è rappresentata da uno o più byte PRO Massima efficienza CONTRO Difficile da leggere e scrivere per l'operatore umano CPU di tipo diverso potrebbero avere linguaggi macchina diversi e incompatibili 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 02 00 3e 00 01 00 00 00 40 04 40 00 00 00 00 00 40 00 00 00 00 00 00 00 88 11 00 00 00 00 00 00 00 00 00 00 40 00 38 00 09 00 40 00 1c 00 1b 00 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00 f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 00 00 0c 07 00 00 00 00 00 00 Linguaggi di programmazione

Linguaggi di programmazione Linguaggio assembly Ogni istruzione del linguaggio macchina è rappresentata da una sequenza di caratteri PRO Più leggibile (?) del linguaggio macchina CONTRO Ogni tipo di CPU ha il proprio linguaggio assembly Scrivere applicazioni complesse è laborioso xor %ebp,%ebp mov %rdx,%r9 pop %rsi mov %rsp,%rdx and $0xfffffffffffffff0,%rsp push %rax push %rsp mov $0x4005c0,%r8 mov $0x400550,%rcx mov $0x40052d,%rdi callq 400420 <__libc_start_main@plt> hlt nopw 0x0(%rax,%rax,1) mov $0x601047,%eax push %rbp sub $0x601040,%rax cmp $0xe,%rax mov %rsp,%rbp Linguaggi di programmazione

Linguaggi di alto livello Consentono di scrivere i programmi ignorando i dettagli della CPU su cui verranno eseguiti PRO Semplificano la scrittura di programmi Indipendenti dalla CPU CONTRO Non eseguibili direttamente dalla macchina #include <stdio.h> int main( ) { printf("Hello, world\n"); return 0; } Linguaggi di programmazione

Interpreti vs Compilatori Interprete Programma che legge una sequenza di istruzioni, espresse in un linguaggio di programmazione di alto livello, e le esegue direttamente Codice Sorgente Interprete Esecuzione CPU Linguaggi di programmazione

Interpreti vs Compilatori Compilatore Programma che traduce un programma (codice sorgente) scritto in un linguaggio di programmazione di alto livello in un programma equivalente in linguaggio macchina (codice macchina) Il programma in linguaggio macchina può essere direttamente eseguito dalla CPU Codice Sorgente Compilatore Codice Macchina Esecuzione CPU Linguaggi di programmazione

Linguaggi di programmazione Sintassi I programmi non possono essere espressi in un linguaggio “naturale” (es., italiano, inglese) Ambiguo Di difficile interpretazione per una macchina La sintassi di un linguaggio di programmazione è un insieme di regole che descrivono come deve essere scritto un programma per essere accettato dall'interprete/compilatore La sintassi è definita utilizzando una grammatica Linguaggi di programmazione

Elementi di una grammatica Un insieme di simboli (o parole) terminali es: {“il”, “la”, “cane”, “capra”, “gatto”, “mangia”, “dorme”} Un insieme di simboli non terminali es: {<frase>, <articolo>, <soggetto>, <verbo>} Un insieme di regole di produzione es: { <frase> ::= <articolo> <soggetto> <verbo> <articolo> ::= “il” | “la” <soggetto> ::= “cane” | “capra” | “gatto” <verbo> ::= “mangia” | “dorme” } E' possibile usare il simbolo e a destra di una regola di produzione per indicare la sostituzione vuota Un simbolo (tra quelli non terminali) iniziale es: <frase> Linguaggi di programmazione

Linguaggi di programmazione Esempio Si parte dal simbolo iniziale (<frase> nel nostro caso) Si applica una regola di produzione per sostituire un simbolo non terminale con una delle alternative a destra di ::= Il procedimento termina quando si ottengono tutti simboli terminali <frase> → <articolo> <soggetto> <verbo> → “il” <soggetto> <verbo> → “il” <soggetto> “mangia” → “il” “gatto” “mangia” <frase> ::= <articolo> <soggetto> <verbo> <articolo> ::= “il” | “la” <soggetto> ::= “cane” | “capra” | “gatto” <verbo> ::= “mangia” | “dorme” Linguaggi di programmazione

Linguaggi di programmazione Esempio Il processo di derivazione (trasformazione del simbolo iniziale in una frase valida del linguaggio) può essere visualizzato tramite una struttura ad albero <frase> <articolo> <soggetto> <verbo> “il” “gatto” “mangia” <frase> ::= <articolo> <soggetto> <verbo> <articolo> ::= “il” | “la” <soggetto> ::= “cane” | “capra” | “gatto” <verbo> ::= “mangia” | “dorme” Linguaggi di programmazione

Linguaggi di programmazione Attenzione Non tutti i programmi sintatticamente corretti hanno senso Nell'esempio precedente, la frase “la gatto dorme” viene riconosciuta come valida! Linguaggi di programmazione

Linguaggi di programmazione Esercizio Consideriamo la grammatica seguente, con simbolo iniziale <A> e simboli terminali ( e ) <A> ::= ε | ( <A> ) | <A> <A> Disegnare l'albero di derivazione per le seguenti stringhe del linguaggio ((())) (())() ()()() Stringa vuota Notare che la grammatica è ambigua, perché ()()() ha due alberi di derivazione diversi Linguaggi di programmazione

Linguaggi di programmazione Maratona FINFA Linguaggi di programmazione

Linguaggi di programmazione Esercizio Scrivere una grammatica BNF in grado di generare tutte e sole le sigle presenti sulla rosa dei venti seguente <Rosa> ::= <NS> | <EO> | <NS><EO> <NS> ::= “N” | “S” <EO> ::= “E” | “O” Linguaggi di programmazione Immagine: https://commons.wikimedia.org/w/index.php?curid=15810334

Linguaggi di programmazione Esercizio Definire una grammatica per rappresentare numeri interi senza segno Esempi: 1, 130, 79, 0 Non sono ammessi numeri con "zeri" iniziali ridondanti Non deve quindi generare cose come 0023 Suggerimento: può essere utile partire da una grammatica più semplice che genera anche numeri con zeri iniziali ridondanti. Es: <Num> ::= <Cifra> | <Cifra> <Num> <Cifra> ::= "0" | "1" | … | "9" Simboli terminali “0”, “1”, “2”, … “9” Simboli non terminali <num>, <cifre>, <cifra>, <cifra-nz> Regole di produzione <num> ::= “0” | <cifra-nz> <cifre> <cifre> ::= e | <cifra> <cifre> <cifra> ::= “0” | “1” | “2” | ... | “9” <cifra-nz> ::= “1” | “2” | ... | “9” Simbolo iniziale <num> Linguaggi di programmazione

Esercizio per casa (complesso) Definire una grammatica per rappresentare i numeri interi con segno. La grammatica deve essere in grado di generare, ad esempio: -129 +79 76 Non deve generare parole tipo 0023 Non deve generare +0 e -0, ma solo 0 (senza segno) Simboli terminali “0”, “1”, “2”, … “9”, “+”, “-” Simboli non terminali <num>, <segno>, <cifre>, <cifra>, <cifra-nz> Regole di produzione <num> ::= “0” | <segno> <cifra-nz> <cifre> <segno> ::= e | “+” | “-” <cifre> ::= e | <cifra> <cifre> <cifra> ::= “0” | “1” | “2” | ... | “9” <cifra-nz> ::= “1” | “2” | ... | “9” Simbolo iniziale <num> Linguaggi di programmazione

Linguaggi di programmazione Analisi sintattica In realtà, i compilatori (e gli interpreti) effettuano l'operazione inversa Determinano se esiste una sequenza di sostituzioni che, partendo dal simbolo iniziale della grammatica, produca la sequenza di parole presenti nel programma Se esiste, il programma si dice sintatticamente corretto Altrimenti, il compilatore segnala un errore di sintassi #include <stdio.h> int main( void ) { printf("Hello, world!\n") return 0; } $ gcc hello.c hello.c: In function ‘main’: hello.c:5:2: error: expected ‘;’ before ‘return’ return 0; ^ Linguaggi di programmazione

Linguaggi di programmazione Sintassi e Semantica Un linguaggio di programmazione è definito: Specificando una grammatica Sintassi del linguaggio Descrivendo l'effetto dell'esecuzione di un programma Semantica del linguaggio La semantica di un linguaggio definisce il significato di un programma sintatticamente corretto Es: molti linguaggi di programmazione riconoscono come sintatticamente corrette espressioni del tipo (a + b * 3) Pero' alcuni linguaggi considerano espressioni del tipo sopra non semanticamente corrette se le variabili a e b non contengono valori numerici (ma contengono, ad es., sequenze di caratteri) Linguaggi di programmazione

Linguaggi di programmazione

Evoluzione di alcuni linguaggi di programmazione Lisp Scheme Erlang Haskell Funzionale Smalltalk C++ Java C# Object Oriented linguaggi macchina FORTRAN COBOL Pascal C BASIC Ada Imperativo Prolog Dichiarativo 1950 1960 1970 1980 1990 2000 J. Glenn Brookshear, “Informatica una panoramica generale”, 2004 https://en.wikipedia.org/wiki/Timeline_of_programming_languages Linguaggi di programmazione

Linguaggi di programmazione Linguaggi imperativi C, Fortran, COBOL, BASIC I programmi vengono descritti mediante sequenze di istruzioni che cambiano lo stato della computazione int MCD( int x, int y ) { while ( x != y ) { if ( x > y ) { x = x - y; } else { y = y – x; } return x; Linguaggi di programmazione

Linguaggi di programmazione Linguaggi funzionali Scheme, ML, Haskell, Erlang I programmi sono descritti come composizione di funzioni che trasformano input in output Le funzioni possono essere passate come parametri, o ritornate come risultato da altre funzioni Molti linguaggi non funzionali non consentono ciò I linguaggi funzionali vengono utilizzati in ambiti particolari, richiedono esperienza per essere usati correttamente (define (square x) (* x x)) (define (double x) (* 2 x)) (define (compose f g) (lambda (x) (f (g x)))) ((compose square double) 3) => 36 Linguaggi di programmazione

Linguaggi dichiarativi Prolog e sue varianti Descrivono la logica del programma, anziché le istruzioni da eseguire per calcolare il risultato Molto usati nell’ambito dell’Intelligenza Artificiale Regole discendente(X, Y) :- genitore(Y, X). genitore(Z, X), discendente(Z, Y). Fatti genitore(antonio, carlo). genitore(fabio, anna). genitore(anna, andrea). genitore(anna, giulia). Chi sono i discendenti di fabio? ?- discendente(X, fabio). X = anna ? ; X = andrea ? ; X = giulia ? ; no Linguaggi di programmazione

Linguaggi ad oggetti (Object-Oriented) Java, C++, SmallTalk Basati sull'idea di “oggetto” astrazione usata per organizzare il codice per rappresentare tipi di dato astratti come astrazione computazionale client- server Molto utilizzati per programmazione “in-the- large” Integer MCD(Integer x,Integer y) { while (!x.equals(y)) { if (x.greaterThan(y)) x.subtract(y); else y.subtract(x); } return x; Linguaggi di programmazione

Linguaggi di programmazione Classi vs Oggetti Oggetto Una specifica casa realizzata seguendo il progetto Lo stesso progetto può essere usato per creare più case, identiche ma distinte l'una dall'altra Classe Il progetto per realizzare una casa Linguaggi di programmazione

Linguaggi di programmazione C Codice Sorgente Il linguaggio C è un linguaggio di “alto” livello che viene compilato in codice macchina Compilatore Codice oggetto Funzioni precompilate Linker Codice Eseguibile Esecuzione CPU Linguaggi di programmazione

Linguaggi di programmazione Perché C? Il linguaggio C fornisce costrutti di programmazione semplici Benefici: Facile da imparare Efficiente, quasi come programmare direttamente in assembler Ubiquo: si usa per programmare microcontrollori e supercomputer Ottimi compilatori liberamente disponibili Alcuni aspetti del linguaggio richiedono attenzione Es., puntatori e gestione esplicita della memoria Linguaggi di programmazione

Top Programming Languages 2015 scorso anno accademico Lucido dello Spectrum ranking 2015 Linguaggi di programmazione

Top Programming Languages 2016 Spectrum ranking 2016 Fonte: http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016 Linguaggi di programmazione

Linguaggi di programmazione “Il linguaggio di programmazione che userete maggiormente nella vostra vita lavorativa non è ancora stato inventato” Linguaggi di programmazione

Linguaggi di programmazione Punti chiave Hardware vs Software Interpreti vs Compilatori Grammatiche formali per definire la sintassi dei linguaggi di programmazione Cos'è il linguaggio C Linguaggi di programmazione