27/05/2013. Esempi int x[100]; x[i] la maggioranza dei compilatori non garantiscono che i [0.. 99]

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "27/05/2013. Esempi int x[100]; x[i] la maggioranza dei compilatori non garantiscono che i [0.. 99]"

Transcript

1 Congruenza fra le dichiarazioni delle entità e il loro impiego nelle istruzioni Rispetto delle regole che governano i tipi degli operandi nelle espressioni e negli assegnamenti Correttezza delle strutture di controllo del linguaggio Rispetto delle regole di visibilità e unicità degli identificatori Rispetto delle regole di importazione ed esportazione degli oggetti 1

2 Un compilatore esegue le verifiche semantiche oltre che le verifiche sintattiche. Semantica Statica le verifiche semantiche vanno eseguite durante la compilazione Dinamica le verifiche sono eseguite a run-time Type checking è uno delle operazioni di checking statico. non possiamo fare tutti I type checking a compile-time. Alcuni sistemi usano anche dynamic type checking. Un type system è una collezione di regole per assegnare una espressione di tipo ad una parte di programmi Un type checker implementa un type system. Un sound type system elimina gli errori di tipo. Un linguaggio di programmazione e detto strongly-typed, se ogni programma è compilato solo se privo di errori di tipo. In pratica, alcune operazioni di type checking sono fatti a run-time (la maggioranza dei programmi non è stronglytyped). Esempi int x[100]; x[i] la maggioranza dei compilatori non garantiscono che i [0.. 99] 2

3 Il tipo si un costrutto di un linguaggio è denotato dal type expression. Una type expression può essere: basic type Un tipo primitivo, int, float, type-error per segnalare un errore di tipo void type name Un nome che denota il tipo di una espressione Un costruttore applicato ad altri type expressions arrays: se T è un type expression, allora array(i,t) è un type expression dove I rappresenta il range degli indici: esempio array(0..99,int) products: se T 1 e T 2 sono type expressions, allora il prodotto cartesiano T 1 x T 2 è un type expression. esempio: int x int pointers: se T è una type expression, allora pointer(t) è una type expression. esempio: pointer(int) functions: possiamo trattare funzioni in un linguaggio di programmazione come il mapping da un domain type D ad un range type R. Cosi, il tipo di una funzione puop essere raappresentato dal type expression D R dovee D e R sono type expressions. Esempio: int int reppresenta un tipo di uns funzione che prende come parametro un calore int e tiporrna un valore int. 3

4 È un attributo sintetizzato È associato alle dichiarazioni di tipo, espressioni e descrive il tipo dell entità considerata Azioni semantiche o condizioni P D;E D D;D D T id { addtype(id.entry,t.type) } T char { T.type=char } T int { T.type=int } T float { T.type=float } T *T 1 { T.type=pointer(T 1.type) } T T 1 [intnum] {T.type=array(0..intnum-1.val,T 1.type)} 4

5 E id { E.type=lookup(id.entry) } E charliteral { E.type=char } E intliteral { E.type=int } E realliteral { E.type=real } E E 1 + E 2 { if (E 1.type=int and E 2.type=int) E.type=int else if (E 1.type=int and E 2.type=real) E.type=real else if (E 1.type=real and E 2.type=int) E.type=real else if (E 1.type=real and E 2.type=real) E.type=real else E.type=type-error } E E 1 [E 2 ] { if (E 2.type=int and E 1.type=array(s,t)) E.type=t else E.type=type-error } S id = E S if (E ) S 1 { if (id.type=e.type) then S.type_error=false else S. type-error = true } { if (E.type=int ) then S.type_error=S1.type_error else S.type_error=true} S while (E ) S 1 S id (A) { if (E.type=int) then S.type_error =S 1.type_error else S..type-error =true } S.type_error(confronta (A,get(id)) 5

6 E E 1 ( E 2 ) { if (E 2.type=s and E 1.type=s t) then E.type=t else E.type=type-error } Ex: int f(double x, char y) {... } f: double x char int argument types return type Come verificare che due type expression sono uguali? type expressions sono costruiti dai tipi base e (no type names), possiamo utilizzare equivalenza strutturale per due type expressions 6

7 if (s and t sono dello stesso tipo base) return true else if (s=array(s 1,s 2 ) and t=array(t 1,t 2 )) return (sequiv(s 1,t 1 ) and sequiv(s 2,t 2 )) else if (s = s 1 x s 2 and t = t 1 x t 2 ) return (sequiv(s 1,t 1 ) and sequiv(s 2,t 2 )) else if (s=pointer(s 1 ) and t=pointer(t 1 )) return (sequiv(s 1,t 1 )) else if (s = s 1 s 2 and t = t 1 t 2 ) return (sequiv(s 1,t 1 ) and sequiv(s 2,t 2 )) else return false In alcuni linguaggi di programmazione noi diamo un nome ai tipi e utilizziamo il type expression. typedef link = *cell; p,q,r,s sono dello stesso tipo? link p,q; *cell r,s; 7

8 typedef *cell link; typedef struct S{ int x; link next; }cell Non è possibile utilizzare equivalenza strutturale se ci sono cicli Il nome del tipo deve essere utilizzato come un tipo base double x; int y; x + y quale è il tipo di questa espressione (int o double)? Quale codice produce? inttofloat float+ y,,t1 t1,x,t2 8

9 L attributo scope rappresenta l insieme di tutte le coppie che definiscono gli identificatori visibili in quel contesto Sintassi S while (E) S 1 Condizioni Azioni di controllo if (E.type=int then S.type=S 1.type else S.type=type-error E.scope = S.scope S 1.,scope = S.scope S id = E Condizioni Azioni di controllo if (id.type=e.type then S.type=void else S.type=type-error E.scope = S.scope id. scope = S.scope S if (E) S 1 Condizioni Azioni di controllo if (E.type=int then S.type=S 1.type else S.type=type-error E.scope = S.scope S 1.,scope = S.scope 9

10 P { Blocco } Blocco LD LI LD.set LD LD 1 D LD LD.scope = {} D T id D.set = id LI LI Is LI Is id = E Blocco.scope = P.scopecorr P.oldscope = Blocco.oldscope LI.scope = Blocco.oldscope Blocco.corr= if (LD.set in Blocco.oldscope) false else Blocco.corr = LI.corr LD.scope = LD 1.scope I.LD = D.set 10

11 Il codice intermedio è indipendentia ma possono in qualche modo essere legati alle istruzioni macchina Il programma viene tradotto dal linguaggio sorgente in un programma equivalente in un linguaggio intermedio dal generarore di codice intermedio. Come linguaggio intermedio possono essere utilizzati diversi linguaggi: Albero sintattico Notazione postfissa postfix 4-uple - Linguaggio a tre indirizzi (three-address code) Noi utilizzaremo un linguaggio costituito da 4-uple Il linguaggio delle 4-uple e simile al linguaggio macchina Talvolta I linguaggi di programmazione utilizzano linguaggi intermedi più evoluti: java java virtual machine C# -clr prolog warren abstract machine 11

12 Vediamo adesso una tecnica che permette di effettuare analisi semantiche e traduzione usando la struttura sintattica data dalla grammatica di un linguaggio L idea chiave è quella di associare, ad ogni costrutto del linguaggio, alcune informazioni utili per il nostro scopo (attributi) Il valore di ogni attributo è calcolato tramite regole semantiche associate con le produzioni della grammatica 12

13 Ci sono due diversi tipi di notazione per scrivere le regole semantiche: 1. Definizioni guidate dalla sintassi: sono specifiche di alto livello: nascondono i dettagli implementativi e non richiedono di specificare l ordine di valutazione che la traduzione deve seguire 2. Schemi di traduzione, invece, indicano l ordine in cui le regole semantiche devono essere valutate e quindi permettono la specifica di alcuni dettagli di implementazione Dalla stringa di input viene costruito il parse tree e poi l albero viene attraversato nella maniera adatta (data dal grafo delle dipendenze) per valutare le regole semantiche che si trovano sui nodi Come al solito, comunque, una reale implementazione non segue questo flusso concettuale, ma esegue tutto durante il parsing senza costruire il parse tree esplicitamente, né il grafo delle dipendenze 13

14 Possiamo pensare ad ogni nodo del parse tree come ad un record i cui campi sono i nomi degli attributi Ogni attributo può rappresentare qualunque cosa vogliamo: stringhe, numeri, tipi, locazioni di memoria, etc. Il valore di ogni attributo ad ogni nodo è determinato da una regola semantica associata alla produzione che si usa nel nodo La valutazione, nell ordine giusto, delle regole semantiche determina il valore per tutti gli attributi dei nodi del parse tree di una stringa data La valutazione può avere anche side-effects (effetti collaterali) come la stampa di valori o l aggiornamento di una veriabile globale 14

15 Un parse tree che mostri i valori degli attributi ad ogni nodo è chiamato parse tree annotato Il processo di calcolo di questi valori si dice annotazione o decorazione del parse tree In una definizione guidata dalla sintassi si assume che i simboli terminali abbiano solo attributi sintetizzati I valori per questi attributi sono in genere forniti dall analizzatore lessicale Il simbolo iniziale, se non diversamente specificato, non ha attributi ereditati 15

16 Vediamo come utilizzare le definizioni guidate dalla sintassi per specificare la costruzione degli alberi sintattici L uso degli alberi sintattici come rappresentazione intermedia divide il problema del parsing da quello della traduzione Infatti le routine di traduzione che vengono invocate durante il parsing hanno delle limitazioni 1. Una grammatica che sia adatta per il parsing potrebbe non riflettere la naturale struttura gerarchica dei costrutti del linguaggio 2. Il metodo di parsing vincola l ordine in cui i nodi del parse tree sono considerati e questo ordine può non corrispondere con quello in cui l informazione sui costrutti diventa disponibile 16

17 Un albero sintattico (astratto) è una forma condensata di un parse tree che è utile per rappresentare i costrutti dei linguaggi Ad esempio, la produzione S if B then S 1 else S 2 potrebbe apparire in un albero sintattico come: if-then-else B S 1 S 2 Negli alberi sintattici gli operatori e le parole chiave non appaiono come foglie, ma sono associati ad un nodo interno Inoltre un altra semplificazione è che le catene di applicazione di una singola produzione vengono collassate: + *

18 La traduzione guidata dalla sintassi può benissimo essere basata su alberi sintattici piuttosto che su parse tree L approccio è sempre lo stesso: associamo degli attributi ai nodi dell albero Vediamo come costruire gli alberi sintattici per le espressioni aritmetiche: Costruiamo sottoalberi per le sottoespressioni creando un nodo per ogni operatore ed operando I figli di un nodo operatore sono le radici dei sottoalberi che rappresentano le sottoespressioni con le quali è costruita l espressione principale Ogni nodo di un syntree può essere implementato come un record con diversi campi 18

19 In un nodo operatore un campo identifica l operatore stesso e i campi rimanenti son i puntatori ai nodi operandi L operatore è spesso chiamato l etichetta del nodo Quando vengono usati per la traduzione, i nodi in un syntree possono avere campi addizionali per gli attributi che sono stati definiti In questo esempio usiamo le seguenti funzioni per costruire i nodi degli alberi sintattici per espressioni con operatori binari: 1. mknode(op, left, right) crea un nodo operatore con etichetta op e due campi puntatore all operando destro e sinistro 2. mkleaf(id, entry) crea un nodo identificatore con etichetta id e puntatore entry alla tabella dei simboli 3. mkleaf(num,val) crea un nodo numero con etichetta num e un campo val contentente il valore 19

20 Ad esempio il seguente frammento di programma crea (bottom-up) un syntax tree per l espresione a 4 + c 1) p 1 := nkleaf(id, entrya); 2) p 2 := mkleaf(num, 4); 3) p 3 := mknode( -, p 1, p 2 ); 4) p 4 := mkleaf(id, entryc); 5) p 5 := mknode( +, p 3, p 4 ); + - id id num 4 Entrata per a Entrata per c 20

21 Diamo una definizione guidata dalla sintassi S-attributed per la costruzione dell albero sintattico di una espressione contenente gli operatori + e Definiamo un attributo nptr per ogni simbolo non terminale. Esso deve tenere traccia dei puntatori ritornati dalle funzioni di creazione dei nodi PRODUZIONI E E 1 + T E E 1 - T E T T (E) T id T num REGOLE SEMANTICHE E.nptr := mknode( +, E 1.nptr, T.nptr) E.nptr := mknode( -, E 1.nptr, T.nptr) E.nptr := T.nptr T.nptr := E.nptr T.nptr := mkleaf(id, id.entry) T.nptr := mkleaf(num, num.val) 21

22 E.nptr E.nptr + T.nptr E.nptr T.nptr id - T.nptr id num + - id id num 4 Entrata per c Entrata per a E T E E.node = E.sym E.inh = T.node E + T E 1 E 1.inh = new Node( +,E.inh,T.node) E.sym = E 1.sym E - T E 1 E 1.inh = new Node( -,E.inh,T.node) E.sym = E 1.sym E E.sym = E 1.inh T ( E ) T.node = E.node T id T.node = new Leaf(id,id.entry) T num T.node = new Leaf(num,num.val) 22

23 Una 4-uple è: x := y op z x, y e z sono nomi, costanti, elementi temporanei generati dal compilatore stesso op è un operatore. Nel seguito è utilizzata la seguente notazione (4-uple) op y,z,x con il significato applica l operatore op a y e z, e restitutisci il risultato in x. 23

24 È una rappresentazione lineare di AST Un indirizzo può assumere una delle seguenti forme Nome cioè un nome di un identificatore (in un implementazione reale il puntatore alla tabella dei simboli) Una costante Un nome temporaneo generato dal compilatore Assegnamento z = x op y z = op y Copia x = y (binario) (unario) 24

25 Operatori binari: op y,z,result Dove op è un operatore binario o logico. Ex: add a,b,c gt a,b,c addr a,b,c addi a,b,c Unary Operator: op y,,result Dove op è un operatore binario o logico. Ex: uminus a,,c not a,,c inttoreal a,,c Move Operator: il contenuto di y e copiato in result. Ex: mov a,,c movi a,,c movr a,,c mov y,,result Unconditional Jumps: jmp,,l salto all istruzione di etichetta L Ex: jmp,,l1 // salto a L1 jmp,,7 // salto all istruzione 7 25

26 Conditional Jumps: jmprelop y,z,l salta all istruzione con etichetta L se il risultato di y relop z è vero.se il risultato è false continua con l istruzione seguente Ex: jmpgt y,z,l1 // jump to L1 if y>z jmpgte y,z,l1 // jump to L1 if y>=z jmpe y,z,l1 // jump to L1 if y==z jmpne y,z,l1 // jump to L1 if y!=z oppure jmpnz y,,l1 // jump to L1 se y == 0 jmpz y,,l1 // jump to L1 if y!= 0 jmpt y,,l1 // jump to L1 if y == true jmpf y,,l1 // jump to L1 if y == false Parametri di Procedure : Chiamata di Procedure : param x,, call p,n, dove x è un parametre attuale Ex: param x 1,, param x 2,, p(x 1,...,x n ) param x n,, call p,n, f(x+1,y) add x,1,t1 param t1,, param y,, call f,2, 26

27 Indexed Assignments: move y[i],,x con il significato x = y[i] move x,,y[i] con il significato y[i] = x Address and Pointer Assignments: moveaddr y,,x con il significato x = &y movecont y,,x con il significato x = *y Do i = i + 1 While (a[i]<v) 1. Add i,1, t1 2. move t1,,i 3. Mult i, 8, t2 //dimenz 4. move a[t2],,t3 5. Jump t3<v goto 1 27

28 Quadrule Quattro campi op arg1 arg2 result Gli operatori unari e di copia non utilizzano arg Le istruzioni come param non usano ne arg2 ne result Le istruzioni di salto salvano l etichetta in result Per generare il codice nella forma a tre indirizzi dal codice sorgente noi utilizzaremo un approccio basato sulle grammatiche ad attributi. Esempio: le espressioni: Attributi: S ha un attributo "code contiene il frammento di codice E ha due attributi: code - contiene il frammento di codice place e il nome che daremo al valore corrispondente a E La notazione <fragment> expr rappresenta la concatenazione dell espressione nel frammento di codice 28

29 S id := E E E 1 + E 2 E E 1 * E 2 E - E 1 E ( E 1 ) E id S.code = E.code gen( mov E.place,, id.place) E.place = newtemp(); E.code = E 1.code E 2.code gen( add E 1.place, E 2.place, E.place) E.place = newtemp(); E.code = E 1.code E 2.code gen( mult E 1.place, E 2.place, E.place) E.place = newtemp(); E.code = E 1.code gen( uminus E 1.place,, E.place) E.place = E 1.place; E.code = E 1.code E.place = id.place; E.code = null S a := E 8n E 3n + E 7n E 1n * E 2n E 4n * E 6n b c b - E 5n c 29

30 place code E 1n E 2n E 3n E 4n E 5n E 6n b c t 1 b c t 2 E 1n.code E 2n.code t 1 := b * c E 5n.code t 2 := uminus c E 7n t 3 E 4n.code E 6n.code t 3 := b * t 2 S while (E) do S 1 S.begin = newlabel(); S.after = newlabel(); S.code = gen(s.begin : ) E.code gen( jmpf E.place,, S.after) S 1.code gen( jmp,, S.begin) gen(s.after : ) S if (E) S 1 else S 2 S.else = newlabel(); S.after = newlabel(); S.code = E.code gen( jmpf E.place,, S.else) S 1.code gen( jmp,, S.after) gen(s.else : ) S 2.code gen(s.after : ) 30

31 S id = E E E 1 + E 2 E E 1 * E 2 { p= lookup(id.name); if (p is not nil) then emit( mov E.place,, p) else error( undefined-variable ) } { E.place = newtemp(); emit( add E 1.place, E 2.place, E.place) } { E.place = newtemp(); emit( mult E 1.place, E 2.place, E.place) } E - E 1 { E.place = newtemp(); emit( uminus E 1.place,, E.place) } E ( E 1 ) { E.place = E 1.place; } E id { p= lookup(id.name); if (p is not nil) then E.place = id.place else error( undefined-variable ) } Assumiamo che res, a, alpha e b siano stata gia dicharate e poste nella tabella rei simboli lexptr token attributes index : ->res ->a ->alpha ->b : ID_T ID_T ID_T ID_T : :

32 processed string res := a res :=E 1 res :=E 1 * (alpha res :=E 1 * (E 2 res :=E 1 * (E 2 + -b res :=E 1 * (E 2 + -E 3 res :=E 1 * (E 2 + E 4 res :=E 1 * (E 5 res :=E 1 * (E 5 ) attributes E 1.place = <6> E 2.place = <7> E 3.place = <8> E 4.place = <9> E 5.place = <10> output <9> := uminus<8> <10> := <7>+<9> res :=E 1 * E 6 x:=1; 01: mov 1,,x y:=x+10; 02: add x,10,t1 while (x<y) { 03: mov t1,,y x:=x+1; 04: lt x,y,t2 if (x%2==1) then y:=y+1; 05: jmpf t2,,17 else y:=y-2; 06: add x,1,t3 } 07: mov t3,,x 08: mod x,2,t4 09: eq t4,1,t5 10: jmpf t5,,14 11: add y,1,t6 12: mov t6,,y 13: jmp,,16 14: sub y,2,t7 15: mov t7,,y 16: jmp,,4 17: 32

33 GLi elementi di arrays possono essere recuperati rapidamente se gli elementi sono memorizzati in blocchi consecutivi. Array monodimenzionali A base A è l indirizzo della prima locazione dell array A, width è la dimenzione di un elemento dell array. low è l indice del primo elemento dell array La locazione del generico elemento A[i] base A +(i-low)*width base A +(i-low)*width Può essere riscritto come i*width + (base A -low*width) Dovrebbe essere calcolato a run-time. e si vuole accedere ad A[i] la formula i*width+c sara calcolata a run time ma c = (base A -low*width) può essere calcolato a compiletime. Il generatore di codice intermedio deve comunque produrre il codice per valutare la formula i*width+c. 33

34 Un array a due dimenzioni può essere memorizzato per righe (row-major) per colonne (column-major) La maggior parte dei linguaggi di programmazione utilizzano il metodo row-major. Address_of _A[i 1,i 2 ] = base A + ((i 1 -low 1 )*n 2 +i 2 -low 2 )*width base A è l indirizzo della prima locazione dell array A, width è la dimenzione di un elemento dell array low 1 è l indice della prima riga low 2 è l indice della prima colonna n 2 è il numero di elementi in una riga La formula può essere riscritta ((i 1 *n 2 )+i 2 )*width + (base A -((low 1 *n 1 )+low 2 )*width) Grammatica per gli array G1 (richiede attributi ereditati). L id L id [ Elist ] Elist Elist, E Elist E G2 (solo attributi sintetizzati) L id L Elist ] Elist Elist, E Elist id [ E 34

35 L id { L.place = id.place; L.offset = null; } L Elist ] { L.place = newtemp(); L.offset = newtemp(); emit( mov c(elist.array),, L.place); emit( mult Elist.place, width(elist.array), L.offset) } Elist Elist 1, E { Elist.array = Elist 1.array ; Elist.place = newtemp(); Elist.ndim = Elist 1.ndim + 1; emit( mult Elist 1.place, limit(elist.array,elist.ndim), Elist.place); emit( add Elist.place, E.place, Elist.place); } Elist id [ E {Elist.array = id.place ; Elist.place = E.place; Elist.ndim = 1; } A : array [ ] of double n 1 =95 width=8 (double) low 1 =5 Codice intermedio per x := A[y] mov c,,t1 // dove c=base A -(5)*8 mult y,8,t2 mov t1[t2],,t3 mov t3,,x 35

36 A : array [1..10,1..20] of integer n 1 =10 n 2 =20 width=4 (integers) low 1 =1 low 2 =1 Codice intermedio per x := A[y,z] mult y,20,t1 add t1,z,t1 mov c,,t2 // where c=base A -(1*20+1)*4 mult t1,4,t3 mov t2[t3],,t4 mov t4,,x P M D M { offset=0 } D D ; D D id : T { enter(id.name,t.type,offset); offset=offset+t.width } T int { T.type=int; T.width=4 } T real { T.type=real; T.width=8 } T array[num] of T 1 { T.type=array(num.val,T 1.type); T.width=num.val*T 1.width } T T 1 { T.type=pointer(T 1.type); T.width=4 } Dove enter crea una tabella dei simboli per un dato valore 36

37 Per ogni sottoprogrmma deve esserecreata una tabella dei simboli. mktable(previous) crea una nuova tabella dei simboli dove previous è la tabella dei simboili che ha generaro la nuova tabella. enter(symtable,name,type,offset) crea un nuovo elemento per una variabile in una data tabella dei simboli. enterproc(symtable,name,newsymbtable) crea un nuovo elemento per un sottoprogramma nella tabella dei simboli dei suoi genitoti. addwidth(symtable,width) pone la dimenzione di tutte gli elementi nella tabella dei simboli nell header della tabella. Utilizzaremo due pile: tblptr memorizza I puntatori dalla tabella dei simboli offset memorizza l offsets corrente nella tabella dei simbili nella pila tblptr P M D { addwidth(top(tblptr),top(offset)); pop(tblptr); pop(offset) } M { t=mktable(nil); push(t,tblptr); push(0,offset) } D D ; D D proc id N D ; S { t=top(tblptr); addwidth(t,top(offset)); pop(tblptr); pop(offset); enterproc(top(tblptr),id.name,t) } D id : T { enter(top(tblptr),id.name,t.type,top(offset)); top(offset)=top(offset)+t.width } N { t=mktable(top(tblptr)); push(t,tblptr); push(0,offset) } 37

38 Valuta gli argomenti e li memorizza in una posizione conosciuta Genera I valori dei puntatori per accedere ai dati Salva lo stato della procedura chiamante Salva l indirizzo di ritorno e salta al codice della procedura chiamata Alla fine (return) richiama e salva qualsiasi valore di ritorno 1) S call id (Elist) {for each item p on queue do emit ( param p); emit ( call id.place)} 2) Elist Elist.E {append E.place to the end of queue} 3) Elist E {inizilie queue to contein only E.place} 38

Semantica statica e dinamica

Semantica statica e dinamica Semantica statica e dinamica 1 Fasi di compilazione Programma sorgente Analisi lessicale front end Analisi sintattica Tabella dei simboli Analisi semantica Generatore di codice intermedio error handler

Dettagli

Semantica statica e dinamica

Semantica statica e dinamica Semantica statica e dinamica Fasi di compilazione Programma sorgente Analisi lessicale front end Analisi sintattica Tabella dei simboli Analisi semantica Generatore di codice intermedio Ottimizzatore Generatore

Dettagli

SEMANTICA STATICA E DINAMICA

SEMANTICA STATICA E DINAMICA SEMANTICA STATICA E DINAMICA Controlli semantici Congruenza fra le dichiarazioni delle entità e il loro impiego nelle istruzioni Rispetto delle regole che governano i tipi degli operandi nelle espressioni

Dettagli

Generazione di codice intermedio

Generazione di codice intermedio Generazione di codice intermedio 1 Intermediate Code Generation Il codice intermedio sono indipendenti dal linguaggio macchina ma sono legati alle istruzioni macchine. Il programma viene tradotto dal linguaggio

Dettagli

Traduzione guidata dalla sintassi. Attributi e Definizioni guidate dalla sintassi

Traduzione guidata dalla sintassi. Attributi e Definizioni guidate dalla sintassi Traduzione guidata dalla sintassi Attributi e Definizioni guidate dalla sintassi Intro In questa ultima parte del corso vediamo, in breve, una tecnica che permette di effettuare analisi semantiche e traduzione

Dettagli

Intro. Traduzione guidata dalla sintassi. Attributi. Due notazioni a diversi livelli. Due notazioni a diversi livelli. Il flusso concettuale

Intro. Traduzione guidata dalla sintassi. Attributi. Due notazioni a diversi livelli. Due notazioni a diversi livelli. Il flusso concettuale Intro Traduzione guidata dalla sintassi Attributi e Definizioni guidate dalla sintassi In questa ultima parte del corso vediamo, in breve, una tecnica che permette di effettuare analisi semantiche e traduzione

Dettagli

Traduzione guidata dalla sintassi

Traduzione guidata dalla sintassi Traduzione guidata dalla sintassi Attributi e definizioni guidate dalla sintassi Dipartimento di Matematica e Informatica mariarita.diberardini@unicam.it Analisi Semantica Analisi sintattica - output:

Dettagli

Definizioni syntax-directed

Definizioni syntax-directed Definizioni syntax-directed Esempio: Notazione infissa Notazione postfissa Produzioni E E 1 + T E E 1 T E T T 0 T 1 T 2... T 9 Regole semantiche E.t := E 1.t _T.t _ + E.t := E 1.t _T.t _ - E.t := T.t T.t

Dettagli

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi POLITECNICO DI TORINO Laboratorio di Compilatori Corso di mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Controllo dei tipi Type expressions Symbol tables Implementazione di un type-checker strutture

Dettagli

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Dettagli

Fasi di un Compilatore

Fasi di un Compilatore Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore

Dettagli

Esercitazioni di Linguaggi e Traduttori

Esercitazioni di Linguaggi e Traduttori 1 Codici intermedi 2 Three-address code 3-address code: rappresentazione a quadruple Tipologie di quadruple Implementazione Espressioni matematiche e logiche Puntatori, strutture ed array Trasformazione

Dettagli

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Semantica e traduzione guidata dalla sintassi (cenni)

Semantica e traduzione guidata dalla sintassi (cenni) Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Semantica e traduzione guidata dalla sintassi (cenni) Giacomo PISCITELLI Compile-time semantic evaluation

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Informatica 3. LEZIONE 2: Sintassi e semantica

Informatica 3. LEZIONE 2: Sintassi e semantica Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica

Dettagli

Esercizi. Grammatiche, scoping. Univ. di Udine. Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29

Esercizi. Grammatiche, scoping. Univ. di Udine. Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Esercizi Grammatiche, scoping Univ. di Udine Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Linguaggi e grammatiche Definire i numeri divisibili per 2 in base 3, come grammatica libera da contesto

Dettagli

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione Informatica 3 Informatica 3 LEZIONE 2: Sintassi e semantica Lezione 2- Modulo 1 Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4:

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Linguaggi di programmazione Automi e Linguaggi Formali A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Struttura di un compilatore e fasi principali 01 Ottobre 2014 Linguaggio di programmazione e

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

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche Esercizi Grammatiche, scoping Univ. di Udine Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Linguaggi e grammatiche Definire i numeri divisibili per 2 in base 3, come grammatica libera da contesto

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

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento

Dettagli

Esercitazioni di Informatica 3

Esercitazioni di Informatica 3 Esercitazioni di Informatica 3 Part I: Programming Languages Syntax and semantics Laurea in Ingegneria Informatica Politecnico di Milano Polo di Milano Leonardo Esercizio 1: EBNF Utilizzando il linguaggio

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

Generazione codice. Scopi Tecniche. L6 - Introduzione ai compilatori - UNINA

Generazione codice. Scopi Tecniche. L6 - Introduzione ai compilatori - UNINA Generazione codice Scopi Tecniche 1 Generazione codice intermedio Motivazioni Compilatori multi piattaforma: solo il modulo finale di generazione codice target va personalizzato Possibilità di applicare

Dettagli

Analizzatore lessicale

Analizzatore lessicale Analizzatore lessicale Legge la stringa in input e la trasforma in un flusso di token da sottoporre all analizzatore sintattico. Le frasi di un linguaggio sono stringhe di token (simboli atomici). Richieste

Dettagli

Capitolo 6. Linguaggi di Programmazione. Mauro Giacomini Pearson Addison-Wesley. All rights reserved

Capitolo 6. Linguaggi di Programmazione. Mauro Giacomini Pearson Addison-Wesley. All rights reserved Capitolo 6 Linguaggi di Programmazione Mauro Giacomini 2007 Pearson Addison-Wesley. All rights reserved Capitolo 6: Linguaggi di programmazione 6.1 Prospettiva storica 6.2 Concetti della programmazione

Dettagli

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Il linguaggio C. Istruzioni, funzioni, dati strutturati Il linguaggio C Istruzioni, funzioni, dati strutturati Istruzioni Servono a dirigere il flusso di esecuzione di un programma controllano l ordine di esecuzione delle espressioni, quindi dei loro side effects

Dettagli

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I. Sunto della scorsa lezione 06-10-2003 Il linguaggio C Matricole 2-3 Un programma C è un insieme di funzioni. La funzione è sempre presente Una funzione è un insieme di istruzioni racchiuse tra ogni istruzione

Dettagli

Informatica 3. LEZIONE 4: Semantica operazionale. Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici

Informatica 3. LEZIONE 4: Semantica operazionale. Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici Informatica 3 LEZIONE 4: Semantica operazionale Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici Informatica 3 Lezione 4 - Modulo 1 Strutture a blocchi C4: Blocchi annidati int f( ); { int

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

Espressioni e Comandi

Espressioni e Comandi Espressioni e Comandi March 24, 2017 Elementi di Base dei Programmi Ricordate? Macchina Astratta: Insieme di algoritmi e strutture dati che permettono di memorizzare ed eseguire programmi Abbiamo parlato

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

INFORMATICA 3 Prof.ssa Sara Comai

INFORMATICA 3 Prof.ssa Sara Comai INFORMATICA 3 Prof.ssa Sara Comai ESERCIZI SESSIONE LIVE 1 Sintassi e semantica operazionale Ing. Paola Spoletini 1. Sintassi Utilizzando il linguaggio descritto dalla seguente EBNF: REGOLE SINTATTICHE:

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Semantica e traduzione guidata dalla sintassi

Semantica e traduzione guidata dalla sintassi Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Semantica e traduzione guidata dalla sintassi Giacomo PISCITELLI Compile-time semantic evaluation Finora

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

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

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

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI Esercitazioni del corso di: ALGORITMI E STRUTTURE DATI Tutor: Francesca Piersigilli email: francesca.piersigilli@unicam.it Strutture dati elementari Tecniche di organizzazione dei dati: scelta della struttura

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Espressioni Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Valutazione automatica di expr aritmetiche = obiettivo primario dei primi LP

Dettagli

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope)

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope) PROGRAMMAZIONE 2 19. Nomi, binding, regole di visibilità (scope) PR2 2017-2018 1 Nomi Un nome in un linguaggio di programmazione è esattamente quello che immaginate o la maggior parte dei nomi sono definiti

Dettagli

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA AUTOMI PUSHDOWN input u t w $ v x y z $ pila tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento

Dettagli

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):

Dettagli

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici Yet Another Compiler-Compiler Generazione automatica di analizzatori sintattici 2 YACC Yet Another Compiler-Compiler YACC (Bison) è un generatore di analizzatori sintattici a partire dalla descrizione

Dettagli

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010. Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Linguaggi formali e compilazione

Linguaggi formali e compilazione Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2014/2015 Linguaggi formali e compilazione Cenni alle regole di Static scoping Abbiamo già osservato come le informazioni contenute

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 Introduzione ai sottoprogrammi Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Introduzione al corso, Paolo Bison, FI08, 2008-12-09 p.1 Struttura programma

Dettagli

Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni

Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni Stefano Guerrini A.A. 2000/01 Come abbiamo già visto, l obiettivo del progetto è arrivare a determinare il valore assegnato

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Pseudocodifica m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi, ma non limitatamente,

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

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Esercizio 1. a * 10 + (20 b) a b. Tecnologie dei Linguaggi Artificiali Esercizi Yacc

Esercizio 1. a * 10 + (20 b) a b. Tecnologie dei Linguaggi Artificiali Esercizi Yacc Esercizio 1 Usando Yacc e Lex, codificare un generatore di alberi astratti relativi alla seguente grammatica: program expr expr expr + term expr term term term term * term / ( expr ) num Ecco un esempio

Dettagli

Architettura di un linguaggio dinamico

Architettura di un linguaggio dinamico Parte 3 Architettura di un linguaggio dinamico 1 Compilatori ed interpreti Gli strumenti per la generazione di codice eseguibile sono classificabili in due categorie distinte: Compilatori Interpreti Compilatore:

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere

Dettagli

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Istruzioni: scrivere le risposte alle domande negli spazi presenti nel testo e riconsegnare

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Analisi semantica. Scopi Tecniche Strumenti - Yacc. L4 - Introduzione ai compilatori - UNINA - Silvio Imbò

Analisi semantica. Scopi Tecniche Strumenti - Yacc. L4 - Introduzione ai compilatori - UNINA - Silvio Imbò Analisi semantica Scopi Tecniche Strumenti - Yacc 1 L analizzatore semantico nel compilatore Linguaggio sorgente Analizzatore lessicale token Next token Analizzatore semantico Analizzatore sintattico AST,

Dettagli

La programmazione nel linguaggio JavaScript. Il programma

La programmazione nel linguaggio JavaScript. Il programma Il programma Nei linguaggi di programmazione il programma è una funzione che ha come argomento i dati digitati in input e opportunamente convertiti. la descrizione della funzione (ovvero il programma)

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 2: Elementi lessicali, casting e while Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Soluzione agli esercizi

Dettagli

I numeri razionali. Specifica: la sintassi. Specifica: la semantica

I numeri razionali. Specifica: la sintassi. Specifica: la semantica Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti

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 Introduzione ai sottoprogrammi Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Introduzione al corso, Paolo Bison, FI06, 2007-02-06 p.1 Struttura programma formato da vari elementi

Dettagli

Istruzioni di trasferimento dati

Istruzioni di trasferimento dati Istruzioni di trasferimento dati Leggere dalla memoria su registro: lw (load word) Scrivere da registro alla memoria: sw (store word) Esempio: Codice C: A[8] += h A è un array di numeri interi Codice Assembler:

Dettagli

Costruzione dell insieme dei Follow

Costruzione dell insieme dei Follow Costruzione dell insieme dei Follow E! T E - T E E! + T E - T E " T! F T T! *F T " F! (E) i Per evitare che alcuni insiemi siano vuoti si aggiunge per default il simbolo speciale $ che demarca la fine

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

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

Fetch Decode Execute Program Counter controllare esegue prossima

Fetch Decode Execute Program Counter controllare esegue prossima Stored Program Istruzioni sono stringhe di bit Programmi: sequenze di istruzioni Programmi (come i dati) memorizzati in memoria La CPU legge le istruzioni dalla memoria (come i dati) Ciclo macchina (ciclo

Dettagli

Istruzioni e linguaggio macchina

Istruzioni e linguaggio macchina Istruzioni e linguaggio macchina I linguaggi macchina sono composti da istruzioni macchina, codificate in binario, con formato ben definito processori diversi hanno linguaggi macchina simili scopo: massimizzare

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

Linguaggio C: Espressioni

Linguaggio C: Espressioni Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 / 34 Ringraziamenti prof. Mirko Viroli, Università

Dettagli

Pr ogramming Languages. Sottoprogrammi

Pr ogramming Languages. Sottoprogrammi Pr ogramming Languages Sottoprogrammi 1 ISottoprogrammi Qualche nozione introduttiva DVAL:dominiodeivaloridenotabili,ovverooggettiai quali èpossibiledareunnome:dataobject(variabili), indirizzi, sottoprogrammi,

Dettagli

Analisi Semantica. Fase che computa informazione aggiuntiva (necessaria per la compilazione), nota la struttura sintattica del programma

Analisi Semantica. Fase che computa informazione aggiuntiva (necessaria per la compilazione), nota la struttura sintattica del programma Analisi Semantica Fase che computa informazione aggiuntiva (necessaria per la compilazione), nota la struttura sintattica del programma Computazione di informazione che non può essere computata con metodi

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Interpreti, compilatori e semantica operazionale

Interpreti, compilatori e semantica operazionale Interpreti, compilatori e semantica operazionale 1 Linguaggi di programmazione Come si comprendono le caratteristiche di un linguaggio di programmazione? Molte risposte diverse manuali, documentazione

Dettagli

Lezione 7 Alberi binari: visite e alberi di ricerca

Lezione 7 Alberi binari: visite e alberi di ricerca Lezione 7 Alberi binari: visite e alberi di ricerca Informatica 6 Maggio 2015 Operazioni sugli alberi: visita La visita di un albero esplora tutti i nodi ed esegue una qualche operazione su di essi. Per

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 4 Marzo 2008 Derivazioni canoniche Una derivazione

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali E-mail: frossi@math.unipd.it rario e ricevimento Orario: Lunedi, Martedi, Mercoledi, Giovedi 13:30-15:30 LUM250 Crediti: 8 crediti formativi, circa 64 ore di lezione Ricevimento: Martedi 11:00-13:00, studio

Dettagli

Un esempio di compilatore realizzato con flex e bison

Un esempio di compilatore realizzato con flex e bison POLITECNICO DI MILANO Dipartimento di Elettronica e Informazione Corso di Linguaggi Formali e Compilatori - Esercitazioni Un esempio di compilatore realizzato con flex e bison Progetto di Vincenzo Martena

Dettagli

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Strutture dati nel supporto a run time

Strutture dati nel supporto a run time Strutture dati nel supporto a run time 1 Entità presenti quando un programma va in esecuzione programmi d utente (compilati) routines del supporto interprete I/O, librerie, routines per la gestione delle

Dettagli

TIPI DI DATO TIPI DEFINITI DALL UTENTE

TIPI DI DATO TIPI DEFINITI DALL UTENTE Ogni elaboratore è intrinsecamente capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti, mediante

Dettagli

TIPI DI DATO. e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati

TIPI DI DATO. e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti, mediante la

Dettagli

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi). Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,

Dettagli