Lezione 1 - Linguaggi per la descrizione di algoritmi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Lezione 1 - Linguaggi per la descrizione di algoritmi"

Transcript

1 Lezione 1 - Linguaggi per la descrizione di algoritmi Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web:

2 Algoritmo riepilogo (1) Un algoritmo è come una ricetta da cucina, un insieme di passi da eseguire per arrivare alla soluzione del problema Un algoritmo viene concretizzato in un programma con un dato linguaggio a seconda dell'esecutore che deve comprenderne il linguaggio Le ricette sono scritte per un esecutore umano in linguaggio naturale Nel descrivere un algoritmo anche in linguaggio naturale devo individuare: Le istruzioni operative Il controllo del flusso delle istruzioni. Ad esempio una condizione per eseguire una determinata operazione, un salto ad una determinata locazione dell'algoritmo

3 Algoritmo operazioni: esempio Esempio euclide Calcola il resto della divisione di x per y : istruzione operativa (r x mod y) Se il resto è diverso da zero, ricomincia dal punto 1 utilizzando come x il valore attuale di y, e come y il valore del resto: controllo altrimenti prosegui con il passo successivo: controllo Il massimo comune divisore è uguale al valore attuale di y: istruzione operativa

4 Algoritmo riepilogo(2) A volte nascosti dalle tipicità dell'esecutore per cui è stato ideato l'algoritmo Nel nostro caso essendo sempre algoritmi orientati ad esecutori automatici occorre vestire i panni dell'esecutore anche in fase di scrittura dell'algoritmo Scrivere la ricetta degli spaghetti alla carbonara per un esecutore umano e per un esecutore ``robotico'' Occorre qualche cosa di più rigoroso per descrivere un algoritmo per evitare fraintendimenti e per garantire la trasposizione dell'algoritmo in un programma

5 Linguaggi per la descrizione di algoritmi(1) Linguaggi informali: Linguaggio Naturale Linguaggi semi-formali: Pseudo-codice, Flow chart (diagrammi di flusso) Specifiche iniziali, ancora intelleggibili all'essere umano Pseudo-codice : se A > 0 allora A = A + 1 altrimenti A = 0 Formale: Linguaggio di programmazione (esempio assembler)

6 Linguaggi per la descrizione di algoritmi (2) Il linguaggio è un formalismo costituito da: Un insieme di istruzioni primitive (elementi propri, facenti parte, del linguaggio) Un insieme di tipi di dato primitivi (numeri interi, numeri reali, caratteri, ecc.) Un insieme di operazioni primitive su tali dati (somma e sottrazione per i numeri interi e reali, ecc.)

7 Linguaggi semi-formali e formali Linguaggi grafici, come quello dei Flow chart o il più recente e generale linguaggio UML (Unified Modeling Language). Anche in questo caso si tratta di linguaggi pensati per un esecutore umano Linguaggi di programmazione, come ad esempio C++, Pascal, Java, VisualBasic, ecc., che sono per loro natura adatti ad un esecutore automatico, specificatamente il calcolatore.

8 Linguaggio naturale Il linguaggio naturale non si usa per la descrizione di algoritmi perchè è inadatto per una macchina: Ambiguo Vago Complicato Nessuno ha ancora costruito una macchina che capisce l'italiano (o l'inglese)

9 Pseudo-codice Risulta più chiaro percepirlo quando si sa già scrivere del codice piuttosto che al contrario Si rischia di scrivere in pseudo-naturale al posto che pseudo-codice Keyword o insieme di keyword che hanno una semantica precisa (es goto) Bisogna ricordarsi sempre dell'esecutore

10 Diagrammi di flusso (Flow chart) I diagrammi di flusso sono un formalismo grafico di descrizione degli algoritmi. I diversi tipi di istruzioni che caratterizzano questo formalismo sono rappresentati tramite blocchi di varia forma, connessi da frecce. Orientato principalmente ad un esecutore umano Ha il pregio di mettere ben in evidenza il control flow (la presenza di cicli, di salti, di biforcazioni, ecc..)

11 Linguaggio di programmazione Ideato per tradurre algoritmi in un linguaggio comprensibile al calcolatore Può essere definito in aderenza dettagliata alla macchina (assembler) o ad un livello più vicino al programmatore (alto livello) Quelli ad alto livello possono seguire paradigmi di programmazione differenti fornendo strumenti differenti per la codifica di algoritmi Non è generalmente utile nella fase di analisi concentrarsi sul linguaggio E' utile pensare ad un paradigma Spesso i programmi non risolvono algoritmi di natura direttamente matematica ma di natura interattiva

12 Lezione 2 - Nozione di variabile e istruzione Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web:

13 Linguaggi per la descrizione di algoritmi Importanza dell'esecutore nella definizione dell'algoritmo Il ruolo del linguaggio per descrivere l'algoritmo Tipologie di linguaggi (informale, semi-formale, formale) Importanza di individuare primitive (istruzioni, dati, operazioni) da usare nella descrizione dell'algoritmo

14 Variabile Concetto di variabile come incognita matematica Gli algoritmi agiscono su contenitori di valori che possono variare La variabile risiede in memoria RAM ed ha associato un identificatore ed una dimensione Serve aver ben chiara in mente l'architettura dell'elaboratore La variabile è un oggetto fisico l'incognita matematica è un oggetto mentale, entrambe vivono durante l'esecuzione della procedura che le coinvolge La vita di una variabile è ben definita in fase di programmazione (dichiarazione, scopo) non lo è quasi mai in fase preliminare di analisi e scrittura dell'algoritmo

15 Istruzioni Operazioni da eseguire Manipolano le variabili Valutazioni sulle variabili che generano dei salti (flusso di esecuzione) Se una variabile verifica una condizione fai una cosa altrimenti fanne un'altra Es: Se la pasta è cotta scolala altrimenti lasciala cuocere Es: Se il resto è diverso da zero, ricomincia dal punto 1 Nel momento in cui si scrive un algoritmo con un formalismo tra quelli introdotti si inizia a parlare di programma

16 Costrutti elementari di descrizione di un algoritmo Primo set di costrutti utili a descrivere un algoritmo Assegnamento: Analogo all' = matematico, assegna ad una variabile il risultato di una operazione Decisione: Specifica la condizione che deve essere valutata in termini di predicato di verità Salto: spostamento del flusso esecutivo L'accoppiata Decisione salto genera un costrutto di ripetizione, che permette di far ripetere una serie di istruzioni (corpo) fino a che la decisione non assume un valore di verità specifico Ripeti le seguenti istruzioni fino a che il resto non è zero

17 Descrizione tramite flow chart Assegnamenti racchiusi in rettangoli Decisioni racchiuse in rombi Flusso definito da frecce Una ripetizione è indicata da un loop, ovvero una sequenza ciclica di istruzioni contenente almeno una decisione che determina la fine del loop I loop vedono la presenza di una freccia di retroazione

18 1: Mem[0]:=0 2: read(mem[1]) 3: if Mem[1] 0 then goto 5 4: goto 7 5 Mem[3]:=Mem[0]-Mem[1] 6: if Mem[3] 0 then goto 16 7: write(mem[1]) 8: read(mem[2]) 9: Mem[3]:= Mem[2]-Mem[1] 10: if Mem[3] 0 then goto 12 11: goto 14 12: Mem[3]:=Mem[1]-Mem[2] 13: if Mem[3] 0 then goto 8 14: Mem[1]:=Mem[2] +Mem[0] 15: goto 3 16: halt Valutazione del flusso

19 Problema - algoritmo - flow chart(1) Problema: Moltiplicare due numeri naturali x e y, ottenendo il risultato r considerando un esecutore che sappia fare solo somme x, r, y denotano delle variabili ovvero un identificativo per un oggetto che è appunto variabile. l'assegnamento avviene espresso con il simbolo Formalizzazione del problema: r x y Passo 1: r 0; u y; Passo 2: r r + x; u u 1; Esegui il passo 2 fino a che u = 0;

20 Esempio di Traccia Per verificare la correttezza dell'algoritmo proposto è possibile fare delle prove e valutarne la tabella contenente le successioni dei risultati assegnati alle variabili (detta traccia). Esistono numerose varianti per risolvere lo stesso problema Esempio di traccia per l'istanza x = 3 y = 13

21 Moltiplicazione per somme Immaginiamoci di dover scrivere il programma che esegue una moltiplicazione come somme successive Scriviamolo in forma di diagramma di flusso

22 Flow chart: moltiplicazione per somme Trovare delle formulazioni alternative più efficienti per la moltiplicazione per somme

23 Esercizio: soluzione

24 Problema - algoritmo - flow chart(2) Problema: Dividere un numero naturale x per un numero naturale y, ricavando il quoziente intero q e il resto r Formalizzazione del problema tramite l'istruzione: (q,r) x div y div non è eseguibile va scomposto in sottrazioni ripetute Passo 1: q 0; r x; Passo 2: fintanto che r y ripetere quanto segue q q + 1; r r y; Questo esempio come il precedente descrive un processo sequenziale.

25 Flow chart: operazione div Scrivere il flow chart per l'algoritmo dell'operazione div descritto in precedenza

26 Considerazioni Quando il problema è di natura matematica, la formalizzazione matematica è di grande aiuto per la scrittura del programma Un programma descrive delle trasformazioni di stato delle proprie variabili Tali trasformazioni di stato ne definiscono il processo (programma in esecuzione) Il formalismo dei flow chart Evidenzia dei costrutti che sono alla base della programmazione Permette di definite facilmente la traccia del programma per seguire l'evolversi del processo relativo al programma Generalmente contiene operazioni definite in un linguaggio di programmazione formalizzato

27 Lezione 3 - Linguaggi di Programmazione (Sintassi e Semantica) Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web:

28 Sintassi e Semantica Sintassi di un programma: descrive come viene scritto Semantica di un programma: descrive il significato del programma La descrizione della sintassi è la parte più semplice nella descrizione di un programma Un linguaggio di programmazione è descritto da una sintassi formale e da una semantica informale Esempio: Consideriamo la data come un insieme di caratteri D e / : 01/03/2013 è una data Il giorno a cui si riferisce non è identificabile considerando solo la sintassi

29 Sintassi e semantica: descrizione La grammatica ha una importante applicazione nella definizione della sintassi di un linguaggio di programmazione La semantica può essere resa comprensibile tramite delle descrizioni in linguaggio naturale Esiste un conflitto tra precisione e leggibilità che ha dato vita a diverse forme di descrizione di un linguaggio. Tutorial: per esempi sintassi e semantica introdotti gradualmente Manuale di riferimento: Organizzato solitamente attorno alla sintassi Definizioni formali: descrizione precisa di sintassi e semantica, per specialisti La semantica formale non interessa per questo corso ma per un corso di linguaggi

30 Notazione delle espressioni matematiche (1) Espressioni tipo a b + c sono utilizzate dalla matematica da secoli Alcuni linguaggi di programmazione cercano di utilizzare una notazione simile per renderla più familiare In generale i linguaggi di programmazione usano dei mix di notazioni differenti Prefissa: l'operatore è indicato prima degli operandi +a b Postfissa: l'operatore è indicato dopo gli operandi a b+ Infissa: l'operatore è indicato tra gli operandi a + b Le notazioni prefissa e post fissa non richiedono parentesi per essere eseguite correttamente (nell'ordine corretto)

31 Notazione delle espressioni matematiche (2) Il numero di operandi di un operatore è detto arità Es. notazione prefissa = = 900 similmente = Es. notazione postfissa = = 900 similmente = La notazione infissa richiede delle regole di precedenza o l'uso di parentesi Operatori con la stessa precedenza (e.g. + e -) vengono raggruppati usando nella norma la associazione sinistra Esiste la notazione mista Alcuni varianti della notazione prefissa sono ad esempio le chiamate a funzione tipo max(x,y) dove l'arità è variabile dipendente da quello che c'è in parentesi

32 Abstract Syntax Tree (AST) Evidenzia i componenti più significativi di un linguaggio e li mostra nella forma di un albero (struttura sintattica) Esempio per espressioni matematiche E costituite da operatore e operandi

33 Abstract Syntax Tree (AST) Esercizio: Disegnare l'ast delle espressioni nelle forme prefissa +a b infissa a + b e postfissa a b+ L'AST è indipendente dalla notazione (equivale a dire indipendente dalla grammatica) Esercizio: Disegnare l'ast dell'espressione b b 4 a c Il concrete syntax tree (parse tree) è la versione specifica dell'ast per una data grammatica

34 AST soluzioni

35 Abstract Syntax Tree AST per la valutazioni dei condizioni nella forma: se < condizione > allora < istruzione > altrimenti < istruzione > Esempio: se a>0 allora b altrimenti c Consideriamo l'operatore se allora altrimenti come se fosse un singolo operatore E' un operatore ternario Albero con la radice se allora altrimenti 3 figli per le 3 sottoparti

36 Abstract Syntax Tree

37 Sintassi e lessico Lessico: l'insieme di regole formali per la scrittura di parole in un linguaggio Sintassi: l'insieme di regole formali per la scrittura di frasi in un linguaggio La sintassi di un linguaggio di programmazione è specificata in termini di token o terminatori. La sintassi lessicale di un linguaggio di programmazione rappresenta la corrispondenza tra una rappresentazione scritta del linguaggio e i token o i terminatori della grammatica del linguaggio. Determina come una sequenza di caratteri venga suddivisa in lessemi e come questi vengano catalogati rispetto alla grammatica Esempio grammatica italiana: classifica il lessema come verbo avverbio sostantivo ecc.

38 Sintassi e lessico Le sequenze di caratteri alfabetici che vengono trattati come un unica cosa da un linguaggio sono chiamate keyword Keyword diventano delle parole riservate se non possono essere usate come nome in un linguaggio Considerando il token name per i nomi e il token number per i numeri: b b 4 a c diventa come sequenza di token : name b name b number 4 name a name c Generalizzo l'espressione in termini di token

39 Lezione 4 - Linguaggi e Grammatica Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web: Università degli Studi di Milano Dipartimento di informatica

40 Linguaggio di programmazione (1) Un repertorio di segni convenzionali e di regole per combinarli in enunciati più complessi ed un insieme di regole che permettano di associare un significato a ciascun enunciato. Si distinguono 3 livelli Sintattico: regole che specificano in quali modi i segni possano essere combinati per formare enunciati; Semantico: regole che permettono di associare a ciascun segno e a ciascun enunciato il loro significato; Pragmatico: implicazioni pratiche e le conseguenze di un enunciato.

41 Linguaggio di programmazione (2) Alfabeto Σ Simboli o token Parola w su un alfabeto Σ denota l'insieme di tutte le parole composte da elementi di Σ, compresa ɛ.

42 Linguaggio di programmazione (3) Un linguaggio L è un sottoinsieme delle parole costruibili su un alfabeto Σ, L Σ. Data una parola w Σ, ci sono due possibilità: w appartiene al linguaggio, w L, cioè rappresenta un enunciato di L w non appartiene al linguaggio, w / L, cioè non rappresenta un enunciato valido di L. In seguito vedremo un sistema generativo fondamentale che è la grammatica

43 Introduzione alla grammatica Si può dire che la grammatica di un linguaggio impone una struttura gerarchica (parse tree) ai programmi definiti con quel linguaggio Consideriamo un numero reale tipo 7.13 il relativo parse tree similmente al AST sarà

44 Introduzione alla grammatica Le foglie della gerarchia sono i token o terminali I nodi contengono i simboli non terminali Un non terminale è un costrutto del linguaggio Ogni nodo è generato da un processo detto di produzione, ovvero una regola che definisce un simbolo non terminale in termini di una sequenza di altri non terminali o terminali I token, i non terminali, le produzioni, il non terminale iniziale, costituiscono la grammatica per un linguaggio

45 Grammatica (1) Una grammatica è una quartupla G = (N,Σ,R,S) N insieme dei simboli non terminali, o metasimboli, cioè che non possono comparire negli enunciati del linguaggio ma che ci servono per denotare elementi di un enunciato N Σ = Σ alfabeto del linguaggio costituito da simboli terminali. R insieme finito delle regole di produzione nella forma α β con α N \ {ɛ} e β (N Σ). Quando la regola viene applicata, un'istanza di una stringa α può essere riscritta in una istanza della stringa β S simbolo non terminale speciale, S N ed è il punto di partenza che denota un enunciato valido.

46 Grammatica (2) [Relazione di produzione e derivazione] Produzione: G (N Σ) (N Σ) : γ G δ sse δ si ottiene da γ mediante l'applicazione di una singola regola di produzione di R nella grammatica G. Regole di riscrittura dei non terminali Derivazione: G : γ G δ sse δ si ottiene da γ mediante l'applicazione di zero o più regole di produzione di R nella grammatica G Regole da applicare per verificare la derivabilità rispetto a delle produzioni partendo dal simbolo iniziale [Linguaggio generato da G denominato L(G)] L'insieme di tutte le sequenze di simboli terminali ottenibili applicando le regole di produzione dell'insieme R, a partire dal simbolo iniziale S. L(G) = {w : w Σ S G w}

47 AST e parse tree La grammatica viene scritta per riflettere la sintassi astratta Significa che le regole di produzione sono fatte per far in modo che il parse tree sia il più possibile simile all' AST

48 Esempio (1) Linguaggio delle espressioni aritmetiche Σ = {0,1,2,3,4,5,6,7,8,9, +,?,,/,(,)} E simbolo di partenza A sta per argomento, O per operazione, N per numero naturale, I per cifra iniziale di un numero naturale, M per sequenza delle eventuali cifre successive di numero naturale, e C denota una qualsiasi cifra decimale.

49 Esempio (2) Esempio di derivazione per la stringa 2 (3 + 4) Si ricava che E 2 (3 + 4) quindi 2 (3 + 4) appartiene al linguaggio.

50 Data la seguente grammatica: S CVRT C T C R C h V a V i V u T p T t T k R n R l R r Esercizio (1)

51 Esercizio (2) S CVRT ; C T ; C R ; C h ; V a ; V i ; V u ; T p ; T t ; T k ; R n ; R l ; R r ; Quale delle seguenti espressioni fa parte del linguaggio? tank tar bin leak

52 Lezione 5 - BNF e carte sintattiche Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web: Università degli Studi di Milano Dipartimento di informatica

53 Formato di Backus e Naur BNF(1) La grammatica non contestuale è indipendente dalla notazione con la quale si esprime Formalismo utilizzato nell'informatica delle regole viene sostituita da ::= I simboli non terminali sono rappresentati mediante stringhe alfanumeriche racchiuse tra parentesi angolari (ad esempio <espressione>) I simboli terminali, o token del linguaggio, sono di norma racchiusi tra virgolette (' ' o ) Notazione compatta per più regole con lo stesso membro sinistro <cifra iniziale> ::= '1' '2' '3' '4' '5' '6' '7' '8' '9'

54 Formato di Backus e Naur BNF(2) Esistono alcune varianti a seconda dell'autore (esempio Extended BNF) Gli elementi opzionali sono spesso racchiusi tra parentesi tonde o quadre, mentre le parentesi graffe sono usate praticamente in tutte le varianti del BNF per denotare elementi che possono essere ripetuti zero o più volte Esercizio: Ridefinire in BNF la grammatica dell'esempio delle espressioni matematiche

55 Esercizio: soluzione < espr >::=< num > ( < espr > ) < espr >< op >< espr > < espr > = < espr > < num >::=< cifra > < num >< cifra > < cifra >::= < op >::= + /

56 Esempio: numero reale Il simbolo ::= può essere letto come può essere e il simbolo come oppure < real number >::=< integer part >. < fraction > < integer part >::=< digit > < integer part >< digit > < fraction >::=< digit > < digit >< fraction > < digit >::=

57 Esercizio Si consideri la seguente definizione in BNF di un linguaggio: < expr >::=< const > < fn > ( < args > ) < args >::=< expr > < expr >, < args > < const >::= a b c d e < fn >::= f g h Quale delle seguenti espressioni fa parte del linguaggio? a e(f,h) g(a) g() g

58 Esempio BNF linguaggio naturale Σ = {il,lo,la,cane,mela,gatto,mangia,graffia,,} N = {frase,soggetto,verbo,complemento,articolo,nome} P, regole espresse in BNF (forma di Backus-Naur): frase ::= soggetto verbo complemento soggetto ::= articolo nome articolo ::= il la lo nome ::= cane mela gatto verbo ::= mangia graffia complemento ::= articolo nome articolo nome, complemento S = frase Esempio tratto dal libro: Pighizzini, Ferrari, ``Dai fondamenti agli oggetti''

59 Parse tree E' un albero ordinato con radice, che rappresenta la struttura sintattica di una stringa relativamente ad una grammatica formale Si differenzia dall' AST perchè i suoi elementi riflettono più concretamente la sintassi di un linguaggio in input Una grammatica per un linguaggio impone un parse tree sui programmi scritti in quel linguaggio

60 Esempio di produzione (Parse tree) frase soggetto verbo complemento articolo nome graffiaarticolo nome, complemento lo mela lo gatto articolo nome il cane Esempio tratto dal libro: Pighizzini, Ferrari, ``Dai fondamenti agli oggetti''

61 Ambiguità sintattiche Se una stringa ha più di un parse tree allora la grammatica associata è ambigua Un linguaggio di programmazione va sempre descritto con una grammatica non ambigua, quindi serve disambiguare dove necessario Esempio: E::= E - E 0 1 La stringa ha due parse tree quindi è ambigua la grammatica

62 Grammatica per espressioni matematiche Una lista di elementi in notazione infissa Gli elementi non terminali sono: termini T (tra somme), fattori F (tra moltiplicazioni) ed il simbolo iniziale di espressione E Ecco la grammatica: E::= E + T E - T T; T::=T * F T / F F; F::= number name (E)

63 Carte sintattiche Le carte sintattiche sono dei diagrammi che esprimono le regole di una grammatica in forma grafica. Per specificare una grammatica mediante carte sintattiche, si deve fornire un diagramma per ciascun simbolo non terminale In una carta sintattica: I rettangoli indicano simboli non terminali (che andranno espansi con le carte sintattiche corrispondenti) Gli ovali o rettangoli con gli angoli arrotondati, indicano simboli terminali, che quindi non devono essere espansi ulteriormente Le frecce sono definite in modo tale che, seguendo i percorsi da esse delineati, sia possibile ricostruire una sequenza lecita di simboli Ogni biforcazione indica un'alternativa

64 Carte sintattiche esempio espressione Definire la grammatiche dell'esempio delle espressioni usando il formalismo delle carte sintattiche

65 Lezione 6 - Espressioni Regolari Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web: Università degli Studi di Milano Dipartimento di informatica

66 Espressioni regolari Necessità di individuare un insieme limitato di regole capaci di generare tutte le frasi di un linguaggio Una importante notazione per indicare queste regole: espressioni regolari Non sono in grado di esprimere tutte le possibili strutture di un linguaggio Efficaci per specificare i tipi di strutture di cui effettivamente si avvalgono i linguaggi di programmazione per costruire i tipici token che l'analizzatore lessicale è chiamato a riconoscere

67 Espressioni regolari: costruzione Utilizzano le operazioni tipiche di un linguaggio formale L Alfabeto Σ, unione Σ Σ, concatenazione Σ Σ, Σ, Σ + Partendo da un linguaggio formato da stringhe di lunghezza unitaria se ne creano altri di lunghezza 2, 3,... Questo processo applicato ad un alfabeto è molto utile ed ha preso il nome di espressione regolare

68 Espressioni regolari: definizione Espressione regolare r,definita su Σ e su un insieme di metasimboli +,,(,),, non appartenenti a Σ, è una stringa r appartenente all'alfabeto (Σ +,,(,),, ) tale che valga una delle seguenti condizioni (alcune espresse per induzione) r = r = ɛ r = x, x Σ r = (s + t), s,t espressioni regolari su Σ e + è l'unione r = s t, s,t espressioni regolari su Σ e è la concatenazione r = s, s espressione regolare su Σ e è la chiusura di Kleene

69 Espressioni regolari: esempi Regole st equivale a s t s t equivale a s + t ɛ = Operatore potenza r h = r... r(h volte) Precedenza tra operatori:,, + Le parentesi servono per modificare le precedenze Esempi R = a (ab) S = c (bc) RS = (a (ab))(c (bc)) = ac (ab)c a(bc) (ab)(bc) = ac abc abbc L(RS) = {ac,abc,abbc} R = (a b) ; L(R ) = {ɛ,a,b,aa,ab,bb,ba,aaa,aba,... } (a + b) a rappresenta il linguaggio L = {x x ({a} {b}) e x termina con a} Espressione regolare per L = {w {0,1} : 0 e 1 alternati in w} (01) + (10) + 0(10) + 1(01)

70 Espressioni regolari: varabili Nomi di variabili di un linguaggio Stringhe che iniziano con una lettera e che possono contenere caratteri alfanumerici caratteri = A B C Z a b... z numeri = Espressione regolare: variabile = caratteri(caratteri numeri) L(variabile) = A,B,...,a,...,z,AA,...,X1,...,j1,...,contatore,...

71 Espressioni regolari: generazione L'espressione regolare r genera l'espressione s (notazione r s) se: r = xαy s = xβy Le espressioni x, y, α sono sotto-espressioni di r e vale una delle seguenti condizioni: α = e 1...,e k... e n e β = e k α = e e β = e... e (h volte)

72 Grammatiche regolari e linguaggi regolari Tipo 3 di Chomsky Produzioni nella forma A β A N e β (N Σ) Produzione destra A ab B b Produzione sinistra B Ab A a Con A,B N e a,b Σ Un linguaggio regolare è un linguaggio le cui stringhe sono implicate da un'espressione regolare Un linguaggio è detto regolare se è prodotto da un'espressione regolare

73 Uso delle espressioni regolari Le espressioni regolari vengono utilizzate come linguaggio di input per vari sistemi che trattano stringhe Comandi UNIX (grep) per la ricerca di stringhe (metacaratteri) Generatori di analizzatori lessicali, tipo Lex (Lexical analyzer generator) e Flex (Fast Lex)) Grammatiche di tipo 3 sono adatte a rappresentare un ristrettissimo insieme di linguaggi formali

74 Lezione 7 - Classificazione dei linguaggi di programmazione Corso Programmazione Fondamenti di programmazione Linguaggi di programmazione Marco Anisetti marco.anisetti@unimi.it web:

75 Programmazione a basso livello A seconda di dove ci poniamo il basso livello e l'alto cambia Per il programmatore assembler il basso livello è il linguaggio macchina Per il programmatore Java il basso livello è il c

76 Linguaggio macchina Il linguaggio macchina è il linguaggio in cui sono scritti i Programmi che la CPU è in grado di eseguire (è il risultato della decode) Ogni istruzione (es. lettura, somma, etc.) è definita da un codice binario speciale detto codice operativo Ogni processore ha un proprio linguaggio macchina con un proprio formato delle istruzioni Un'istruzione è costituita da una stringa di bit contenente: L'operazione da eseguire Gli operandi su cui tale operazione deve essere eseguita (registri, locazioni di memoria, costanti...)

77 Linguaggio macchina Operazione complessa, serve indicare istruzioni e operandi in codice binario Il linguaggio assembler di un processore è la versione simbolica del linguaggio macchina Vengono adoperati dei simboli per la rappresentazione del codice operativo (tipo add per la somma) e degli operandi di un'istruzione Corrispondenza biunivoca tra l'insieme delle istruzioni in linguaggio macchina ed in linguaggio assembler per una stessa CPU L' assembler deve essere tradotto in linguaggio macchina per essere eseguito dalla CPU (Assemblatore)

78 Istruzioni assembler(1) Aritmetico-logiche: manipolano dati in ingresso e restituiscono il risultato in uscita, specificando dove depositare il risultato, solitamente in un Registro della CPU (es. ADD R01, R02) Salti: alterano l'esecuzione sequenziale del programma Salto incondizionato: specificano l'indirizzo di memoria in cui si trova la prossima istruzione da eseguire (es. JUMP label1)

79 Istruzioni assembler(2) Salto condizionato: salto soggetto al verificarsi di una condizione che se non verificata lascia proseguire il programma in sequenza (JZERO R01, label1) Ingresso/uscita: servono a trasferire dati da e verso la CPU (es. LOAD R01,x STORE R01,y)

80 M.C.D in assembler LOAD R01, 101 LOAD R02, 102 label1: DIV R01, R02 MUL R01, R02 LOAD R02, 101 SUB R02, R01 JZERO R02, fine LOAD R01, 102 STORE R01, 101 STORE R02, 102 JUMP label1 fine: LOAD R01, 102 STORE R01, 103 Esempio tratto dal libro: Pighizzini, Ferrari, Dai fondamenti agli oggetti

81 Svantaggi del linguaggio macchina Richiedono competenze sui dettagli dell'architettura della macchina ed il relativo linguaggio che varia a seconda della CPU I programmi così scritti non sono assolutamente portabili Il programmatore si specializza nella programmazione di una particolare macchina I programmi così sviluppati risultano di difficile comprensione e molto difficili da modificare La struttura logica del programma è nascosta, il debugging diventa davvero complesso Il ciclo di vita del programma è limitato alla sola macchina per cui è stato scritto

82 Linguaggi di programmazione: classificazione (1) Linguaggi ad alto livello e linguaggi a basso livello La distinzione, in generale, non è così netta I linguaggi a basso livello sono quelli che sono strettamente dipendenti da una specifica macchina hardware Addiziona i numeri nella locazione 10 e 11 e li salva in 12 I linguaggi ad alto livello nascondono, le caratteristiche delle diverse macchine hardware Sono scritti per funzionare su una macchina astratta M e offrono al programmatore una sintassi molto più vicina al linguaggio naturale

83 Linguaggi di programmazione: classificazione (2) General purpose: una caratteristica del linguaggio di programmazione che dice che tale linguaggio può essere adottato per un vasto range di applicazioni. Inizialmente i linguaggi si svilupparono con degli obiettivi ben precisi, in seguito tendettero a diventare general purposes Esempi: Fortran (numerical computing), Lisp (artificial intelligence), Prolog (natural language processing) [Benefici linguaggi ad alto livello] Leggibilità Indipendenza dalla macchina (portabilità) Possibilità di packaging in librerie Controllo di consistenza durante lo sviluppo

Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica

Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica Programmazione Marco Anisetti Università degli Studi di Milano, Dipartimento di Informatica marco.anisetti@unimi.it http://homes.di.unimi.it/anisetti/ Marco Anisetti - 1 / 40 Riepilogo lezione 1 Ruolo

Dettagli

I linguaggi di programmazione

I linguaggi di programmazione I linguaggi di programmazione sono stati introdotti per facilitare ai programmatori il compito di scrittura dei programmi Sono linguaggi simbolici, in continua evoluzione Sono definiti da un insieme di

Dettagli

I linguaggi di programmazione

I linguaggi di programmazione I linguaggi di programmazione sono stati introdotti per facilitare ai programmatori il compito di scrittura dei programmi Sono linguaggi simbolici, in continua evoluzione Sono definiti da un insieme di

Dettagli

I linguaggi di programmazione

I linguaggi di programmazione 2. I linguaggi di I linguaggi di I linguaggi di I linguaggi di sono stati introdotti per facilitare ai programmatori il compito di scrittura dei programmi Sono linguaggi simbolici, in continua evoluzione

Dettagli

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

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

LINGUAGGI DI ALTO LIVELLO

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 AN - 1995 Linguaggi di alto livello AN - 1995 Evoluzione dei

Dettagli

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser Ruolo del parser Analisi 1 1 Dipartimento di Matematica e Informatica Universitá di Camerino mariarita.diberardini@unicam.it Ruolo del parser Ruolo dell analisi sintattica Ruolo del parser Metodologie

Dettagli

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello Linguaggi di Programmazione dall assembler ai linguaggi di alto livello LINGUAGGIO MACCHINA 0 READ 8 READ 9 LOADA 8 3 LOADB 9 4 MUL 5 STOREA 8 6 WRITE 8 7 HALT 8 DATO INTERO 9 DATO INTERO Rappresentazione

Dettagli

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa

Dettagli

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

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2) Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,

Dettagli

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE) 1 LEZIONE 9 ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE) Laboratorio di Informatica per l Educazione A. A. 2014/2015 IN SINTESI (ELABORAZIONE) Con i COMPUTER, le macchine diventano

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

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

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,

Dettagli

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2003/04 Elementi di programmazione Stefano Ferrari Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Stefano Ferrari Università

Dettagli

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

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 28 Linguaggi 2 / 28 Linguaggi 3 / 28 Linguaggi di alto livello Si basano su una macchina

Dettagli

Unità Didattica 2 I Linguaggi di Programmazione

Unità Didattica 2 I Linguaggi di Programmazione Unità Didattica 2 I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche

Dettagli

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

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp. LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Cobol Basic Pascal Python Modula-2

Dettagli

I Linguaggi di Programmazione

I Linguaggi di Programmazione I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Corso di Programmazione Linguaggi di Programmazione. Linguaggio. Messaggio

Corso di Programmazione Linguaggi di Programmazione. Linguaggio. Messaggio Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione Linguaggi di Programmazione Dott. Pasquale Lops lops@di.uniba.it Università degli Studi di Bari Dipartimento di Informatica

Dettagli

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Lez. 8 La Programmazione Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Dott. Pasquale De Michele Dott. Raffaele Farina Dipartimento di Matematica e Applicazioni Università di Napoli

Dettagli

ALGORITMI: PROPRIETÀ FONDAMENTALI

ALGORITMI: PROPRIETÀ FONDAMENTALI ALGORITMI: PROPRIETÀ FONDAMENTALI Non si può risolvere un problema senza prima fissare un insieme di azioni, i di mosse elementari possibili per l'esecutore. Bisogna conoscerne le caratteristiche, le mosse

Dettagli

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algoritmi e Programmazione Stefano Cagnoni Il problema

Dettagli

Fondamenti teorici e programmazione

Fondamenti teorici e programmazione Fondamenti teorici e programmazione FTP(A) - modb Lezione 16 Grammatiche Libere da Contesto Alberi di derivazione sintattica Linguaggio generato F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione

Dettagli

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Il problema di fondo Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algoritmi e Programmazione Stefano

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

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

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

Dettagli

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi Istruzioni variabili e tipi Sottoprogrammi Strutture di controllo Ricorsione 1 2 Obiettivo Ciclo di sviluppo di programmi Risoluzione

Dettagli

ASTRAZIONE ASTRAZIONE

ASTRAZIONE ASTRAZIONE ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd Fondamenti d Informatica: linguaggi formali Barbara Re, Phd Agenda } Introdurremo } La nozione di linguaggio } Strumenti per definire un linguaggio } Espressioni Regolari 2 Linguaggio } Da un punto di

Dettagli

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente

Dettagli

Sistemi di Elaborazione delle Informazioni

Sistemi di Elaborazione delle Informazioni Sistemi di Elaborazione delle Informazioni Algoritmi e Programmi 1 Risoluzione di un problema Il procedimento di soluzione di un problema dovrebbe essere caratterizzato da: analisi del problema e identificazione

Dettagli

Lezione n. 2i Informatica e tecnologia informatica Sistema di elaborazione Algoritmo Linguaggi di programmazione Realizzazione di un programma

Lezione n. 2i Informatica e tecnologia informatica Sistema di elaborazione Algoritmo Linguaggi di programmazione Realizzazione di un programma Lezione2i Lezione n. 2i Informatica e tecnologia informatica Sistema di elaborazione Algoritmo Linguaggi di programmazione Realizzazione di un programma Informatica e tecnologia informatica Il termine

Dettagli

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali, Paolo Bison, FI08, 2008-09-29 p.1 Linguaggi procedurali classe

Dettagli

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO Rappresentazione degli algoritmi Problema Algoritmo Algoritmo descritto con una qualche notazione Programma Defne del procedimento

Dettagli

Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica

Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica Programmazione Marco Anisetti Università degli Studi di Milano, Dipartimento di Informatica marco.anisetti@unimi.it http://homes.di.unimi.it/anisetti/ Marco Anisetti - 1 / 63 Riepilogo lezione 2 Valutazioni

Dettagli

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Il problema di fondo Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Algoritmi

Dettagli

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010. Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte

Dettagli

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato» Linguaggio Testuale E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato» Delle volte viene chiamato metalinguaggio, e l algoritmo scritto tramite

Dettagli

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

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 C Fortran Cobol Modula-2 Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI C Fortran Modula-2

Dettagli

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori Programma del corso o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori o Elementi di Programmazione Algoritmi e programmi o Algoritmo

Dettagli

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

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio Messaggio Insieme di sequenze di simboli, le parole,

Dettagli

Corso di Programmazione Linguaggi di Programmazione

Corso di Programmazione Linguaggi di Programmazione Corso di Programmazione Linguaggi di Programmazione Dott. Stefano Ferilli ferilli@di.uniba.it Università degli Studi di Bari Dipartimento di Informatica Linguaggio Insieme di sequenze di simboli appartenenti

Dettagli

Rappresentazione con i diagrammi di flusso (Flow - chart)

Rappresentazione con i diagrammi di flusso (Flow - chart) Rappresentazione con i diagrammi di flusso (Flow - chart) Questo tipo di rappresentazione grafica degli algoritmi, sviluppato negli anni 50, utilizza una serie di simboli grafici dal contenuto evocativo

Dettagli

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

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 33 INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, bisogna conoscere

Dettagli

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

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A , p.1/19 Backus Naur Form Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova Linguaggio di programmazione p.2/19 strumento linguistico per scrivere una sequenza di istruzioni (programma)

Dettagli

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice linguaggio testuale mix di linguaggio naturale ed elementi

Dettagli

LINGUAGGI DI ALTO LIVELLO

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 Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada

Dettagli

Fondamenti di Informatica. per la Sicurezza. a.a. 2003/04. Grammatiche. Stefano Ferrari

Fondamenti di Informatica. per la Sicurezza. a.a. 2003/04. Grammatiche. Stefano Ferrari Fondamenti di Informatica per la Sicurezza a.a. 2003/04 Grammatiche Stefano Ferrari Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Stefano Ferrari Università degli Studi

Dettagli

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1 ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

PROBLEMI E ALGORITMI

PROBLEMI E ALGORITMI Fondamenti di Informatica PROBLEMI E ALGORITMI Fondamenti di Informatica - D. Talia - UNICAL 1 Specifica di un algoritmo Primo approccio, scrittura diretta del programma: la soluzione coincide con la codifica

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione E una notazione con cui e possibile descrivere gli algoritmi. Programma: e la rappresentazione di un algoritmo in un particolare linguaggio di programmazione. In generale, ogni

Dettagli

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,

Dettagli

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1 Concetti base della Tecnologia dell informazione Algoritmi Come interpreta un computer un problema? Algoritmi Algoritmo: sequenza ordinata di istruzioni per risolvere un problema (tradotto: sequenza di

Dettagli

Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3

Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3 Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2007/08 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica

Dettagli

La Programmazione particolare insieme di azioni particolare tipologia di dati risolvere un problema

La Programmazione particolare insieme di azioni particolare tipologia di dati risolvere un problema La Programmazione È l'attività con cui si predispone l'elaboratore ad eseguire un particolare insieme di azioni su una particolare tipologia di dati, allo scopo di risolvere un problema. 1 La Programmazione

Dettagli

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3 Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

Problemi, algoritmi, calcolatore

Problemi, algoritmi, calcolatore Problemi, algoritmi, calcolatore Informatica e Programmazione Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin Problemi, algoritmi, calcolatori Introduzione

Dettagli

Corso di Programmazione Dati e Istruzioni. Comunicazione dell algoritmo all elaboratore. Programmazione. Dott. Pasquale Lops

Corso di Programmazione Dati e Istruzioni. Comunicazione dell algoritmo all elaboratore. Programmazione. Dott. Pasquale Lops Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione Dati e Istruzioni Dott. Pasquale Lops lops@di.uniba.it Corso di Programmazione - DIB 1/28 Comunicazione dell algoritmo all

Dettagli

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. 1) Comprendere il problema 2) Stabilire quali sono le azioni da eseguire per risolverlo 3) Stabilire la

Dettagli

Il linguaggio di programmazione Python

Il linguaggio di programmazione Python Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi FASE 1: Dare un nome al problema partendo dall analisi del problema FASE 2: Scrivere la specifica funzionale FASE 3: Scrittura dell algoritmo FASE 3.1: Introduzione delle variabili

Dettagli

Programmazione strutturata

Programmazione strutturata Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Gestionale (L-Z) 3. (testo di riferimento: Bellini-Guidi) Ing. Michele Ruta 1di 29 Linguaggi di programmazione Un programma è un algoritmo

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione Laurea in Bioinformatica Docente: Carlo Drioli Web: www.scienze.univr.it/fol/main?ent=oi&id=39990 Programmazione: Dati Strutture di controllo Algoritmi Materiale tratto dai

Dettagli

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

Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici i (parole chiave) ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico Click to edit Algoritmo Master title style algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito

Dettagli

Risoluzione di un problema

Risoluzione di un problema Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd Fondamenti d Informatica: Grammatiche Barbara Re, Phd Grammatiche } Con il termine grammatica s intende } Un formalismo che permette di definire un insieme di stringhe mediante l imposizione di un particolare

Dettagli

Diagrammi di flusso (Flow Chart)

Diagrammi di flusso (Flow Chart) Diagrammi di flusso (Flow Chart) I diagrammi di flusso sono un formalismo grafico per descrivere gli algoritmi. I diagrammi di flusso visualizzano graficamente i passi da cui sono formati gli algoritmi

Dettagli

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

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi Informatica Generale Andrea Corradini 12 - Gli algoritmi e la risoluzione di problemi Sommario Che significa risolvere un problema? Algoritmi e programmi Rappresentazione di algoritmi Lo pseudocodice Primitive

Dettagli

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2008/09 Elementi di programmazione Stefano Ferrari UNIVERSITÀ DEGLI STUDI DI MILANO DIPARTIMENTO DI TECNOLOGIE DELL INFORMAZIONE Stefano Ferrari Università

Dettagli

INFORMATICA. Scienza dei calcolatori elettronici (computer science) Scienza dell informazione (information science)

INFORMATICA. Scienza dei calcolatori elettronici (computer science) Scienza dell informazione (information science) INFORMATICA Cosa è l informatica Scienza dei calcolatori elettronici (computer science) Scienza dell informazione (information science) E una scienza E una tecnologia Cosa può essere automatizzato nell

Dettagli

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina

Dettagli

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Descrizione delle operazioni di calcolo. Espressioni costanti semplici Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette

Dettagli

LINGUAGGI DI PROGRAMMAZIONE!

LINGUAGGI DI PROGRAMMAZIONE! LINGUAGGI DI PROGRAMMAZIONE! Il potere espressivo di un linguaggio è! caratterizzato da:! quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente)! quali istruzioni

Dettagli

Fondamenti di Informatica e Programmazione. P ro f. G i a n n i D A n g e l o

Fondamenti di Informatica e Programmazione. P ro f. G i a n n i D A n g e l o Fondamenti di Informatica e Programmazione CPU e Linguag gio Macchina P ro f. G i a n n i D A n g e l o Email: giadangelo@unisa.it A.A. 2018/19 Elaborazione dell Informazione L'elaborazione delle informazioni

Dettagli

LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI

LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI Giacomo Piscitelli pag. 1/10 Dall Algoritmo al Programma Metodo risolutivo problema algoritmo Linguaggio programma Individuazione di un metodo risolutivo

Dettagli

La formalizzazione dell informazione: Dati e Diagrammi di Flusso

La formalizzazione dell informazione: Dati e Diagrammi di Flusso La formalizzazione dell informazione: Dati e Diagrammi di Flusso Codifica degli algoritmi Algoritmo formulato per essere comunicato tra esseri umani chiaro, sintetico e intuitivo codificato in linguaggi

Dettagli