27/05/2013. Esempi int x[100]; x[i] la maggioranza dei compilatori non garantiscono che i [0.. 99]
|
|
- Elisabetta Bossi
- 5 anni fa
- Visualizzazioni
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 1 Fasi di compilazione Programma sorgente Analisi lessicale front end Analisi sintattica Tabella dei simboli Analisi semantica Generatore di codice intermedio error handler
DettagliSemantica 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
DettagliSEMANTICA 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
DettagliGenerazione 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
DettagliTraduzione 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
DettagliIntro. 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
DettagliTraduzione 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:
DettagliDefinizioni 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
DettagliPOLITECNICO 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
DettagliLinguaggi 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
DettagliFasi 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
DettagliEsercitazioni 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
DettagliElementi 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
DettagliSemantica 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
DettagliLe 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
DettagliInformatica 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
DettagliEsercizi. 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
DettagliInformatica 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:
DettagliAutomi 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
DettagliLezione 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,
DettagliLinguaggi 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
DettagliAnalisi 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
DettagliLaboratorio 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
DettagliEsercitazioni 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
DettagliAnalizzatore 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,
DettagliGenerazione 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
DettagliAnalizzatore 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
DettagliCapitolo 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
DettagliIl 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
DettagliSunto 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
DettagliInformatica 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
DettagliProgrammazione. 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
DettagliEspressioni 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
DettagliINTRODUZIONE 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
DettagliINTRODUZIONE 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
DettagliFunzioni, 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,
DettagliINFORMATICA 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:
DettagliIl 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;
DettagliSemantica 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
DettagliMacchine 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
DettagliFondamenti 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
DettagliProgramma 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
DettagliCast 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
DettagliLE 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
DettagliALGORITMI 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
DettagliVariabili 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:
DettagliEspressioni. 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
DettagliPROGRAMMAZIONE 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
DettagliANALISI 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
DettagliLe 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):
DettagliYet 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
DettagliProgrammazione 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
DettagliDati 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
DettagliPROGRAMMAZIONE 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
DettagliFunzioni, 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
DettagliLinguaggi 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
DettagliPaolo 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
DettagliProgetto 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
DettagliProgrammazione 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
DettagliAlgoritmi 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,
DettagliASTRAZIONE. 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
DettagliMacchine 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
DettagliEsercizio 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
DettagliArchitettura 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:
DettagliCostanti 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
DettagliINTRODUZIONE 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
DettagliCorso 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
DettagliProgrammazione. 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
DettagliAnalisi 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,
DettagliLa 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)
DettagliMacchine 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
DettagliLaboratorio 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
DettagliI 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
DettagliPaolo 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
DettagliIstruzioni 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:
DettagliCostruzione 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
DettagliLinguaggi 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
DettagliASTRAZIONE 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
DettagliFetch 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
DettagliIstruzioni 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
DettagliLinguaggi, 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
DettagliLinguaggio 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à
DettagliPr ogramming Languages. Sottoprogrammi
Pr ogramming Languages Sottoprogrammi 1 ISottoprogrammi Qualche nozione introduttiva DVAL:dominiodeivaloridenotabili,ovverooggettiai quali èpossibiledareunnome:dataobject(variabili), indirizzi, sottoprogrammi,
DettagliAnalisi 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
DettagliUnità 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
DettagliInterpreti, 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
DettagliLezione 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
DettagliCorso 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
DettagliAlberi. 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
DettagliAutomi 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
DettagliUn 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
Dettagli19 - 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
DettagliStrutture 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
DettagliTIPI 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
DettagliTIPI 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
DettagliSi 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