Analisi lessicale. Scopi Tecniche Strumenti - Lex. Introduzione ai compilatori - UNINA 1

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Analisi lessicale. Scopi Tecniche Strumenti - Lex. Introduzione ai compilatori - UNINA 1"

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

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

Dettagli

LEX. Espressioni regolari in Lex

LEX. 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

Dettagli

Linguaggi e Ambienti di Programmazione

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

Dettagli

Linguaggi Regolari e Linguaggi Liberi

Linguaggi 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

Dettagli

Linguaggi Regolari e Linguaggi Liberi

Linguaggi 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

Dettagli

Corso 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 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

Dettagli

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

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

Dettagli

Analizzatore Lessicale Parte I Scanner

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

Dettagli

Riconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio

Riconoscitori 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

Dettagli

1

1 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

Dettagli

Primi passi con JFlex

Primi 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

Dettagli

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

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

Dettagli

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

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

Dettagli

Analizzatori Lessicali con JLex. Giuseppe Morelli

Analizzatori 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

Dettagli

POLITECNICO 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. 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

Dettagli

Esercitazioni di Linguaggi e Traduttori

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

Dettagli

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm

Sui 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.

Dettagli

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

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

Dettagli

Espressioni regolari

Espressioni 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.

Dettagli

Verificare 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

Verificare 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

Dettagli

Analisi Lessicale. File

Analisi 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)

Dettagli

Laboratorio di Compilatori

Laboratorio 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.

Dettagli

L 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 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

Dettagli

Linguistica Computazionale

Linguistica 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

Dettagli

Analisi lessicale (scanner)

Analisi 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

Dettagli

Automi e Linguaggi Formali

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

Dettagli

Fasi di un Compilatore

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

Dettagli

Generatori di analizzatori lessicali e sintattici

Generatori 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.

Dettagli

Analisi lessicale (scanner)

Analisi 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

Dettagli

L utility Unix awk [Aho-Weinberger-Kernighan]

L 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ù

Dettagli

Dispensa 1. Da un punto di vista logico l architettura di un compilatore si può suddividere in due parti: Analisi e Sintesi.

Dispensa 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

Dettagli

Automa 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. 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

Dettagli

Elaborazione di File di Dati. Uso di semplici comandi Espressioni regolari AWK

Elaborazione 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

Dettagli

Algoritmi e basi del C Struttura di un programma

Algoritmi 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

Dettagli

id+id*id (id+id)*id / - ( + ) * +id +*** (+)id Linguaggi formali Stringhe Linguaggi Grammatiche

id+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

Dettagli

Linguaggi regolari e automi a stati finiti

Linguaggi 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

Dettagli

Ulteriori comandi sui file

Ulteriori 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).

Dettagli

Definizioni syntax-directed

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

Dettagli

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Unità 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

Dettagli

Esempio stringhe palindrome 1

Esempio 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.

Dettagli

Pumping lemma per i linguaggi Context-free

Pumping 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=

Dettagli

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Cognome 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:

Dettagli

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

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

Dettagli

Concetti di base sugli automi e sui linguaggi formali

Concetti 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

Dettagli

Linguaggio C: introduzione

Linguaggio 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

Dettagli

Proprieta dei Linguaggi Regolari. Proprieta dei Linguaggi Regolari

Proprieta 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

Dettagli

Quiz sui linguaggi regolari

Quiz 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

Dettagli

Grammatiche Parse trees Lezione del 17/10/2012

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,

Dettagli

Espressioni regolari. Espressioni regolari

Espressioni 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:

Dettagli

Costruzione di espressioni regolari 4

Costruzione 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:

Dettagli

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto 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

Dettagli

Esercizi di Fondamenti di Informatica per la sicurezza. Stefano Ferrari

Esercizi 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}

Dettagli

Le basi del linguaggio Java

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

Dettagli

Forma Normale di Chomsky

Forma 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,

Dettagli

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:

Dispensa 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)

Dettagli

Automi e Linguaggi Formali Automi a stack (Pushdown automata)

Automi 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

Dettagli

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Corso 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

Dettagli

Progamma 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 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

Dettagli

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.

L 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,/}

Dettagli

Il Linguaggio C. Caratteristiche. Caratteristiche. Esempio di programma in C. Tipi di dato primitivi in C. Dati

Il 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

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

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

Dettagli

Forme 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. 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.

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 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

Dettagli

Automa a Stati Finiti (ASF)

Automa 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

Dettagli

AUTOMA A STATI FINITI

AUTOMA 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

Dettagli

Introduzione alla programmazione

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

Dettagli

Il 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 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

Dettagli

Informatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza

Informatica 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

Dettagli

Dispensa YACC. 1.1 YACC: generalità

Dispensa 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

Dettagli

LEXICAL ANALYSIS LEXICAL ANALYSIS - SCANNING 30/10/2013. Symbol Table. Tokens described formally Breaks input into tokens White space.

LEXICAL 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

Dettagli

I Linguaggi di Programmazione

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

Dettagli

8 Introduzione MATLAB

8 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

Dettagli

Caratteri e stringhe

Caratteri 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

Dettagli

Corso di Fondamenti di Informatica

Corso 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

Dettagli

Un 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. 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

Dettagli

Proprieta dei Linguaggi regolari

Proprieta 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.

Dettagli

Costanti e Variabili

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

Dettagli

Perché il linguaggio C?

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

Dettagli

Linguaggio C Struttura dei programmi

Linguaggio 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio 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

Dettagli

Costruzione dell insieme dei Follow

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

Dettagli

Compilatori-Esempio. Compilatori-Esempio. Analisi dell input. Analisi lessicale. Sintesi ell output

Compilatori-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> ;

<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

Dettagli

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

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

Dettagli

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Algoritmi 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

Dettagli

Espressioni Regolari

Espressioni 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.

Dettagli

7. Automi a Pila e Grammatiche Libere

7. 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

Dettagli

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Corso 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

Dettagli

LINGUAGGI CONTEXT FREE. Lezione Lezione

LINGUAGGI 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)

Dettagli

Lab. di Sistemi Operativi - Lezione in aula - a.a. 2012/2013

Lab. 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

Dettagli

File binari e file di testo

File 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

Dettagli

controllo stringa a a b a b b c c b a b x y z pila di memoria

controllo 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

Dettagli

Proprietà dei linguaggi regolari

Proprietà 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

Dettagli

Informatica! Appunti dal laboratorio 1!

Informatica! 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

Dettagli

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

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

Dettagli

Analizzatore lessicale Scanner

Analizzatore 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

Dettagli

Il preprocessore. Direttiva define Direttiva include Direttiva if

Il 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

Dettagli

INTRODUZIONE. ALLA PROGRAMMAZIONEColonna 1. in linguaggio C

INTRODUZIONE. 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

Dettagli

LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese

LA 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

Dettagli

Definire tramite una grammatica ad attributi il

Definire 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