Linguaggi Diversi tipi di linguaggi:

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

I Linguaggi di programmazione
Traduzione ed Interpretazione
Il Software.
Software di base: Linguaggi di Programmazione
Classe III A A.s – 2011 Sistemi di Elaborazione e Trasmissione dell’Informazione 4 ore settimanali (2 laboratorio) Docenti Prof. Alberto Ferrari.
Evoluzione dei linguaggi di programmazione
I linguaggi di programmazione
Sintassi (prima parte)
Inizio… Linguaggi Linguaggi di programmazione Linguaggi di programmazione Linguaggi di programmazione Linguaggi di programmazione Linguaggi Formali Linguaggi.
Linguaggi di programmazione
Type Checking (1° parte)
Algoritmi e Programmazione
Generalità Linguaggio e Macchina Astratta
Dr. Francesco Fabozzi Corso di Informatica
1 Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone
Corso di Laurea in Informatica Gabriella Pasi e Carla Simone
Fondamenti di Informatica
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
Introduzione allinformatica. Cosè linformatica ? Scienza della rappresentazione e dellelaborazione dellinformazione ovvero Studio degli algoritmi che.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione lll
Struttura dei sistemi operativi (panoramica)
Unità Didattica 2 I Linguaggi di Programmazione
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
Fondamenti di Informatica1 Linguaggi Classificati rispetto alle caratteristiche principali: –potere espressivo che influenza lo stile di programmazione.
Fondamenti di Informatica
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
Labortaorio informatica 2003 Prof. Giovanni Raho 1 INFORMATICA Termini e concetti principali.
La macchina di von Neumann
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
INFORMATICA MATTEO CRISTANI.
L' ARCHITETTURA DI VON NEUMANN
PROGRAMMAZIONE: linguaggi
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Architettura del calcolatore
Lo sviluppo del software e i linguaggi di programmazione
CONCETTI DI BASE 1.0 FONDAMENTI 1.1 HARDWARE 1.2 SOFTWARE 1.3 RETI
Linguaggi per COMUNICARE
Dal problema all’ algoritmo
la traduzione dei programmi
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali (corso TIE) CORSO LAUREA MAGISTRALE IN SCIENZE E TECNOLOGIE DELLE PRODUZIONI ANIMALI.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Algoritmi.
Concetti Fondamentali sulla Programmazione
1 Macchine astratte, linguaggi, interpretazione, compilazione.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l’ambiente e il territorio Il software di base Stefano Cagnoni e Monica Mordonini.
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
Il software Claudia Raibulet
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Informatica e Informatica di Base
Problemi, algoritmi e programmazione
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Programmazione dei Calcolatori Elettronici
LINGUAGGI DI PROGRAMMAZIONE E' un linguaggio formale dotato di una sintassi ben definita che viene utilizzato per scrivere programmi che realizzano algoritmi.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Unità di apprendimento 6
© 2016 Giorgio Porcu - Aggiornamennto 18/03/2016 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Il Sistema Operativo Concorrenza e Grafi.
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Transcript della presentazione:

Linguaggi Diversi tipi di linguaggi: Imperativi Funzionali Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio eseguibile dal calcolatore: il Linguaggio Macchina

Linguaggio Macchina Insieme di istruzioni eseguibili dalla CPU Dipende dalla CPU: cablata al suo interno, ogni istruzione genera una sequenza di segnali di controllo Linguaggio di basso livello si può accedere direttamente alle funzionalità di base del calcolatore

Linguaggio Macchina Complesso da utilizzare: ogni istruzione esegue un'operazione semplicissima esistono librerie con procedure generali Gli altri linguaggi vengono "convertiti" in sequenze di istruzioni in linguaggio macchina

Linguaggio Macchina Il Linguaggio Macchina è estremamente efficiente I programmi sono: più veloci più corti ma più complessi

Linguaggio Macchina La scrittura è complessa: istruzioni formate da stringhe di 1 e 0: quindi è necessario un insieme di simboli (Linguaggio Assembly) per referenziare le locazioni di memoria è necessario avere delle etichette necessario commentare ogni istruzione

Istruzioni Macchina Composte da: etichette (per eliminare riferimenti ad indirizzi fisici, facilitano le modifiche) codici operativi (non può mai mancare) operandi (0, 1 o 2) START: MOV AX, BX CMP AX, 12h JZ EQUAL INT 21h RET EQUAL: MOV BL, 82h

Il BIOS Il BIOS (Basic Input Output System) è uno strato di software utilizzato per standardizzare l'accesso ai periferici Fornisce un insieme di procedure standard di interfaccia Permette la gestione a basso livello di: video, tastiera, mouse, stampante,…

Applicazioni Assembly Visione stratificata Livelli superiori Applicazioni Assembly Sistema Operativo BIOS Hardware

Linguaggi Classificati rispetto alle caratteristiche principali: potere espressivo che influenza lo stile di programmazione

Linguaggi - basso livello Il linguaggio macchina specifica solo le operazioni che l'elaboratore può eseguire sintattica molto elementare" diverso per ogni processore dipende dalle caratteristiche architetturali E' più orientato alla macchina che ai problemi da trattare è infatti definito di "basso livello"

Linguaggi - basso livello Una prima evoluzione è stata l'introduzione di linguaggi simbolici: linguaggi assemblativi ancora orientati alla macchina e non ai problemi più immediati da utilizzare definiscono variabili, simboli,...

Linguaggi - alto livello Altri linguaggi sono basati su: la descrizione del problema in modo intuitivo, dimenticandosi che verranno eseguiti da un calcolatore obiettivo: fornire un mezzo espressivo per specificare all'elaboratore il compito da eseguire

Linguaggi - alto livello Caratteristiche: ognuno ha i propri paradigmi che garantiscono forme espressive appropriate per alcuni problemi specifici questa specificità ha favorito la loro proliferazione (fenomeno intrinseco alla natura del linguaggio come forma di comunicazione)

Linguaggi Imperativi Linguaggi più evoluti: permettono di descrivere operazioni più complesse di quelle che l'elaboratore può eseguire livello di astrazione più alto risalgono agli anni '50 detti di alto livello di tipo imperativo Es: Basic, Fortran, Pascal

Linguaggi Imperativi Caratteristiche: di utilizzo più semplice indipendenti dall'elaboratore purtroppo ancora legati al modello di Von Neumann: i programmi sono ancora una sequenza di istruzioni; l'evoluzione del calcolo è costituita da una variazione dello stato della memoria

Linguaggi Imperativi Eseguono 3 tipi di operazioni: trasferimento dati operazioni aritmetiche alterazione del flusso del programma Già discussi in precedenza Basic (semplice ma poco espressivo) Fortran (molto usato per il calcolo scientifico e le librerie molto complete)

Linguaggi Funzionali Non sono legati al modello di Von Neumann ma al concetto di programmazione funzionale Il primo linguaggio funzionale: Lisp (List Processing), fine anni '50 caratteristiche di manipolazione agevole di informazioni di tipo simbolico

Linguaggi Funzionali Differenze con i linguaggi imperativi: il calcolo è basato sul calcolo di valori e non sull'assegnamento di valori a variabili basato su valori e non su effetti il risultato è il risultato di una funzione, non l'effetto causato dalla esecuzione di una sequenza di operazioni

Linguaggi Funzionali Caratteristiche: meccanismo di definizione funzionale per casi (tipo switch in C) è possibile la ricorsione (utilizzando tali costrutti condizionali) Il Lisp, però, consente anche l'iterazione e l'assegnamento (tipico dei ling. Imperativi)

Linguaggi Dichiarativi Basati sulla logica obiettivo: formalizzare il ragionamento caratterizzati da meccanismi deduttivi Programmare significa: descrivere il problema con formule del linguaggio interrogare il sistema, che effetua deduzioni sulla base delle definizioni

Linguaggi Dichiarativi Programmazione: semplice (occorre solo definire la propria conoscenza del problema) avviene tramite una formulazione dichiarativa Esempio: Prolog

Linguaggi Dichiarativi Un programma Prolog è costituito da: Asserzioni incondizionate (fatti): A Asserzioni condizionate (o regole): A IF B,C,D,… A: è la conclusione (conseguente) B,C,D: sono le premesse (o antecedenti) Una interrogazione ha la forma: ? A, B, C, …

Esempio Il fattoriale: Fatt (0,1) Fatt (z,w) IF Dec(z,z1), Fatt(z1,w1),Prod(z,w1,w) Problemi risolubili: calcolo del fatoriale: ? Fatt(3, x) calcolo di quel numero il cui fattoriale è noto: ? Fatt(x, 6)

Esempio Ricerca in un grafo orientato: B Ricerca in un grafo orientato: con la richiesta ? go(E) viene determinata la sequenza E, C, A A D go(A) arc(A,B) arc(B,C) arc(D,C) arc(A,C) arc(B,D) arc(C,E) go(y) IF arc(x,y), go(x) C E

Linguaggi Orientati agli Oggetti In un linguaggio di programmazione orientato agli oggetti (OOP) un programma consiste: Definizione di un insieme di classi. Creazione di un insieme di oggetti ed esecuzione dei suo metodi. Una classe definisce un tipo di oggetto come insieme di: Variabili Metodi I linguaggi OOP sono i linguaggi del futuro perché permettono un miglior riuso del software. Il C++ e Java sono i due linguaggi OOP più diffusi.

Sintassi e Semantica Nei linguaggi naturali si distinguono: sintassi (si occupa della forma delle frasi, delle regole per la loro creazione) semantica (significato delle frasi) Analogamente per i linguaggi di programmazione: sintassi: definisce i programmi legali semantica: significato dei programmi

Sintassi e Semantica Dopo la definizione di un linguaggio (con sintassi e semantica) serve un sistema che possa eseguire i programmi scritti in tale linguaggio Si parla di implementazione di un linguaggio generalmente è un traduttore verso il linguaggio macchina di un dato elaboratore

Sintassi Per definire la sintassi di un linguaggio, è necessario definire le grammatiche La grammatica è un insieme di regole che servono per costruire una frase

Grammatica La grammatica è definita da: V: un alfabeto di simboli terminali (l'alfabeto del linguaggio) N: un alfabeto di simboli non terminali S: un simbolo iniziale (o assioma) P: un insieme finito di regole sintattiche (dette produzioni) espresse nella forma: X  a

Grammatica Le produzioni possono essere scritte: anche nella forma alternativa: X ::= a se esistono più produzioni con parte sinistra uguale, X ::= a X ::= b X ::= c allora si può scrivere: X ::= a | b | c

Grammatica Derivazioni: una stringa c deriva dalla stringa b se esse possono essere decomposte in: b = m A n c = m a n con m e n simboli non terminali e se esiste la produzione A ::= a

Grammatica Data una grammatica, il linguaggio generato è definito come l'insieme delle frasi derivabili a partire dall'assioma S Le frasi di un linguaggio di programma-zione sono dette programmi

Formalismo di Backus-Naur (Backus -Naur Form, BNF) Il modo visto per definire una grammatica è detto di Backus-Naur introdotto negli anni '50 da Backus e Naur Esiste anche una estensione (Extended BNF, EBNF) che permette una scrittura più sintetica

Esempio di grammatica V: { il, lo, gatto, topo, sasso, mangia, beve } N: {<frase>, <soggetto>, <verbo>, <compl-oggetto>, <articolo>} S: <frase> P contiene le seguenti produzioni: <frase>::=<soggetto><verbo><compl-oggetto> <soggetto>::=<articolo><nome> <articolo>::= il | lo <nome>::= gatto | topo | sasso <verbo>::= mangia | beve <compl-oggetto>::=<articolo><nome>

Extended BNF X ::= [a]b equivale a X ::= b|ab X ::= {a}nb equivale a X ::= b|ab|aab|… ripetendo a fino a n volte X ::= {a}b equivale a X ::= b|ab|aab|… ripetendo a un numero di volte indefinito Equivale ad avere nella grammatica la produzione X ::= b | aX (ricorsiva)

Esempio di grammatica V: { 0,1,2,3,4,5,6,7,8,9,+,- } N: {<intero><int-senza-segno><numero> <cifra-non-nulla><cifra>} S: <intero> P contiene le seguenti produzioni: <intero> ::= [+ | - ] <int-senza-segno> <int-senza-segno> ::= <cifra> | <cifra-non-nulla><numero> <numero> ::= <cifra> | <cifra><numero> <cifra> ::= <cifra-non-nulla> | 0 <cifra-non-nulla> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Alberi sintattici Il processo di derivazione può essere descritto tramite un albero sintattico <frase> <soggetto> <verbo> <compl-oggetto> <articolo> <nome> <articolo> <nome> il gatto mangia il topo

Diagrammi sintattici Sono dei grafi: nodi: etichettati con simboli (terminali e non terminali), collegati da archi orientati un arco da i a j significa che il simbolo i è seguito dal simbolo j più archi rappresentano alternative si possono aggiungere nodi fittizi per rappresentare le diramazioni

Esempio di diagramma sintattico <intero> ::= + - <cifra-non-nulla> <cifra>

Sintassi dei linguaggi di programmazione Considerazioni sui linguaggi: uno stesso linguaggio può essere generato da più di una grammatica alcune grammatiche sono ambigue: cioè esistono diversi elementi che possono essere generati da diverse derivazioni (esistono cioè diversi alberi sintattici). Situazione da evitare!

Esempio di grammatica ambigua Esempio: <expr> ::= x | y | z | (<expr>) | <expr>+<expr> | <expr>*<expr> All'espressione x+y*z possono essere associati due alberi sintattici diversi questo influenza anche il modo con cui viene attribuito il significato all'espressione

Esempio di grammatica ambigua Nella definizione dei linguaggi si deve evitare l'ambiguità Esempio: <istruzione-if> ::= if <espressione> then <istruzione> else <istruzione>

Analizzatore sintattico L'analisi della correttezza è eseguita dall'elaboratore: è suddiviso in 3 passi: analisi lessicale: controlla che i simboli utilizzati appartengano all'alfabeto analisi grammaticale: verifica il rispetto delle regole grammaticali analisi sintattica contestuale: verifica restrizioni di tipo contestuale (tipi di dati, identificatori non definiti,…)

Analizzatore sintattico Generalmente l'analizzatore sintattico esegue le tre verifiche simultaneamente Si dice "ad una passata " Durante la scansione, se viene trovato un errore, si cerca di recuperare e si prosegue fino al termine

Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software Esso svolge funzioni di base: traduzione di linguaggi da alto a basso livello comunicazione tra i vari sottosistemi hardware gestione e distribuzione delle risorse

Esecuzione dei programmi L'esecuzione di un programma scritto con un linguaggio ad alto livello è preceduta dai seguenti passi: traduzione in linguaggio macchina collegamento con programmi di supporto (calcoli, comunicazione con periferiche,…) caricamento in memoria

Compilatori e Interpreti Esistono due modi per eseguire i 3 passi menzionati: in sequenza, dopo il termine del passo precedente (compilatori) in sequenza, prima del termine del passo precedente (interprete, detto anche simulazione software)

Traduzione in linguaggio macchina Viene suddivisa in 2 passi: analisi (lessicale, grammaticale, contestuale) trasformazione del programma sorgente in programma oggetto (forma più vicina al linguaggio macchina): creazione tabella simboli ottimizzazioni (rimozione ripetizioni, eliminazione cicli, sfruttamento registri,…); livelli di ottimizzazione

Collegamento con programmi di supporto Il codice oggetto così formato: può ancora contenere dei simboli irrisolti riferimenti esterni a programmi di servizio (accesso alle periferiche, calcoli matematici,...) contiene indirizzi relativi Il Linker serve per collegare diversi moduli oggetto

Caricamento in memoria Il Loader serve per caricare in memoria un programma rilocabile Nel caricamento vengono fissati tutti gli indirizzi relativi variabili, salti, … Vengono caricati anche i programmi di supporto, se necessari