Un esempio di compilatore realizzato con flex e bison
|
|
|
- Franca Pesce
- 8 anni fa
- Просмотров:
Транскрипт
1 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 Slide di Daniele Paolo Scarpazza Progetto 1
2 Tema Si costruisca, utilizzando bison e flex, un compilatore per il linguaggio di programmazione Simple. Il compilatore prenda in ingresso un file contenete un programma Simple e generi le corrispondenti istruzioni per la macchina virtuale SimpleVM. Progetto 2
3 Sintassi del linguaggio Simple program -> preamble body preamble -> DECLARATIONS declarations body -> BEGIN_PROGRAM cmd_seq END_PROGRAM declarations -> ε INTEGER id_seq IDENTIFIER. id_seq -> ε id_seq IDENTIFIER, cmd_seq -> ε cmd_seq command ; command -> ε SKIP READ IDENTIFIER WRITE exp IDENTIFIER := exp IF bool_exp THEN cmd_seq ELSE cmd_seq FI WHILE bool_exp DO cmd_seq OD exp -> exp + term exp - term term term factor primary bool_exp -> term * factor term / factor factor -> factor ^ primary primary -> NUMBER IDENT (exp) -> exp = exp exp < exp exp > exp Progetto 3
4 Token lessicali BEGIN_PROGRAM DECLARATIONS DO ELSE END_PROGRAM FI IDENTIFIER IF INTEGER NUMBER OD READ SKIP THEN WHILE WRITE begin declarations do else end fi [a - z][a - z0-9]+ if integer [0-9]+ od read skip then while write IDENTIFIER [a - z][a - z0-9]+ NUMBER [0-9]+ WRITE Progetto 4
5 La macchina virtuale SimpleVM Semplice macchina a stack: 2 aree di memoria: area C, per il codice area S, a pila, per i dati (variabili e risultati intermedi della computazione) 3 registri: stack pointer (SP): punta al top della pila; instruction register (IR): prossima istruzione; program counter (PC): indirizzo della prossima istruzione; Progetto 5
6 Istruzioni di SimpleVM HALT termina l'esecuzione IN_INT var legge un intero da tastiera e memorizza in var OUT_INT STORE var JMP_FALSE label GOTO label DATA spazio LD_INT intero LD_VAR var LT / EQ / GT scrive a video il top della pila ed esegue pop scrive in var il top della pila ed esegue pop se SP è falso, copia indirizzo di label in PC copia indirizzo di label in PC riserva spazio sullo stack esegue un push di intero sullo stack esegue un push di var sullo stack pop, pop, confronta i valori, push risultato ADD / SUB / MULT pop, pop, esegue l'operazione, push risultato / DIV / PWR (Per maggiori informazioni: fetch_execute_cycle(),, file SM.c) Progetto 6
7 Traduzione in assembly La traduzione segue lo schema riportato nella prossima slide; Nella traduzione finale, al nome simbolico delle etichette va sostituito il valore numerico corrispondente all'indirizzo nell'area del codice; Progetto 7
8 Schema di traduzione X := expr traduzione di expr STORE X if C then traduzione di C S1 JMP_FALSE L1 else traduzione di S1 S2 GOTO L2 fi L1: traduzione di S2 L2: read X IN_INT X write expr traduzione di expr OUT_INT Progetto 8
9 Esempi di traduzione declarations integer a,b,c. begin skip; end 0: data 2 1: halt 0 Progetto 9
10 Esempi di traduzione declarations integer a,b,c. begin a:=3; b:=4; read c; write a+b+c; end 0: data 2 1: ld_int 3 2: store 0 3: ld_int 4 4: store 1 5: in_int 2 6: ld_var 0 7: ld_var 1 8: add 0 9: ld_var 2 10: add 0 11: out_int 0 12: halt 0 Progetto 10
11 Esempi di traduzione declarations integer a,b,c. begin a:=3; b:=4; c:=a*b; while (c>0) do write c; c:=c-1; od end 0: data 2 1: ld_int 3 2: store 0 3: ld_int 4 4: store 1 5: ld_var 0 6: ld_var 1 7: mult 0 8: store 2 9: ld_var 2 10: ld_int 0 11: gt 0 12: jmp_false 20 13: ld_var 2 14: out_int 0 15: ld_var 2 16: ld_int 1 17: sub 0 18: store 2 19: goto 9 20: halt 0 Progetto 11
12 Esempi di traduzione declarations integer a,b,c. begin a:=3; b:=4; read c; if (c < 4) then write a; else write b; fi; end 0: data 2 1: ld_int 3 2: store 0 3: ld_int 4 4: store 1 5: in_int 2 6: ld_var 2 7: ld_int 4 8: lt 0 9: jmp_false 13 10: ld_var 0 11: out_int 0 12: goto 15 13: ld_var 1 14: out_int 0 15: halt 0 Progetto 12
13 Ingresso per flex DIGIT [0-9] ID [a-z][a-z0-9]* %% ":=" { return(assgnop); } {DIGIT}+ { yylval.intval = atoi( yytext ); return(number); } do { return(do); } od { return(od); } else { return(else); } end { return(end_program); } fi { return(fi); } if { return(if); } begin { return(begin_program); } integer { return(integer); } declarations { return(declarations); } read { return(read); } skip { return(skip); } then { return(then); } while { return(while); } write { return(write); } {ID} { yylval.id = (char *) strdup(yytext); return(identifier); } [ \t\n]+ /* consuma i separatori */. { return(yytext[0]); } Progetto 13
14 Ingresso per bison (token) %union semrec{ /* I record semantici */ int intval; /* Valori Interi */ char *id; /* Identificatori */ lbs *lbls; /* Per backpatching */ } %start program %token <intval> NUMBER /* Intero in Simple */ %token <id> IDENTIFIER /* Identificatore in Simple */ %token <lbls> IF WHILE /* For backpatching labels */ %token SKIP THEN ELSE FI DO OD END_PROGRAM %token INTEGER READ WRITE DECLARATIONS BEGIN_PROGRAM %token ASSGNOP %left '-' '+' %left '*' '/' %right '^' Progetto 14
15 Ingresso per bison (sintassi) program : DECLARATIONS declarations BEGIN_PROGRAM { gen_code( DATA, reserve_data_location()-1); } commands END_PROGRAM { gen_code(halt,0); YYACCEPT; } ; declarations : /* empty */ INTEGER id_seq IDENTIFIER '.' { insert( $3 ); } ; id_seq : /* empty */ id_seq IDENTIFIER ',' { insert( $2 ); } ; commands : /* empty */ commands command ';' ; Progetto 15
16 Ingresso per bison (sintassi) command : SKIP READ IDENTIFIER { context_check( READ_INT, $2 ); } WRITE exp { gen_code( WRITE_INT, 0 ); } IDENTIFIER ASSGNOP exp { context_check( STORE, $1 ); } IF exp { $1 = (lbs *) newlblrec(); $1->for_jmp_false=reserve_code_loc(); } THEN commands { $1->for_goto = reserve_code_loc(); } ELSE { gen_back_code( $1->for_jmp_false, JMP_FALSE, current_code_loc() ); } commands FI { gen_back_code( $1->for_goto, GOTO, current_code_loc() ); } WHILE { $1 = (lbs *) newlblrec(); $1->for_goto = current_code_loc(); } exp { $1->for_jmp_false=reserve_code_loc(); } DO commands OD { gen_code( GOTO, $1->for_goto ); gen_back_code( $1->for_jmp_false, JMP_FALSE, current_code_loc() ); } ; Progetto 16
17 Ingresso per bison (sintassi) command : SKIP READ IDENTIFIER { context_check( READ_INT, $2 ); } WRITE exp { gen_code( WRITE_INT, 0 ); } IDENTIFIER ASSGNOP exp { context_check( STORE, $1 ); } IF exp { $1 = (lbs *) newlblrec(); $1->for_jmp_false=reserve_code_loc(); } THEN commands { $1->for_goto = reserve_code_loc(); } ELSE { gen_back_code( $1->for_jmp_false, JMP_FALSE, current_code_loc() ); } commands FI { gen_back_code( $1->for_goto, GOTO, current_code_loc() ); } WHILE { $1 = (lbs *) newlblrec(); $1->for_goto = current_code_loc(); } exp { $1->for_jmp_false=reserve_code_loc(); } DO commands OD { gen_code( GOTO, $1->for_goto ); gen_back_code( $1->for_jmp_false, JMP_FALSE, current_code_loc() ); } ; Progetto 17
18 Backpatching typedef struct{ /* Etichette per i dati, if e while */ int for_goto; int for_jmp_false; } lbs; int current_code_loc(){ return code_offset; } int reserve_code_loc(){ return code_offset++; } Progetto 18
19 Symbol table symrec *identifier; /* Elemento della tabella dei simboli */ symrec *sym_table = NULL; /* puntatore a tabella dei simboli */ symrec * putsym (char *sym_name) { symrec *ptr; ptr = (symrec *) malloc (sizeof(symrec)); ptr->name = (char *) malloc (strlen(sym_name)+1); strcpy (ptr->name,sym_name); ptr->offset = reserve_data_location(); ptr->next = (symrec *)sym_table; sym_table = ptr; return ptr; } symrec * getsym (char *sym_name) { symrec *ptr; for (ptr=sym_table; ptr!=null; ptr=(symrec *)ptr->next ) if (strcmp (ptr->name,sym_name) == 0) return ptr; return NULL; } Progetto 19
20 Code generator char *op_name[17]={"halt", "store", "jmp_false", "goto", "data",...}; int data_offset = 0, code_offset = 0; int reserve_data_location() { return data_offset++; } int current_code_loc() { return code_offset; } int reserve_code_loc() { return code_offset++; } void gen_code( code_ops operation, int arg ){ setopinstruction(code_offset,operation); setarginstruction(code_offset++,arg); } void gen_back_code( int addr, code_ops operation, int arg ){ setopinstruction(addr,operation); setarginstruction(addr,arg); } void print_code(){ int i; for (i=0; i < code_offset; i++) printf("%3ld: %-10s%4ld\n", i, op_name[(int) getopinstruction(i)], getarginstruction(i)); } Progetto 20
Implementazione di un Compilatore e di una Macchina Virtuale per la Compilazione e l Esecuzione di un Linguaggio Simple
Implementazione di un Compilatore e di una Macchina Virtuale per la Compilazione e l Esecuzione di un Linguaggio Simple Nicola Ricci, Francesco Valle Tema d anno dell esame di Compilatori e Interpreti
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
Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
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
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:
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
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
Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa.
Il Modello di un Compilatore La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. La complessità dipende dal linguaggio sorgente. Compilatore: traduce
Linguaggio C. Esercizio 1
Linguaggio C Esercizi su puntatori e liste Walter Didimo (e-mail:[email protected]) supplemento al Corso di Calcolatori Elettronici (Riccardo Torlone) 1 Esercizio 1 Siano p e q due puntatori a variabili
Analizzatore Lessicale Parte I Scanner
Analizzatore Lessicale Parte I Scanner Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar, Pasquale Lops In questa dispensa si descrive un approccio alla costruzione di un analizzatore lessicale
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
Esercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal
Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi
FONDAMENTI DI INFORMATICA
Politecnico di Milano COGNOME E NOME Facoltà di Ingegneria Industriale FONDAMENTI DI INFORMATICA Seconda prova in itinere 13 Febbraio 2017 Primo Appello (Laureandi) 13 Febbraio 2017 RIGA COLONNA MATRICOLA
PILE E CODE. Pile (stack):
PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):
Linguaggio macchina e linguaggio assembly
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Università degli Studi di Udine Linguaggio macchina e linguaggio assembly Formato delle istruzioni 15 8 7 0 gruppo modo di indirizzamento codice dell
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,
Esercizi Strutture dati di tipo astratto
Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio
Esercizi. Assembly. Alessandro A. Nacci [email protected] ACSO 2014/2014
Esercizi Assembly Alessandro A. Nacci [email protected] ACSO 2014/2014 1 RIPASSO Architettura dei registri del 68K Di (0 i 7): registri di dato a 8, 16, 32 bit Ai (0 i 7): resgistri di a 16, 32
Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list
Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza
Sottoprogrammi in linguaggio assembly del Motorola 68000
Sottoprogrammi in linguaggio assembly del Motorola 68000 Daniele Paolo Scarpazza [email protected] Politecnico di Milano Ultimo aggiornamento: 10 Maggio 2005 Bibliografia Sezioni 4.9, 5.6
I puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div
MIPS load/store word, con indirizzamento al byte aritmetica solo su registri Istruzioni Significato add $t1, $t2, $t3 $t1 = $t2 + $t3 sub $t1, $t2, $t3 $t1 = $t2 - $t3 mult $t1, $t2 Hi,Lo = $t1*$t2 div
Lecture 2: Prime Istruzioni
[http://www.di.univaq.it/muccini/labarch] Modulo di Laboratorio di Architettura degli Elaboratori Corso di Architettura degli Elaboratori con Laboratorio Docente: H. Muccini Lecture 2: Prime Istruzioni
Esercizio 1: funzione con valore di ritorno di tipo puntatore
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio
Question 1: introduction to computer programming
Question 1: introduction to computer programming Question 1: introduction to computer programming What is a compiler? (4 points). Cos è un compilatore? (4 punti). c 2006 Marco Bernardo 1/14 Question 1:
ARM: stack e subroutine
ARM: stack e subroutine 05.d Le istruzioni di accesso allo stack L istruzione di chiamata a subroutine Gestione degli stack frame Istruzione di store multiplo (STM Le istruzioni LDR e STR operano su parole
La sintassi del C APPENDICE H
APPENDICE H La sintassi del C Nella notazione della sintassi utilizzata, le categorie sintattiche (non terminali) sono state indicate da uno stile tipografico in corsivo, mentre le parole letterali e i
Il linguaggio assembly
Il linguaggio assembly Strutture di controllo P.H. cap. 2.6 1 Argomenti Organizzazione della memoria Istruzioni di trasferimento dei dati Array Le strutture di controllo Istruzioni di salto if then do...
Calcolatori Elettronici A a.a. 2008/2009
Calcolatori Elettronici A a.a. 2008/2009 ISA e LINGUAGGIO ASSEMBLY MIPS ESERCIZI Massimiliano Giacomin ESERCIZIO Utilizzando la green card, tradurre in linguaggio macchina le due istruzioni in assembly
Esercizi. Stringhe. Stringhe Ricerca binaria
Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)
Grammatiche Parse trees Lezione del 17/10/2012
Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,
Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
Esercitazioni di Linguaggi e Traduttori
1 Linguaggi CF e Riconoscitori 2 Introduzione a Yacc Introduzione a YACC Definizione dei simboli Codifica della grammatica Formato del programma prodotto da YACC Ambiguità e conflitti Conflitti shift-reduce
PROGRAMMI LINGUAGGIO C
PROGRAMMI IN LINGUAGGIO C Corso di Programmazione Modulo B Prof. GIULIANO LACCETTI Studentessa Bellino Virginia Matr. 408466 Corso di Diploma in Informatica http://www.dicecca.net Indice 1. Package per
Fondamenti di Programmazione. Antonio Pescapè e Marcello Esposito Parte Quinta v1.0
Fondamenti di Programmazione Antonio Pescapè e Marcello Esposito Parte Quinta v1.0 Agenda I linguaggi C e C++: introduzione Elementi Lessicali Commenti Identificatori Parole Chiave Costanti Letterali Elementi
Linguaggio macchina e linguaggio assembler
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine Linguaggio macchina e linguaggio assembler 2000 Pier Luca Montessoro (si veda la nota di copyright
Esercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
1 Esercizi con architettura a 1 bus
1 Esercizi con architettura a 1 bus 1.1 Fetch dell istruzione NOTA: l istruzione ClearY azzera il registro Y mentre l istruzione CB imposta a 1 il bit di riporto/prestito in modo da sommare/sottrarre 1.
Esercizio 1 (15 punti)
Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind
Architettura degli Elaboratori
Architettura degli Elaboratori Linguaggio macchina e assembler (caso di studio: processore MIPS) slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello Architettura degli Elaboratori 1 1 Istruzioni
Introduzione alla programmazione strutturata
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Prof. ELIO TOPPANO Facoltà di Ingegneria Università degli Studi di Udine Introduzione alla programmazione strutturata 2001 Pier Luca Montessoro, Elio
Le operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly
Architettura degli Elaboratori Lezione 20 Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly Prof. F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
Istruzioni di modifica della sequenza di elaborazione
Istruzioni di modifica della sequenza di elaborazione Permettono di modificare la sequenza di esecuzione delle istruzioni di un programma, normalmente controllata dal meccanismo automatico di avanzamento
MIPS Instruction Set 2
Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general
Linguaggi di programmazione
Linguaggi di programmazione Fondamenti di Informatica Daniele Loiacono Ho definito un algoritmo e adesso? Daniele Loiacono Dall algoritmo all esecuzione q Come deve essere formalizzato un algoritmo affinché
LISTE, INSIEMI, ALBERI E RICORSIONE
LISTE, INSIEMI, ALBERI E RICORSIONE Settimo Laboratorio LISTE E RICORSIONE SVUOTALISTA: CONSIDERAZIONI Per svuotare una lista si devono eliminare i singoli nodi allocati con la malloc... Come fare? Per
File e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua [email protected] La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
Analizzatore lessicale o scanner
Analizzatore lessicale o scanner Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner, attraverso un esame carattere per carattere dell'ingresso,
Esercitazione n. 3. Dott. Salvatore Pontarelli
Esercitazione n. 3 Dott. Salvatore Pontarelli Struttura di un modulo Assembly Assembly è il linguaggio che l ARM assembler (armasm) legge per produrre il codice oggetto. può essere: ARM assembly language
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;
Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali
Prof. Gian Luca Marcialis Corso di Laurea di Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Fonti principali: Patterson, A.D., Hennessy, J., "Struttura, organizzazione e progetto dei calcolatori
Linguaggio C: puntatori
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: puntatori La presente dispensa e da utilizzarsi ai soli fini didattici previa
CREARE UNA LIBRERIA IN C
CREARE UNA LIBRERIA IN C Prima di cominciare a vedere come fare una libreria, dobbiamo capire di cosa abbiamo bisogno... di un file.h che sarà l'header della libreria (ovvero il file che conterrà i prototipi
Strutture dati dinamiche in C (II)
Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi [email protected] Sommario Le liste concatenate (ancora ma in modo più formale) L
Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C
Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...
Laboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il
4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
Linguaggi e Traduttori: Analisi lessicale
Linguaggi e Traduttori: Analisi lessicale Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-La) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
Esegue la sommatral'accumulatoreac e Se I=1, ilcontenutodellacelladi memoriailcui indirizzoè
Parte II AND 104 I, micro-operazioni c 0 t 0 : MAR PC c 0 t 1 : MBR M, PC PC+1 c 0 t 2 : OPR MBR(OP), I MBR(I) q 7 Ic 0 t 3 : R 1 Ciclo di fetch (q 7 +I )c 0 t 3 : F 1 c 1 t 0 : MAR MBR(AD); / 104 da Hex
LE STRUTTURE IN PROGRAMMAZIONE ASSEMBLER
LE STRUTTURE IN PROGRAMMAZIONE ASSEMBLER CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) DIS - Università degli Studi di Napoli Federico II Istruzioni di selezione Linguaggio ad alto livello Assembler
Capitolo 5 - Funzioni
Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente
Uso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni
Istruzioni macchina Linguaggio macchina Insieme delle istruzioni (instruction set) che la CPU puo eseguire Capitolo 10 1 2 Elementi di un istruzione macchina Codice operativo Specifica l operazione da
5. Quinta esercitazione autoguidata: liste semplici
22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto
