Analisi lessicale. Scopi Tecniche Strumenti - Lex. Introduzione ai compilatori - UNINA 1
|
|
- Paola Lorenzi
- 6 anni fa
- Visualizzazioni
Transcript
1 Analisi lessicale Scopi Tecniche Strumenti - Lex Introduzione ai compilatori - UNINA 1
2 L analizzatore lessicale nel compilatore Linguaggio sorgente Analizzatore lessicale token Next token Analizzatore sintattico Symbol table Introduzione ai compilatori - UNINA 2
3 Tokens Token=set di stringhe (terminali del linguaggio sorgente) es.: if, identificatore, op_rel pattern=regole per la costruzione dei token if=if; identificatore=lettera seguita da cifre o lettere; op_rel= <, >, >=, <= l analizzatore lessicale produce lo stesso output per i token che soddisfano un dato pattern lexeme=una stringa (token) che verifica i requisiti di un pattern (es IF, P123, <) Parole riservate: le keywords possono essere o meno utilizzabili dall utente anche per altri scopi (es. identificatori) Introduzione ai compilatori - UNINA 3
4 Attributi dei token Nell analisi lessicale ai token vengono spesso associate proprietà utili per le successive fasi di analisi, es.: <if, > valore superfluo <op_rel, < > <identificatore, rif. a una entry in symbol table> <numero, valore > Introduzione ai compilatori - UNINA 4
5 Analisi lessicale ed automi Gli automi finiti trovano applicazione nell analisi lessicale Sviluppo diretto degli analizzatori lessicali Tool per la generazione automatica di analizzatori lessicali (Lex) Strumenti di elaborazione di testi (es.: AWK, grep, ecc) riconoscimento espressioni regolari Introduzione ai compilatori - UNINA 5
6 Automa finito deterministico - DFA S, Σ, δ, q 0, F Insieme di stati S q 1 q 2 Insieme di simboli Σ (alfabeto di input) a,b,c Funzione di transizione o di stato δ: associa alle coppie stato simbolo uno stato δ: Σ x S S q 1 a q 2 q 0 è uno stato particolare detto lo stato iniziale F è un insieme di stati detti stati finali (o di accettazione). q Funzione di stato su una stringa x δ (q,ε) = q per ogni q in Q ; δ (q,xa)= δ(δ (q,x),a) δ (q,x) = stato in cui si trova l automa dopo aver letto tutti caratteri di x. Linguaggio accettato dall automa: L={x Σ + : δ (q 0,x) F } Introduzione ai compilatori - UNINA 6
7 Rappresentazione DFA con diagrammi di transizione Automa che riconosce stringhe con numero pari di 0 ed 1 1 q 0 1 q q 3 1 q 2 Introduzione ai compilatori - UNINA 7
8 Funzione di transizione/tabella di 0 1 transizione q 0 q 3 q 1 q 1 q 2 q 0 1 q 0 1 q q 2 q 1 q 3 q 3 1 q 2 q 3 q 0 q 2 Introduzione ai compilatori - UNINA 8
9 Algoritmo generale DFA s:=s0 c:=nextchar(); while (c!=eof) { s:=delta(s,c); c:=nextchar(); } if (s è stato finale) return Si else return No Introduzione ai compilatori - UNINA 9
10 Esempi automi finiti Automa che accetta le stringhe che contengono esattamente tre ,1 q 0 0 q 1 0 q 2 0 q 3 0 q 4 Automa che riconosce gli operatori relazionali q 0 < = q 1 = > q 2 > q 5 altro q 3 q 6 = q 7 q 4 altro q 8 Introduzione ai compilatori - UNINA 10
11 Implementazione di una tabella di transizione token nextoken() { while (1) switch (state) { case 0: c=nextchar(); if (c== c== \t c= \n ) { state=0; lexeme_beginning++; } else if (c == < ) state = 1; else if (c == = ) state = 5; else if (c == > ) state = 6; else state = fail(); break; case 1: c=nextchar(); if (c== = ) state = 2; /* LE */ else if (c == >0) state = 3; else state = 4; break; case 2: lval=le; retun(relop); break; case 3: lval=ne; retun(relop); break; case 4: retract(1); lval=eq; return (RELOP);. Introduzione ai compilatori - UNINA 11
12 Automi finiti non deterministici - NFA Automi con epsilon transizioni (possono cambiare stato spontaneamente senza leggere alcun carattere) Q è l insieme di stati Σ è un insieme di simboli (alfabeto di input) δ è la funzione d transizione o di stato dell automa ed associa alle coppie stato simbolo (o stringa vuota) un sotto insieme di stati (anche vuoto) δ: (Σ U ε)x Q 2 S. Non è univoca q 1 a q 2 Q, Σ, δ, q0, F q 1 q 2 q 0 è lo stato iniziale F è l insieme di stati detti stati finali (o di accettazione). Motivazione agli automi indeterministici: facilitano la descrizione degli algoritmi di riconoscimento e la corrispondenza con le grammatiche Introduzione ai compilatori - UNINA 12
13 Esempio di NFA Esempio automa che accetta sequenze qualsiasi di 0,1, ε ε q 0 q 1 q 2 La ε chiusura di uno stato è l insieme di tutti gli stati raggiungibili tramite solo ε transizioni dallo stato. ε-chiusura(q 0 )={ q 1, q 2 } e ε-chiusura(q 1 )= {q 2 } Introduzione ai compilatori - UNINA 13
14 Linguaggio accettato da un NFA Se P è un insiemi di stati, la ε-chiusura di P è l unione degli insiemi ε-chiusura(p) per ogni p P Funzione di transizione su stringhe: δ (q,ε) = ε-chiusura(q) δ (q,xa)= ε-chiusura ( p : r δ (q,x) e p δ (r,a) ) Insieme di tutti gli stati raggiungibili per cui esiste un percorso etichettato da un solo a e da qualsiasi numero di ε Il linguaggio accettato dall automa: L={x Σ* : δ (q 0,x) F } Introduzione ai compilatori - UNINA 14
15 Automi finiti non deterministici con indeterminazioni In corrispondenza di un dato simbolo l automa può scegliere di passare in più do uno stato. δ: Σ Q 2 S Es.: Automa che riconosce le stringhe tipo (a b)*abb a q 0 a q 1 b q 2 b q 3 b La funzione di transizione è definita da: δ (q,a) = δ (q,a) q per ogni q Q e a Σ δ (q,xa)= { p : r δ (q,x) e p δ (r,a)} (insiemi di stati) Il linguaggio accettato da un automa è: L={x Σ* : δ (q 0,x) F } 15
16 Equivalenza tra DFA e NFA Gli NFA sono utili per realizzare gli algoritmi di riconoscimento E sempre possibile passare da un automa non deterministico ad uno deterministico equivalente Introduzione ai compilatori - UNINA 16
17 Eliminazione delle ε-transizioni NFA=(Q, Σ, δ, q 0, F) è un automa finito con ε-transizioni non deterministico NFA =(Q, Σ, δ, q 0, F ) equivalente senza ε-transizioni (con indeterminazioni) F = F U {q 0 } se e-chiusura(q 0 ) contiene uno stato finale, F =F altrimenti; δ (q,a)= δ (q,a) NFA 0 a ε ε b ε d c (a+b)cd* 4 d NFA d a,b Introduzione ai compilatori - UNINA d b d 2 4 d d d 3 d c
18 Eliminazioni delle indeterminazioni subset construction Per eliminare le indeterminazioni da un automa finito, bisogna aumentare il numero degli stati. NFA=(Q, Σ, δ, q 0, F) è un automa finito con indeterminazioni, N =(Q, Σ, δ', q 0, F ) il corrispondente DFA equivalente Q =2 Q è l insieme dei sotto-insiemi di Q F è dato dagli stati di Q i cui insiemi contengono almeno un stato finale di Q: F ={p Q : p F } q 0 ={ q 0 } δ' (p,a)=r, con r={s : s δ (q,a) e q p } si possono escludere gli stati irrangiungibili ESEMPIO Introduzione ai compilatori - UNINA 18
19 {0,1},{0,1,2} non sono raggiungibili d NFA 1 a,b c 0 d b d 2 4 d d d d 3 d DFA {1} a,b c {0} a,b {4} d {0,2,3,4} d Introduzione ai compilatori - UNINA 19
20 Algoritmo per passare da un NFA ad un DFA equivalente Dato un NFA con ε transizioni (Q, Σ, δ, q 0, F), costruzione della tabella di transizione di un automa DFA equivalente (Q, Σ, δ, q 0, F ). Al massimo Q =2 Q Idea: ad ogni stato di DFA corrisponde un insieme di stati di NFA: DFA tiene conto dei possibili stati che raggiunge NFA leggendo la stessa stringa input. begin end Q ={ q 0 }=ε -chiusura(q 0 ) non marcato (ES.: STACK) while esiste uno stato t non marcato in Q do begin end marcare t per ogni simbolo a di input do begin end u = ε-chiusura(m(t,a)) /* M(T,A)=insieme di tutti gli stati raggiungibili con a dagli stati di t per NFA) */ se u non è in Q porlo in Q non marcato porre δ (t,a)=u Introduzione ai compilatori - UNINA 20
21 Esempio NFA che riconosce (a b)*abb ε ε ε q 2 a q 3 ε ε a q 0 q 1 ε q 6 q 7 q 8 q 4 b q 5 ε b q 9 b ε q 10 Introduzione ai compilatori - UNINA 21
22 1) q 0 = ε -chiusura(q 0 )={ q 0, q 1, q 2, q 4, q 7 } 2) Si ha M{ q 0, q 1, q 2, q 4, q 7 },a)={ q 3, q 8 } e ε -chiusura({ q 3, q 8 }) = { q 1, q 2, q 3, q 4, q 6, q 7, q 8 } Poniamo { q 1, q 2, q 3, q 4, q 6, q 7, q 8 } = q 1 e δ (q 0,,a)= q 1 3) M({ q 0, q 1, q 2, q 4, q 7 },b)={, q 5 } e ε -chiusura({q 5 }) = { q 1, q 2, q 4, q 5, q 6, q 7 } = q 2 Stati finali q 0 = { q0, q1, q2, q4, q7 } q 1 = { q1, q2, q3, q4, q6, q7, q8 } q 2 = { q1, q2, q4, q5, q6, q7 } q 3 = { q1, q2, q4, q5, q6, q7, q9} q 4 = { q1, q2, q4, q5, q6, q7, q10} la tabella di transizione è data da: a b q 0 q 1 q 2 q 1 q 1 q 3 q 2 q 1 q 2 q 3 q 1 q 4 q 4 q 1 q 2 Introduzione ai compilatori - UNINA 22
23 DFA finale (subset construction) b b q 2 b b q 0 a a b q 3 q 4 a a q 1 a Introduzione ai compilatori - UNINA 23
24 Espressioni regolari e automi NFA E sempre possibile costruire un automa NFA che riconosce una data espressione regolare - ε è una espressione regolare che denota {ε} - a è una espressione regolare che denota {a} (a Σ) Se r e s sono espressioni regolari che denotano L( r) e L(s): - r+s è una espr. reg che denota L(r) L(s) - rs L(r)L(s) - r* L(r) * - (r) L(r) Costruzione di Thompson per induzione sul numero di operatori presenti nella espressione regolare su linguaggio Σ. Introduzione ai compilatori - UNINA 24
25 1-2) Nel caso 0, è immediato costruire gli automi in grado di riconoscere epsilon o i simboli dell alfabeto della espressione regolare: q 0 ε q 1 q 0 a q 1 3) Nel caso di espressioni con più operatori, dato N(s) e N(t) gli automi che riconoscono le espressioni s e t, l automa che riconosce l espressione s+t è dato da: ε N(s) q 0 q f ε q 0 q f ε q N(t) 0 q f ε q 0 e q f sono risp. stati iniziali e finali di N(s) e q 0 e qf sono stati iniziali e finali di N(t). Introduzione ai compilatori - UNINA 25
26 4) Caso della concatenazione st l automa si costruisce: ε N(s) q 0 q f q N(t) 0 q f Lo stato iniziale dell automa composto è dato da q 0 mentre quello finale da qf 5) Caso della stella s* q 0 ε N(s) q 0 q f ε q f ε 6) Per le espressioni tra parentesi, si può usare N(s) stesso. Introduzione ai compilatori - UNINA 26
27 Costruzione dell automa riconoscitore Si effettua il parsing della espressione regolare, quindi si costruiscono gli stati dell automa applicando i passi 1) e 2) ai simboli dell espressione, quindi i passi 3) e 6) applicandoli secondo precedenza. Gli stati iniziali e finali degli automi intermedi vanno a costituire stadi intermedi dell automa finale. Introduzione ai compilatori - UNINA 27
28 Ottimizzazione del DFA Lemma di Nerode: Dato un linguaggio L def. la relazione di equivalenza R L nel seguente modo: x R L y se e solo se per ogni z sia xz che yz appartengono ad L, oppure nessuna delle due. Il lemma di Nerode afferma che: L è un linguaggio riconosciuto da un automa finito se e solo se R L è di indice finito L indice della classe di equivalenza è il numero di classi di equivalenza La costruzione dell automa del Lemma di Nerode è l automa minimo Introduzione ai compilatori - UNINA 28
29 Costruzione dell automa minimo Algoritmo Input Un automa DFA M (Q,S, transizioni definite per ogni stato e per ogni carattere di input -eventualmente morte, F); Output un automa M equivalente a M con il minor numero di stati possibili 1)Costruzione di una partizione iniziale Π 0 di S in due gruppi : l'insieme degli stati finali e l insieme di tutti gli altri. 2)Suddivisione di ciascun gruppo della partizione in sotto gruppi che possono essere distinti da ogni stringa input (una stringa x distingue uno stato s da uno t se δ(x,s) F e δ(x,t) F o viceversa) 3) Il processo si itera fino a che è possibile La partizione finale sarà composta da gruppi di stati che non vengono distinti da nessuna stringa input. Introduzione ai compilatori - UNINA 29
30 Procedura di suddivisione: ciascun G gruppo della partizione Π corrente viene suddiviso in sottogruppi in modo che due stati stanno nello stesso sottogruppo se e solo se, per ogni simbolo di input, portano ad uno stesso sottogruppo all interno della partizione. a a Π=(F),(Q-F) do { Πold= Π Π = procedura di suddivisione su Πold } while Πold<> Π Si eliminano gli stati morti e le transizioni che conducono ad esso. La funzione di transizione connette le coppie di stati risultanti della partizione come la funzione di transizione originaria connette qualsiasi coppia di stati rappresentativi delle partizioni. La funzione è consistente perché la scelta degli stati rappresentativi è ininfluente Introduzione ai compilatori - UNINA 30
31 Quadro riassuntivo DFA/NFA/Linguaggi regolari DFA /DFA minimo. Algoritmi di riconoscimento Linguaggi regolari E sempre possibile ottenere un DFA equivalente ad un dato NFA NFA con indeterminazioniε transizioni E sempre possibile ottenere un DFA in grado di riconoscere il linguaggio denotato da un ER Espressioni regolari E sempre possibile ottenere un NFA che riconosce il linguaggio denotato da una espressione regolare Introduzione ai compilatori - UNINA 31
32 Limiti delle espressioni regolari Le espressioni regolari non sufficienti a denotare alcuni linguaggi (CF) le parentesi bilanciate le stringhe ripetute: {wcw : w {a,b}*} Pumping Lemma L è un linguaggio regolare. Esiste una costante n tale che se z L, e z n si può scrivere z=uvw in modo che uv n e v 1 e che per ogni i 0 si ha che uv i w appartiene a L. Inoltre n è minore o uguale al più piccolo automa che accetta L. Introduzione ai compilatori - UNINA 32
33 Applicazioni Lex (costruzione diretta DFA) comandi UNIX: grep (subset construction) fgrep, egrep, diff AWK, linguaggi interrogazioni basi dati Introduzione ai compilatori - UNINA 33
34 Lex - struttura progetto dichiarazioni %% regole di transizione %% procedure ausiliarie Espressioni regolari LEX Analizzatore lessicale Introduzione ai compilatori - UNINA 34
35 Espressioni regolari in Lex 1 -Operatori: \ [ ] ^ -?. * + ( ) $ / { } % < > -Lettere e numeri del testo di ingresso sono descritti mediante se stessi: l espressione regolare ciao rappresenta la sequenza c i a o - I caratteri non alfabetici vengono rappresentati racchiudendoli tra doppi apici, per evitare ambiguità con gli operatori, oppure facendoli precedere da \: l espressione a ++ b rappresenta la sequenza a + b -Classi di caratteri operatori [], segno di intervallo -: [ ], [0-9]rappresentano una cifra nel testo di ingresso. - Per includere il carattere - in una classe di caratteri, deve essere specificato come primo o ultimo della serie:l espressione [-+0-9] rappresenta una cifra o un segno - - segno di esclusione ^ posto all inizio indica una gamma di caratteri da escludere: l espressione [^0-9] qualunque carattere che non sia una cifra Introduzione ai compilatori - UNINA 35
36 Espressioni regolari in Lex 2 -Operatori: (si riferiscono alla espressione che li precede)? espressione opzionale:.ab?c indica ac che abc. * espressione può essere ripetuta 0 o più volte:.ab*c + espressione può essere ripetuta 1 o più volte:.ab+c alternativa tra due espressioni:.ab cd indica sia ab che cd. ( ) Le parentesi tonde > priorità tra operatori: (ab cd+)?ef -- ef, abef, cdddef. / Operatore lookahead (caratteri di prospezione) r/s match r solo se seguita da s (s non è parte del match). Esprime la dipendenza dal contesto destro. Qualsiasi carattere che non sia \n: è equivalente a [^\n] Introduzione ai compilatori - UNINA 36
37 Parte regole (2) - Azioni di riconoscimento in Lex -Ad ogni espressione regolare è associabile in Lex un azione che viene eseguita all atto del riconoscimento (istruzioni in codice c, { }). Azione nulla - carattere ;. Output del riconoscitore.il testo riconosciuto viene conservato nella variabile yytext,(char *)..Il numero di caratteri riconosciuti viene memorizzato nella variabile yyleng, (int). Il testo non descritto da nessuna espressione regolare viene ricopiato in uscita, carattere per carattere. Introduzione ai compilatori - UNINA 37
38 Parte definizione (1) e procedure (3) Lex Nella parte definizione si possono definire sotto-espressioni: IDENTIFICATORE espr.regolare Ogni riga della sez. definizione il cui primo carattere non è è una definizione, es.: : number [+ -]?[0-9]+ identif [a-za-z][a-za-z0-9]* La sotto-espressione così definita può essere utilizzata racchiudendone il nome tra parentesi graffe: {number} printf( trovato numero\n ); Le righe che iniziano con spazio o tabulazione e tutti i caratteri compresi tra i delimitatori %{ e %} sono ricopiati nel file C La sezione procedure del programma sorgente sono ricopiate nel file C Introduzione ai compilatori - UNINA 38
39 Esempio riconoscimento operatori relazionali e identificatori %{ //== DEFINIZIONI c delle costanti #define LT 1 #define GT 2 %} delim [ \t\n] blanks {delim}+ letter [A-Za-z] digit [0-9] id {letter}({letter} {digit})* number {digit}+(\.{digit}+)?(e[+\-]?{digit}+)? %% Introduzione ai compilatori - UNINA 39
40 ... {blanks} /* niente da fare */; if {return(if);} then {return(then);} else {return(else);} {id} {yylval = install_id(); return(id);} {number} {yylval = install_num(); return(number); } < {yylval = LT; return(relop); } <= {yylval = LE; return(relop); } = {yylval = EQ; return(relop); } <> {yylval = NE; return(relop); } > {yylval = GT; return(relop); } >= {yylval = GE; return(relop); }. { /* regola punto ignoro tutti gli altri casi */ %% install_id () {/* inserisce l identificatore (yylval) nella symbol table */}... Introduzione ai compilatori - UNINA 40
41 Funzionamento di Lex *) LEX scandisce l input fino a trovare il più lungo prefisso che verifica una espressione regolare, quindi attiva l azione corrispondente e restituisce il controllo (al parser). *) Nel caso in cui la stessa sequenza verifica più di una espressione regolare, viene eseguita l azione di quella dichiarata prima ES.: format %% for {return FOR_CMD;} format {return FORMAT_CMD;} [a-z]+ {return GENERIC_ID;} Introduzione ai compilatori - UNINA 41
42 Contesti nell analisi lessicale Può essere utile avere più insiemi di regole lessicali da applicare in casi diversi, a seconda del contesto sinistro (ciò che si è già letto prima) variabili flag. condizioni iniziali sulle regole o stati. più analizzatori lessicali ES: variabili flag Eliminazione commenti del tipo // int flag=0; %% // {flag=1; /* begin of comment */} \n {flag=0; /* \n terminates comment */} /* ignore blanks*/ \t /* and tabs */ \$[a-za-z]+[-+] { if(flag==1) process(yytext); else REJECT;}... other rules Introduzione ai compilatori - UNINA 42
43 Stati inclusivi in Lex Una regola in Lex puo essere preceduta dal nome (<stato1>,<stato2> ) di uno più stati, ed essere attivata solo quando l analizzatore si trova in uno degli stati indicati (stati inclusivi). Si entra in uno stato quando viene eseguita l azione BEGIN(state); Si esce eseguendo BEGIN(INITIAL) (INITIAL è lo stato di default) Gli stati vanno dichiarati nella parte delle dichiarazioni con %s <nome_stato> (oppure %start <nome_stato>) %s comment %% <comment>\$[a-za-z]+[-+] {process(yytext);} // {BEGIN(comment);} \n {BEGIN(INITIAL);} /* ignore blanks*/ \t /* and tabs */... other rules Introduzione ai compilatori - UNINA 43
44 Stati esclusivi in Lex È possibile identificare un insieme di regole in uno stato esclusivo. Quando l analizzatore si trova in uno stato esclusivo le regole di default risultano disabilitate sono attive solo le regole esplicitamente attivate nello stato. In tal modo è possibile specificare più analizzatori lessicali, ciascuno per stato esclusivo (elaborazioni di commenti, stringhe). %x <nome_stato> oppure %exclusive <nome_stato> Esempio: eliminazione dei commenti C Introduzione ai compilatori - UNINA 44
45 int line_num = 1; %x comment %% \n ++line_num; "/*" BEGIN(comment); <comment>[^*\n]* ; <comment>"*"+[^*/\n]* ; <comment>\n ++line_num; <comment>"*"+"/" BEGIN(INITIAL);... other rules Modifiche possibili: eliminazione di tutti i tipi di commenti, commenti annidati Introduzione ai compilatori - UNINA 45
46 Struttura file Lex generato Lex produce un programma C, l analizzatore lessicale è dato dalla funzione int yylex(). Input file yyin (default stdin); su file output yyout (default stdout) va il testo non riconosciuto. Se non specificato diversamente termina solo quando l intero file di ingresso è stato analizzato. Al termine di ogni azione l automa si ricolloca sullo stato iniziale Quando l analizzatore incontra la fine del file di ingresso, chiama la funzione yywrap() che serve a comunicare se ci sono altri file da analizzare (se restituisce 0, re-inizia l analisi da yyin) Introduzione ai compilatori - UNINA 46
47 Uso della funzione yywrap La funzione yywrap() può essere usata per stampare tabelle e statistiche. Per default, yywrap() restituisce sempre il valore 1 (un file alla volta). La regola speciale <<EOF>> introduce le azioni da intraprendere alla fine del file quando yywrap restituisce non-zero. ES.: Uso di EOF e di stati per intercettare delimitatori non bilanciati: \ { BEGIN(quote); }... <quote><<eof>> { error( EOF in string ); } Introduzione ai compilatori - UNINA 47
48 Lex - uso e parametri lex [opzioni] file.lex output lex.yy.c.-t copia il programma generato su stdout,.-v stampa una statistica circa il programma compilato,.-p stampa informazioni sulle performance dello scanner,.-ooutput genera il file output invece di lex.yy.c,.-b(-i) genera uno scanner Batch (Interattivo),.-f ottimizza le prestazioni dello scanner,.-i genera uno scanner case insensitive,.-d attiva i messaggi di debug nello scanner. Introduzione ai compilatori - UNINA 48
49 Esempio linguaggio pascal cifra [0-9] carattere identificatore numero stringa %% [A-Za-z] {carattere}({cifra} {carattere})* {cifra}+ [\"][A-Za-z0-9 \'!][\"] [Aa][Nn][Dd] { return AND; } [Oo][Rr] { return OR; } Introduzione ai compilatori - UNINA 49
Copyright. Esercitazioni di Linguaggi e Traduttori. Contenuti. Analisi lessicale. lex - un generatore di analizzatori lessicali
1 2 Copyright Esercitazioni di Linguaggi e Traduttori a.a. 2003/2004 Lia Morra Dipartimento di Automatica ed Informatica Tel. (011 564) 7068 E-mail: lia.morra@polito.it Copyright (c) 2000, Marco Torchiano
DettagliLEX. Espressioni regolari in Lex
LEX Poiché la trasformazione di espressioni regolari in automi a stati finiti deterministici e la implementazione di questi ultimi sono processi meccanici (e noiosi), spesso si utilizza un generatore automatico
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
DettagliLinguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle grammatiche 1
DettagliLinguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Potenza espressiva degli automi Potenza espressiva delle grammatiche 9/11/2004 Programmazione - Luca Tesei 1 Linguaggi Regolari Tutti i linguaggi che possono essere
DettagliCorso di Laurea Magistrale in Ingegneria Informatica A.A Linguaggi Formali e Compilatori LEX, FLEX, JLEX. Giacomo PISCITELLI
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori LEX, FLEX, JLEX Giacomo PISCITELLI LEX/FLEX/JLEX Poiché la trasformazione di espressioni regolari in
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
DettagliAnalizzatore 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
DettagliRiconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio
POLITECNICO I TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: Riconoscitori e analizzatori sintattici ata una grammatica non ambigua ed una sequenza
Dettagli1
POLITECNICO DI TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori a.a 2010 / 2011 mail: stefano.scanzio@polito.it sito: Lessico () Linguaggi? Sapete qual è il colmo per un tennista? Ridere
DettagliPrimi passi con JFlex
Primi passi con JFlex Luca Chiodini Abstract Ci proponiamo di muovere i primi passi nel mondo dell analisi lessicale e della produzione automatica di un analizzatore lessicale. Verrà mostrato l uso di
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
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
DettagliAnalizzatori Lessicali con JLex. Giuseppe Morelli
Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica
DettagliPOLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 1. a.a 2010 / Linguaggi?
POLITECNICO DI TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Linguaggi? Lessico () Sapete qual è il colmo per un tennista? Ridere
DettagliEsercitazioni 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
DettagliSui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm
Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemma N.Fanizzi - V.Carofiglio 6 aprile 2016 1 Teorema di Kleene 2 3 o 1 o 3 o 8 Teorema di Kleene Vale la seguente equivalenza: L 3 L FSL L REG Dimostrazione.
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,
DettagliEspressioni regolari
spressioni Regolari Un FA (NFA o DFA) e una macchina a stati finiti che riconosce linguaggi regolari. Una espressione regolare e un modo dichiarativo (o algebrico) per descrivere un linguaggio regolare.
DettagliVerificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO
ANALISI SINTATTICA TIPO 1: Data un linguaggio scrivere una grammatica che lo generi TIPO 2: Verificare se una grammatica non contestuale è ambigua TiPO 3: Verificare se una grammatica e LL(1) e costruirne
DettagliAnalisi Lessicale. File
Analisi Lessicale Corso di Linguaggi di Programmazione Stefano Ferilli ferilli@di.uniba.it Università degli Studi di Bari A.A. 2002/2003 File var nome: file of tipo; reset(nome) read(nome, arg,, arg) rewrite(nome)
DettagliLaboratorio di Compilatori
1 3 Analisi lessicale Laboratorio di Compilatori a.a. 1999/2000 Esercitazioni in aula http://www.polito.it/ulisse/corsi/inf/n3070/materiale/ Marco Torchiano Dipartimento di Automatica e Informatica Tel.
DettagliL ambiente UNIX/Linux. I filtri Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
L ambiente UNIX/Linux I filtri Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Filtri In UNIX/Linux un filtro è un comando che Riceve il proprio input da standard input Lo
DettagliLinguistica Computazionale
Linguistica Computazionale Laboratorio espressioni regolari (1) 30 settembre 2014 Cercare, ricercare Cercare una parola in un testo è semplice: ma come fare per ricerche più complesse? le parole che terminano
DettagliAnalisi lessicale (scanner)
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Ruolo dell Analizzatore lessicale Compito di un analizzatore
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
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
DettagliGeneratori di analizzatori lessicali e sintattici
Generatori di analizzatori lessicali e sintattici 1 Analizzatori lessicali Analisi lessicale: riconoscere nella stringa di ingresso gruppi di simboli che corrispondono a specifiche categorie sintattiche.
DettagliAnalisi lessicale (scanner)
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Distinzione terminologica stringa lessicale o lessema
DettagliL utility Unix awk [Aho-Weinberger-Kernighan]
L utility Unix awk [Aho-Weinberger-Kernighan] L utility awk serve per processare file di testo secondo un programma specificato dall utente. L utility awk legge riga per riga i file ed esegue una o più
DettagliDispensa 1. Da un punto di vista logico l architettura di un compilatore si può suddividere in due parti: Analisi e Sintesi.
Dispensa 1 1. Introduzione ai compilatori Compilatore Un compilatore è un programma che legge un programma scritto in un linguaggio (sorgente) e lo traduce in un programma equivalente in un altro linguaggio
DettagliAutoma deterministico con prospezione 1. < {q}, Σ, Σ V, δ, q, S, Φ > δ(a, X) = α R. se a Gui(X α) senza spostamento della testina.
Automa deterministico con prospezione 1 < {q}, Σ, Σ V, δ, q, S, Φ > δ(a, X) = α R δ(a, a) = ε se a Gui(X α) senza spostamento della testina con spostamento della testina Grammatica 1S ( S ) 2S [ S ] 3S
DettagliElaborazione di File di Dati. Uso di semplici comandi Espressioni regolari AWK
Elaborazione di File di Dati Uso di semplici comandi Espressioni regolari AWK Sort sort [option] file1... filen Consente di ordinare, fondere o confrontare le linee dei file in input Ha tre modalità di
DettagliAlgoritmi e basi del C Struttura di un programma
Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 17 Marzo 2015 Compitini Compitini di INFO: 24 Aprile 2015 4.15pm @ C.G.1 (Ed. 9) 21
Dettagliid+id*id (id+id)*id / - ( + ) * +id +*** (+)id Linguaggi formali Stringhe Linguaggi Grammatiche
id / - ( + ) * id+id*id (id+id)*id +*** (+)id + +id Linguaggi formali Stringhe Linguaggi Grammatiche 2 Simboli, Alfabeto e stringhe 3 Operazioni su stringhe 4 Linguaggi 5 Operazioni sui linguaggi 6 Concatenazione
DettagliLinguaggi regolari e automi a stati finiti
utomi a stati finiti Gli automi a stati finiti sono usati come modello per Software per la progettazione di circuiti digitali. Analizzatori lessicali di un compilatore. Ricerca di parole chiave in un file
DettagliUlteriori comandi sui file
Ulteriori comandi sui file Confronto tra file: 1. > cmp file1 file2 restituisce il primo byte ed il numero di linea in cui file1 e file2 differiscono (se sono uguali, non viene stampato nulla a video).
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
DettagliUnità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi
Obiettivi Unità F1 Primi programmi Conoscere il significato di dichiarazione e definizione di variabili Conoscere i tipi di dato numerici Essere in grado di realizzare semplici algoritmi in pseudolinguaggio
DettagliEsempio stringhe palindrome 1
Esempio stringhe palindrome 1 Automa per il riconoscimento del linguaggio L = {w c w R } A = < {s,f}, {a,b,c}, {a,b},!, s, { f } > con! che contiene le transizioni: 1. (( s, a, " ), (s, a)! [ push a] 2.
DettagliPumping lemma per i linguaggi Context-free
Pumping lemma per i linguaggi Context-free Sia L un linguaggio context-free. E possibile determinare una costante k, dipendente da L, tale che qualunque stringa z! L con z > k si può esprimere come z=
DettagliCognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :
PROGRAMMAZIONE (Corsi B e C) Pre-appello di Gennaio 2004 (A.A. 2003/2004) PROGRAMMAZIONE (B e C) S. Straordinaria - Appello di Gennaio (A.A. 2002/2003) 22 Gennaio 2004 ore 11 Aula II di Facoltà (Durata:
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
DettagliConcetti di base sugli automi e sui linguaggi formali
Concetti di base sugli automi e sui linguaggi formali Andrea Burattin 18 marzo 2005 Sommario Piccolo insieme di concetti sul funzionamento degli automi (a stati finiti, a pila,...), delle grammatiche libere
DettagliLinguaggio C: introduzione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi
DettagliProprieta dei Linguaggi Regolari. Proprieta dei Linguaggi Regolari
roprieta dei Linguaggi Regolari Pumping Lemma. Ogni linguaggio regolare soddisfa una proprieta ben nota, il pumping lemma. Questa tecnica fornisce uno strumento utile per dimostrare che un linguaggio non
DettagliQuiz sui linguaggi regolari
Fondamenti dell Informatica 1 semestre Quiz sui linguaggi regolari Prof. Giorgio Gambosi a.a. 2016-2017 Problema 1: Data l espressione regolare a, definita su {a, b}, descrivere il linguaggio corrispondente
DettagliGrammatiche 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,
DettagliEspressioni regolari. Espressioni regolari
spressioni regolari Un FA (NFA o DFA) e un metodo per costruire una macchina che riconosce linguaggi regolari. Una espressione regolare e un modo dichiarativo per descrivere un linguaggio regolare. Esempio:
DettagliCostruzione di espressioni regolari 4
ostruzione di espressioni regolari 4 Indicando con d uno dei possibili digits {,, 2,,9} --possiamo esprimere il sotto linguaggio dei digits come d = ( + + 2 +.. + 9) Quale linguaggio produce l espressione:
DettagliAlfabeto ed elementi lessicali del linguaggio C
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n
DettagliEsercizi di Fondamenti di Informatica per la sicurezza. Stefano Ferrari
Esercizi di Fondamenti di Informatica per la sicurezza tefano Ferrari 23 dicembre 2003 2 Argomento 1 Grammatiche e linguaggi Esercizi Es. 1.1 Definiti i linguaggi: L 1 = {aa, ab, bc, c} L 2 = {1, 22, 31}
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
DettagliForma Normale di Chomsky
2. Eliminazione delle produzioni unitarie Forma Normale di Chomsky Una produzione si dice unitaria se è della forma A! B. Le produzioni unitarie in pratica consistono in una ridenominazione di variabili,
DettagliDispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:
Dispensa 2 2.1 Costruzione Parsing Table LR: generalità Come tutti i parser tabellari predittivi, anche i parser LR possono essere applicati solo a parsing table senza conflitti (ossia entrate multiple)
DettagliAutomi e Linguaggi Formali Automi a stack (Pushdown automata)
Automi e Linguaggi Formali Automi a stack (Pushdown automata) A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Automi a stack Un Pushdown Automata (PDA) o Automa a stack Essenzialmente un ɛ-nfa con
DettagliCorso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a
Dott.ssa Maria Carmela De Bonis a.a. 2013-14 Programmi Un elaboratore riceve dei dati in ingresso, li elabora secondo una sequenza predefinita di operazioni e infine restituisce il risultato sotto forma
DettagliProgamma sintetico. Nozioni preliminari Automi Finiti Macchine di Turing Limiti delle macchine di Turing La tesi di Church-Turing Le classi P e NP
Progamma sintetico Nozioni preliminari Automi Finiti Macchine di Turing Limiti delle macchine di Turing La tesi di Church-Turing Le classi P e NP Un problema classico Un uomo viaggia con un lupo, una pecora
DettagliL intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.
ANALISI SINTATTICA Data un linguaggio scrivere una grammatica che lo generi ESERCIZIO 1 Definire una grammatica per il linguaggio L = {ww w appartiene a (a, b)*} ESERCIZIO 2 Dato l alfabeto T=[0,1,2,3,4,5,6,7,8,9,/}
DettagliIl Linguaggio C. Caratteristiche. Caratteristiche. Esempio di programma in C. Tipi di dato primitivi in C. Dati
Caratteristiche Il Linguaggio C Linguaggio sequenziale (lineare), imperativo, strutturato a blocchi usabile anche come linguaggio di sistema software di base sistemi operativi compilatori... FI - Algoritmi
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,
DettagliForme Normali. Forma normale di Chomsky. E caratterizzata da regole di due tipi. A! BC dove A, B, C $ V N A! a con a $ V T. Forma normale di Greibach
Forme Normali A partire da una grammatica Context-free G è sempre possibile costruire una grammatica equivalente G ovvero L(G) = L(G ) che abbiano le produzioni in forme particolari, dette forme normali.
DettagliDispensa 3. 1.1 YACC: generalità
Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un
DettagliAutoma a Stati Finiti (ASF)
Automa a Stati Finiti (ASF) E una prima astrazione di macchina dotata di memoria che esegue algoritmi Introduce il concetto fondamentale di STATO che informalmente può essere definito come una particolare
DettagliAUTOMA A STATI FINITI
Gli Automi Un Automa è un dispositivo, o un suo modello in forma di macchina sequenziale, creato per eseguire un particolare compito, che può trovarsi in diverse configurazioni più o meno complesse caratterizzate
DettagliIntroduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
DettagliIl lessico descrive le parole o elementi lessicali che compongono le frasi. Nei linguaggi artificiali gli elementi lessicali possono essere assegnati
Il lessico descrive le parole o elementi lessicali che compongono le frasi. Nei linguaggi artificiali gli elementi lessicali possono essere assegnati alle seguenti classi: Parole chiave: sono particolari
DettagliInformatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza
Macchine di Turing Argomenti della lezione Definizione della macchina di Turing Riconoscimento e accettazione di linguaggi Macchine a più nastri La macchina di Turing èun è automa che può leggere e scrivere
DettagliDispensa YACC. 1.1 YACC: generalità
Dispensa YACC 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in
DettagliLEXICAL ANALYSIS LEXICAL ANALYSIS - SCANNING 30/10/2013. Symbol Table. Tokens described formally Breaks input into tokens White space.
LEXICAL ANALYSIS 1 LEXICAL ANALYSIS - SCANNING Source langua ge Scanner (lexical analysis) tokens Parser (syntax analysis) Semantic Analysis (IC generator) Code Generator 2 Code Optimizer Tokens described
DettagliI Linguaggi di Programmazione
I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
Dettagli8 Introduzione MATLAB
8.1 Basi Per pulire il workspace (eliminare tutte le variabili esistenti): 1 clear Per pulire la finestra dei comandi (command window): 1 clc In MATLAB non è necessario dichiarare le variabili ed esse
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Le classi di istruzioni in C++ 1 Le classi di istruzioni in C++ SEQUENZIALI Statement semplice Statement composto CONDIZIONALI if < expr.> else switch case
DettagliUn esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);
Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i
DettagliProprieta dei Linguaggi regolari
Proprieta dei Linguaggi regolari Pumping Lemma. Ogni linguaggio regolare soddisfa il pumping lemma. Se qualcuno vi presenta un falso linguaggio regolare, l uso del pumping lemma mostrera una contraddizione.
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
DettagliPerché 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
DettagliLinguaggio C Struttura dei programmi
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Struttura dei programmi 2001 Pier Luca Montessoro - Davide
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 16 ottobre 2007 1 Rappresentazioni di caratteri in C In C un carattere è una costante intera il cui valore è dato dal codice ASCII
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
DettagliCompilatori-Esempio. Compilatori-Esempio. Analisi dell input. Analisi lessicale. Sintesi ell output
Laboratorio di Ingegneria Informatica I compilatori Corso di laurea specialistica in Ingegneria Informatica DFA: automi a statifiniti deterministici Analisi dell input Analisi lessicale Sintesi ell output
Dettagli<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;
ISTRUZIONI Le istruzioni esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno del programma o del mondo circostante. Le strutture di controllo permettono di
DettagliDescrizione delle operazioni di calcolo. Espressioni costanti semplici
Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette
DettagliAlgoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio
Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi
DettagliEspressioni Regolari
Espressioni Regolari Le espressioni regolari sono costituite dalle stringhe sull alfabeto Σ = Σ {+,,*,(,),φ} ottenute secondo le seguenti regole: 1. φ e ciascun membro di Σ sono Epressioni Regolari 2.
Dettagli7. Automi a Pila e Grammatiche Libere
(fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari 20 aprile 2016 1 Automi a Pila Definizione Descrizioni Istantanee Condizioni di Accettazione per PDA Esempi 2 Teorema delle
DettagliCorso di Fondamenti di Informatica Linguaggi di Programmazione
di Cassino e del Lazio Meridionale Corso di Informatica Linguaggi di Programmazione Anno Accademico 2014/2015 Francesco Tortorella Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann
DettagliLINGUAGGI CONTEXT FREE. Lezione Lezione
LINGUAGGI CONTEXT FREE Lezione 25-11-2010 Lezione 30-11-2010 2 INTRODUZIONE GERARCHIA DI CHOMSKY 3 4 DEFINIZIONE DEI LINGUAGGI CONTEXT FREE LINGUAGGI CF I linguaggi di tipo 2 sono detti context free (CF)
DettagliLab. di Sistemi Operativi - Lezione in aula - a.a. 2012/2013
Lab. di Sistemi Operativi - Lezione in aula - a.a. 2012/2013 Espressioni Regolari 1 Sommario Metacaratteri Quoting Comandi di filtro: grep Espressioni Regolari (E.R.): I caratteri grep con E.R. 2 - Metacaratteri
DettagliFile binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
Dettaglicontrollo stringa a a b a b b c c b a b x y z pila di memoria
Gli automi a pila Dagli automi finiti iti agli automi a pila Possiamo ottenere un automa a pila a partire da un automa finito (così come l abbiamo definito in precedenza), attraverso l introduzione di
DettagliProprietà dei linguaggi regolari
Proprietà dei linguaggi regolari Argomenti della lezione Relazione tra automi, grammatiche ed espressioni regolari Pumping lemma per i linguaggi regolari Equivalenza di automi a stati finiti Le seguenti
DettagliInformatica! Appunti dal laboratorio 1!
Informatica! Appunti dal laboratorio 1! Sistema Operativo! Windows 7, Windows 8, Mac OS X, Linux, Debian, Red Hat, etc etc! Il sistema operativo è un programma che serve a gestire TUTTE le risorse presenti
DettagliInformatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina
DettagliAnalizzatore lessicale Scanner
Analizzatore lessicale Scanner Il lessico Il lessico descrive, come ricordato, le parole o elementi lessicali che compongono le frasi. Nei linguaggi artificiali gli elementi lessicali possono essere assegnati
DettagliIl preprocessore. Direttiva define Direttiva include Direttiva if
Il preprocessore Direttiva define Direttiva include Direttiva if Il preprocessore Il preprocessore è un processore di testi che elabora il contenuto di un file sorgente prima della compilazione vera e
DettagliINTRODUZIONE. ALLA PROGRAMMAZIONEColonna 1. in linguaggio C
12 10 8 INTRODUZIONE 6 4 ALLA PROGRAMMAZIONEColonna 1 Colonna 2 Colonna 3 in linguaggio C 2 0 Riga 1 Riga 2 Riga 3 Riga 4 di Mauro Casula { Scopi del seminario Essere chiaro ed esauriente; Spiegare nei
DettagliLA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese
LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE Ivan Lanese argomenti Grammatiche BNF Varianti: BNF + ε EBNF Remind: cos è una grammatica Una grammatica è uno strumento linguistico per definire insiemi di
DettagliDefinire tramite una grammatica ad attributi il
1 ESERCIZI ESERCIZIO 1 Definire tramite una grammatica ad attributi il linguaggio L = {a n b n c n n 0} Implementare un analizzatore sintattico/ semantico a discesa ricorsiva Costruire le tabelle di analisi
Dettagli