Descrizione di un linguaggio di programmazione. Sintassi dei linguaggi di programmazione. Descrizione della sintassi linguaggio di programmazione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Descrizione di un linguaggio di programmazione. Sintassi dei linguaggi di programmazione. Descrizione della sintassi linguaggio di programmazione"

Transcript

1 Descrizione di un linguaggio di programmazione Sintassi dei linguaggi di programmazione Grammatiche e automi sintassi: quali sequenze di caratteri costituiscono programmi, la loro struttura semantica: significato, come si comporta un programma, l effetto della sua esecuzione pragmatica: utilizzo pratico; come scrivere buon codice; convenzioni, stili nello scrivere i programmi. implementazione: come eseguire il codice Grammatiche e automi Sintassi dei linguaggi di programmazione 1 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 2 / 60 Descrizione della sintassi linguaggio di programmazione Quali sequenze di carattere formano un programma Qual è la struttura sintattica di un programma Descrizione, completamente formale, ottenuta tramite grammatiche Ripasso di Fondamenti di informatica Grammatiche Formalismo nato per descrivere linguaggi, anche naturali Chonsky, anni 50 Si definisce: un alfabeto A, linguaggio formato da sequenze di elementi (lettere) dell alfabeto. i simboli alfabeto sono chiamati anche terminali un insieme di categorie sintattiche: proposizione, soggetto, predicate, complementi-di-termine, nome, articolo,... comando, dichiarazione-di-termine, identificatore, costante-numerico, dichiarazioni costituiscono i simboli non-terminali Grammatiche e automi Sintassi dei linguaggi di programmazione 3 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 4 / 60

2 Grammatiche Formalmente un insieme di regoli generazione, spiegano come espandere i non-terminali, quali classe di parale, un non-terminale rappresenta, proposizione -> soggetto predicato_verbale proposizione -> soggetto predicato_verbale complemento_oggetto programma -> dichiarazioni programma_principale Un linguaggio su alfabeto A, è un sottoinsieme di A, (stringhe su A) Definizione: Grammatica libera (dal contesto) Caratterizzata da: T insieme di simboli terminali (alfabeto del linguaggio) NT insieme di simboli non terminali (categorie sintattiche) R insieme di regole di produzione S simbolo iniziale NT Regole R (libere da contesto) nella forma: V w con V NT e w (T NT ) Grammatiche e automi Sintassi dei linguaggi di programmazione 5 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 6 / 60 Espressioni aritmetiche su variabili a, b, c terminali: a, b, c, +, -, *, (, ) Esempio non-terminali: E, T, F (espressione, termine, fattore) regole: E -> T, E -> E + T, E -> E - T T -> F, T -> T * F F -> (E), F -> Var Var -> a, Var -> b, Var -> c simbolo iniziale: E Sviluppata per l Algol60 Formulazione alternativa: BNF (Backus Naur Form) non terminali marcati da parentesi: E (non devo definirli esplicitamente) -> sostituita da ::= regole con stesso simbolo a sinistra raggruppate E ::= T E + T E - T Esistono notazioni intermedie: E -> T E + T E - T Grammatiche e automi Sintassi dei linguaggi di programmazione 7 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 8 / 60

3 Derivazioni e alberi di derivazione Derivazione: come passare da simbolo iniziale a parola finale, una regola alla volta, Albero di derivazione: rappresentazione univoca della derivazione, mette in evidenza la struttura del termine. definizione di albero data per scontata: più formalizzazioni dello stesso concetto intuitivo es: sottoinsieme di stringhe chiuso per prefisso (foresta non ordinato) Espressioni aritmetiche definibili da: Grammatiche ambigue: E -> E + E E - E E * E ( E ) Var Le due grammatiche generano lo stesso linguaggio ma non sono equivalenti. a + b * c possiede due derivazioni nella seconda grammatica le due derivazioni inducono due meccanismi di valutazione differente due interpretazioni diverse della stessa stringa Queste ambiguità vanno evitate (come in matematica) Grammatiche e automi Sintassi dei linguaggi di programmazione 9 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 10 / 60 Due soluzioni: Disambiguare uno grammatica introdurre nuovi non-terminali e renderla più complessa non esistono ricette semplici convivere con grammatiche ambigue e specificare l ordine di precedenza degli operatori soluzione usata anche nei parser Esempio: stat ::= IF bool THEN stat ELSE stat IF bool THEN stat... ambigua su IF bool1 THEN IF bool2 THEN stat1 ELSE stat2 Esercizio: scrivere la versione non ambigua. Sintassi astratta (Abstract syntax tree) il significato di una stringa di caratteri è meglio rappresentata dal suo albero di derivazione che dall espressione stessa a volte necessario complicare l espressione per darle la giusta interpretazione (a + b) * c parentesi ( ) necessaria per definire la precedenza questi orpelli sono eliminabile nella rappresentazione ad albero Abstract syntax tree: albero sintattico minimale minima di una stringa Sintassi astratta: sintassi minimale senza complicazione per evitare ambiguità E -> E + E E - E E * E Var Grammatiche e automi Sintassi dei linguaggi di programmazione 11 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 12 / 60

4 Classi di grammatiche Oltre alle grammatiche libere dal contesto esistono anche: Grammatiche a struttura di frase dipendenti da contesto libere da contesto lineari sinistre, lineari destre regolari differenze: diverse grado di libertà nel definire le regole con grammatiche più generali: una classe più ampia di linguaggi definibili più complesso decidere se un parola appartiene al linguaggio, costruire albero di derivazione Scelta Libero da contesto compromesso ottimale tra espressività e complessità. spesso tempo lineare ampio insieme di linguaggi definibili Grammatiche e automi Sintassi dei linguaggi di programmazione 13 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 14 / 60 Vincoli sintattici contestuali: Soluzione (dei compilatori): Tuttavia con grammatiche libere dal contesto non posso eliminare dall insieme di programmi riconosciuti (accettati) programmi che non rispettano alcuni vincoli sintattici (contestuali) come: identificatori dichiarati prima dell uso ugual numero di parametri attuali e formali non modificare variabile di controllo ciclo for rispettare i tipi nelle assegnazioni il linguaggio a n b a n b a n non è libero da contesto usare comunque grammatiche libere (efficienti), costruito l albero sintattico, effettuare una fase di l analisi semantica Fase di analisi semantica chiamata anche semantica statica controlli eseguibili a tempo di compilazione alternativi alla semantica dinamica controlli eseguiti durante l esecuzione. Grammatiche e automi Sintassi dei linguaggi di programmazione 15 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 16 / 60

5 Semantica Front end del compilatore termine abusato nelle locuzioni semantica statica, semantica dinamica semantica di un programma rappresenta il suo significato, descrive il suo comportamento a run-time non un semplice controllo degli errori. Semantica definita quasi sempre informalmente in linguaggi naturale esistono alternative formali semantico operazionale strutturata: programma descritto da un sistema di regole (di riscrittura) che descrivono il risultato della valutazione di un qualsiasi programma semantica denozianale: descrivo con delle strutture matematiche (funzioni) il comportamento del programma. Sintassi della lingua naturale: descrivo l insieme di parale valide, divise in categorie (articoli, nomi, verbi,... ) regole per costruire frasi da parole descrizione linguaggio formale, compilatore descrizioni delle parti elementare lessema, meccanismi per riconoscerlo, analisi lessicale descrizione della struttura generale, a partire da lessemi, analisi sintattica Divisione rende più efficiente l analisi del testo Grammatiche e automi Sintassi dei linguaggi di programmazione 17 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 18 / 60 Analisi lessicale (scanner) Nella stringa di caratteri riconosco i lessemi, e per ogni lessema costituisco un token token : ( categoria sintattica, valore -attributo ) Esempio, data la stringa x = a + b * 2; viene generata la sequenza di token [(identifier, x), (operator, =), (identifier, a), (operator, +), (identifier, b), (operator, *), (literal, 2), (separator, ;)] La sequenza di token generati viene passata all analizzatore sintattico (parser) Come esprimere i lessemi: espressioni regolari Grammatiche e automi Sintassi dei linguaggi di programmazione 19 / 60 Sui linguaggi su uno stesso alfabeto A, sugli insiemi di stringhe di A posso definire le operazioni di: unione: L M Operazioni su linguaggi concatenazione L M = { s t s L, t M } dove s t indica la concatenazione della stringa s con la stringa t chiusura di Kleene L* = { s1 s2 s2... sn per ogni i si L} e considerare tutti gli insiemi di stringhe ottenibili da singoletti, usando le operazioni di sopra. Grammatiche e automi Sintassi dei linguaggi di programmazione 20 / 60

6 Espressioni regolari, algebra di Kleene Esempi Espressioni (algebriche), L, M, N,... che denotano un linguaggio, insieme di costanti: simboli terminali costante ε, stringa vuota attraverso le operazioni di: concatenazione: LM unione: L M chiusura di Kleene: L* a b* = {ε, a, b, bb, bbb,... } (a b)* = {ε, a, b, aa, ab, ba, bb, aaa,... } ab*(c ε) = { a, ac, ab, abc, abb, abbc,... } (0 (1(01*0)*1))* = { ε, 0, 00, 11, 000, 011, 110, 0000, 0011, 0110, 1001, 1100, 1111, 00000,... }, numeri in base 2 multipli di 3. Grammatiche e automi Sintassi dei linguaggi di programmazione 21 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 22 / 60 Da espressioni regolari a linguaggi Estensioni Oltre a operazioni base posso definire altre operazioni Ogni espressioni regolare rappresenta un linguaggio: L( ε ) = { ε } L(a) = { a } L (L M) = L(L) L (M) L (L M) = L(L) L (M) L (L*) = (L(L))* chiusura positiva: L + = L L* zero o un istanza: L? = ε L L{n}: n concatenazioni di parole in L = L L... L uno tra: [acdz] = a c d z range: [a-z,a-z] = a b c... A B C... Espressioni più compatte, ma stessa classe di linguaggi. Esistono molte altre estensioni Espressioni regolari usate nei programmi per manipolare stringhe, text-editor, incluse nel librerie standard di molti linguaggi di programmazione Grammatiche e automi Sintassi dei linguaggi di programmazione 23 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 24 / 60

7 Definizione tramite equazioni Risultati teorici Permette una scrittura chiara più compatta: digit -> [0-9] simple -> digit + fract -> simple. simple exp -> fract e ( ɛ + n ) simple num -> simple fract exp Teorema Linguaggi regolari posso essere descritti in molti diversi: espressioni regolari grammatiche regolari automi finiti non deterministici, NFA non determistic finite automata. automi finiti deterministici (macchine a stati finiti) DFA determistic finite automata. Teorema Esiste l automa deterministico minimo (minor numero di stati) Grammatiche e automi Sintassi dei linguaggi di programmazione 25 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 26 / 60 Esempio Applicazioni Dall espressione regolare costruisco l automa minimo, in modo effettivo. Dall automa minimo costruisco un programma (ottimale) per decidere se una parola appartiene a un espressione regolare. Programma contiene un tabella che descrive le transazione del automa minimo, e ne simula il comportamento. Riconoscitore per b(an)*e Grammatiche e automi Sintassi dei linguaggi di programmazione 27 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 28 / 60

8 Scanner Lo scanner deve risolvere un problema più complesso del semplice riconoscimento. Data una stringa di ingresso e una insieme di espressioni regolari, classi di lessemi (es. identificatori, numeri, operazioni,... ), lo scanner deve dividere la stringa in lessemi, Problemi: quando termina un lessema: soluzione standard quando non può essere ulteriormente esteso la stringa 3.14e+sa divisa in 3.14 e + sa la stringa 3.14e+5a divisa in 3.14e+5 a per deciderlo posso essere necessari più simboli di lookahaed; cosa fare se un lessema appartiene a più classi. In Fortran: DO 5 I = 1,25 DO 5 I = 1.25 loop assignment Grammatiche e automi Sintassi dei linguaggi di programmazione 29 / 60 Automa per le componenti di espressioni aritmetiche Grammatiche e automi Sintassi dei linguaggi di programmazione 30 / 60 Generatori di scanner (analizzatori lessicali) Diffuso generatore di scanner per Unix (linux) Prende in input un file di testo con struttura (F)LEX Classe di programmi che: dato un insieme di espressioni regolari costruiscono un programma che: data una stringa, riconosce i lessemi sulla stringa scanner. Il programma può eseguire azioni, tipicamente sostituire lessemi con token. Grammatiche e automi Sintassi dei linguaggi di programmazione 31 / 60 definizioni %% regole %% funzioni ausiliari la parte regole, la più importante, serie di regole nella forma espressione-regolare azione espressioni-regolare sono quelle di unix (grep, emacs), ricca sintassi azione codice C, eseguito quando riconosciuta la corrispondente azione Grammatiche e automi Sintassi dei linguaggi di programmazione 32 / 60

9 Esempio Definizioni %% aa bbb c printf("2a") printf("3b") printf("cc") definizioni contiene la definizione di alcune espressioni regolari nella forma nome espressione-regolare genera un programma che: modifica coppie di a modifica terne di b raddoppia le c lasciando inalterato il resto Grammatiche e automi Sintassi dei linguaggi di programmazione 33 / 60 esempio letter [a-za-z] digit [0-9] number {digit}+ notare le parentesi graffe in {digit}+ nomi definiti possono essere usati nelle regole Grammatiche e automi Sintassi dei linguaggi di programmazione 34 / 60 Funzioni ausiliare Nella parte funzioni ausiliarie definibile del codice C da usare nelle regole. Nelle regole posso usare le variabili yytex : stringa (array) contenente il lessema riconosciuto, puntatore al primo carattere yyleng : lunghezza del lessema yyval : usate per passare parametri con il parser %{ int val = 0; %} separatore [ \t\n] %% 0 {val = 2*val;} 1 {val = 2*val+1;} {separatore} {printf("%d",val);val=0;} Esempio sostituisce sequenze rappresentanti numeri binari con il loro valore, scritto in decimale. nella parte dichiarazione è possibile inserire codice da aggiunge al programma. Grammatiche e automi Sintassi dei linguaggi di programmazione 35 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 36 / 60

10 Uso standard Sintassi espressioni regolari caratteri di controllo:. * +? \ { } ( ) [ ] cifra [0-9] lettera [a-za-z] identificatore {lettera}({cifra} {lettera})* %% {identificatore} {printf("(ide,%s)", yytext);} sostituisci lessema con token identificatore di espressione regolare fa inserito tra { } e{n,m} con n, m naturali: da n a m ripetizioni di e, anche e{n,} [^abd] tutti i caratteri esclusi a b d e 1 /e 2 lookahead, fa match con e 1 e 2 ma restituisce e 1 \n newline, \s general space, \t tab ^ inizio riga Grammatiche e automi Sintassi dei linguaggi di programmazione 37 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 38 / 60 Funzionamento In pratica Si considerano tutte le espressioni regolari e si seleziona quella con match più lungo, la parte lookahaed conta nella misura a parità di lunghezza, conta l ordine delle regole vengono impostate yytext, yyleng e eseguita l azione nessun matching: regola di default: copio carattere input in output > flex sorgente genera un programma C lex.yy.c, compilabile con il comando > gcc lex.yy.c -ll opzione -ll necessaria per collegare alcune librerie Utilizzabile per automatizzare del text editing. Grammatiche e automi Sintassi dei linguaggi di programmazione 39 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 40 / 60

11 Analisi sintattica (parsing - parser) A partire da una grammatica libera da contesto una stringa di token costruisco l albero di derivazione della stringa, a partire dal simbolo iniziale Risultati teorici Le grammatiche libere possono essere riconosciuti da automi a pila non deterministici. Automi con un uso limitato di memoria: insieme finito di stati, una pila, in cui inserire elementi finiti, passo di computazione deciso in base a: stato, simbolo in testa alla pila, simbolo in input un gradino in più rispetto agli automi finiti. Per gli automi a pila non esiste equivalenza tra: non deterministici deterministici. Grammatiche e automi Sintassi dei linguaggi di programmazione 41 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 42 / 60 Complessità Un automa a pila non deterministico, simulato tramite backtracking, porta a complessità esponenziali. Esistono due algoritmi [Earley, Cocke-Yunger-Kasami] capaci di riconoscere linguaggi liberi in tempo O(n³) Un automa a pila deterministico risolve il problema in tempo lineare. In pratica: complessità O(n³) non accettabile per un compilatore. ci si limita ai linguaggi riconoscibili da automi a pila deterministici: classe sufficientemente ricca da contenere quasi tutti i linguaggi di programmazione (C++ è un eccezione) Due classi di automi a pila: LL e LR Automi LL(n) cerca di costruire l albero di derivazione top-down (a partire dal simbolo iniziale) usando n simboli di lookahead. Significato del nome: esamina la stringa from Left to right costruisci la derivazione Left-most usa n simboli di lookahead Grammatiche e automi Sintassi dei linguaggi di programmazione 43 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 44 / 60

12 Data la grammatica: Esempio di parsing Seconda derivazione la stringa adb viene riconosciuta con i seguenti passi: la stringa abb viene rifiutata con i seguenti passi: Grammatiche e automi Sintassi dei linguaggi di programmazione 45 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 46 / 60 Parsing guidato da una tabelle che in base: al simbolo in testa alla pila Più nel dettaglio ai primi n simboli di input non ancora consumati, normalmente n =1 Determina la prossima azione da svolgere: regola di espansione da applicare consumare un simbolo in input e in testa alla pila (se coincidono) generare segnale di errore (stringa rifiutata) accettare la stringa (input e pila vuoti) Analizzatori LL La teoria verrà presentata nel corso di Linguaggi e Compilatori (laurea magistrale) Relativamente semplici da capire e da costruire (a mano a partire da semplici grammatiche) La costruzione prevede dei passaggi di riscrittura di una grammatica in una equivalente (determina lo stesso linguaggio) dalla nuova grammatica, un algoritmo determina: se è LL(1) la tabelle delle transizioni Meno generali dell altra classe di automi LR(n), quelli effettivamente nei tool costruttori di parser. Grammatiche e automi Sintassi dei linguaggi di programmazione 47 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 48 / 60

13 Analizzatori LR Esempio approccio bottom-up: a partire dalla stringa di input, applico una serie di contrazioni, (regole al contrario) fino a contrarre tutto l input nel simbolo iniziale della grammatica. Grammatiche e automi Sintassi dei linguaggi di programmazione 49 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 50 / 60 Più nel dettaglio Automi LR Ad ogni passo si sceglie tra un azione di: shift inserisco un token in input nella pila reduce riduco la testa della pila applicando una riduzione al contrario Nella pila introduco una coppia l azione da compiere viene decisa guardando la componente stato in testa alla pila (non serve esaminarla oltre) n simboli di input, per l automa LR(0) esiste un algoritmo che a partire da: grammatica libera L mi permette di: stabilire se L è LR costruire l automa a pila relativo insieme degli strati tabella delle transazioni come deve comportarsi ĺ automa ad ogni passo. In realtà esisto tre versioni di questo algoritmo. Grammatiche e automi Sintassi dei linguaggi di programmazione 51 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 52 / 60

14 Varie versioni degli automi LR Analizzatori LALR In ordine crescente per complessità (numero di stati) e ampiezza di linguaggi riconosciuti, a parità del numero n di simboli di lookahead. SLR(n) LALR(n) LR(n) Aumentando n si allarga l insieme di linguaggi riconosciuti. Compromesso ideale tra numero di stati e varietà dei linguaggi riconosciuti Costruzione piuttosto complessa: da spiegare e da implementare. Bel esempio di applicazione di risultati teorici: Donald Knuth: 1965, parser LR, (troppi stati per i computer dell epoca) Frank DeRemer: SLR and LALR, (pratici perché con meno stati). LALR usato dai programmi generatori di parser: Yacc, Bison, Happy. Grammatiche e automi Sintassi dei linguaggi di programmazione 53 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 54 / 60 Yacc (Yet Another Compiler-Compiler) Generatore di parser tra i più diffusi: Riceve in input una descrizione astratta del parser: descrizione di una grammatica libera un insieme di regole da applicare ad ogni produzione Restituisce in uscita: programma C che implementa il parser l input del programma sono token generati da uno scanner (f)lex Disponibili varianti di Yacc per generare codice in altri linguaggi di programmazione: ML, Ada, Pascal, Java, Python, Ruby, Go, Haskell, Erlang. Grammatiche e automi Sintassi dei linguaggi di programmazione 55 / 60 %{ prologo %} definizioni %% regole %% funzioni ausiliarie Una produzione della forma Struttura di un programma Yacc: nonterm corpo1 corpok è espressa in Yacc con le regole: nonterm : corpo1 {azione semantica1 } corpok {azione semanticak } ; Grammatiche e automi Sintassi dei linguaggi di programmazione 56 / 60

15 %{ /* PROLOGO */ #define YYSTYPE double #include <math.h> #include <stdio.h> %} /* DEFINIZIONI */ %token NUM %left - + %left * / %left NEG /* meno unario */ Esempio Definizioni Grammatiche e automi Sintassi dei linguaggi di programmazione 57 / 60 %% /* REGOLE E AZIONI SEMANTICHE */ Esempio - Regole input: /* empty */ input line ; line : \n exp \n { printf ("\t%.10g\n", $1); } ; exp : NUM { $$=$1; } exp + exp { $$=$1+$3; } exp - exp { $$=$1 $3; } exp * exp { $$=$1*$3; } exp / exp { $$=$1/$3; } - exp %prec NEG { $$ = $2; } ( exp ) { $$ = $2; } ; Grammatiche e automi Sintassi dei linguaggi di programmazione 58 / 60 %% /* Funzioni Ausiliarie */ #include "lex.yy.c" Esempio - Funzioni ausiliarie Differenze tra YACC e LALR YACC produce codice C che implementata un automa LALR ma: non esiste uno stretto controllo che la grammatica sia LALR: grammatiche non LALR vengono accettate ma producono automi che possono fare scelte sbagliate, rifiutano parole valide. grammatiche ambigue sono accettate, attraverso definizione si possono togliere ambiguità, metodo empirico, le definizioni possono essere incomplete e YACC sceglie secondo le sue politiche. il codice C, non solo riconosce la stringa ma la valuta valutazione bottom-up - come il riconoscimento, risultati parziali inserite nella pila, la parte azioni delle regole specificano come valutare una parola a partire dalle sue sotto-parole. Grammatiche e automi Sintassi dei linguaggi di programmazione 59 / 60 Grammatiche e automi Sintassi dei linguaggi di programmazione 60 / 60

Sintassi dei linguaggi di programmazione

Sintassi dei linguaggi di programmazione Sintassi dei linguaggi di programmazione Grammatiche e automi Grammatiche e automi Sintassi dei linguaggi di programmazione 1 / 1 Descrizione di un linguaggio di programmazione sintassi: quali sequenze

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

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

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

Dettagli

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

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser Ruolo del parser Analisi 1 1 Dipartimento di Matematica e Informatica Universitá di Camerino mariarita.diberardini@unicam.it Ruolo del parser Ruolo dell analisi sintattica Ruolo del parser Metodologie

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 6 Marzo 2007 Regole della grammatica di un linguaggio

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal

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

Linguaggi e Traduttori: Analisi lessicale

Linguaggi e Traduttori: Analisi lessicale Linguaggi e Traduttori: Analisi lessicale Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-La) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

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

Dettagli

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010. Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte

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

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello AN - 1995 Linguaggi di alto livello AN - 1995 Evoluzione dei

Dettagli

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp. LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Cobol Basic Pascal Python Modula-2

Dettagli

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa

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

Schema generale parser LR

Schema generale parser LR Schema generale parser LR Input' a 1' 8'8'8' a i' 8'8'8' a n' $' ' Pila' s m' s m81' 8'8'8 ' Programma' di'parsing' LR' ' ACTION' ' ' GOTO' ' Output' Parser diversi di eriscono per la definizione delle

Dettagli

Automi e Linguaggi Formali

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

Dettagli

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI Fortran Cobol

Dettagli

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI Linguaggi di alto livello Barriera di astrazione C Fortran Cobol Modula-2 Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI C Fortran Modula-2

Dettagli

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A , p.1/19 Backus Naur Form Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova Linguaggio di programmazione p.2/19 strumento linguistico per scrivere una sequenza di istruzioni (programma)

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione 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

Espressioni regolari in UNIX p.1/19

Espressioni regolari in UNIX p.1/19 Espressioni regolari in UNIX Violetta Lonati a Dipartimento Scienze dell Informazione Università degli Studi di Milano a E garantito il permesso di copiare, distribuire e/o modificare i materiali cont

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

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada

Dettagli

Interpreti, compilatori e semantica operazionale

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

Dettagli

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2) Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

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

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

Corso di Linguaggi di Programmazione

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

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 5 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 10 Marzo 2008 Struttura di un compilatore

Dettagli

Supplemento alle dispense di Sintassi

Supplemento alle dispense di Sintassi Supplemento alle dispense di Sintassi Luca Tesei 20 ottobre 2002 1 Formalizzazione Lo scopo di questa sezione è quello di presentare in maniera formale e precisa le nozioni di Automa e di Grammatica Libera

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

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,

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

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali

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

Esempio. Grammatica E! T E!! T! *F T " F! (E) i. procedure E. ! if cc in FIRST (TE )! then T; E!!! else ERRORE (1); E! T E

Esempio. Grammatica E! T E!! T! *F T  F! (E) i. procedure E. ! if cc in FIRST (TE )! then T; E!!! else ERRORE (1); E! T E Esempio Grammatica E! T E!! E! + T E " T! F T T! *F T " F! (E) i E! T E T! F T E! + T E "!! tabella codici di errore # 1. omissione di operando 2. omissione di operatore 3. simbolo inatteso 4. carattere

Dettagli

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello Linguaggi di Programmazione dall assembler ai linguaggi di alto livello LINGUAGGIO MACCHINA 0 READ 8 READ 9 LOADA 8 3 LOADB 9 4 MUL 5 STOREA 8 6 WRITE 8 7 HALT 8 DATO INTERO 9 DATO INTERO Rappresentazione

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

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina Il compilatore C Astrazione Linguaggio macchina implica la conoscenza dei metodi usati per la rappresentazione dell informazioni nella CPU Linguaggio Assembly è il linguaggio delle istruzioni che possono

Dettagli

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori

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

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Automi e Linguaggi Formali Analisi Sintattica A.A. 2014-2015 Alessandro Sperduti sperduti@math.unipd.it Ruolo dell analisi sintattica Un compilatore deve produrre codice oggetto e deve anche controllare

Dettagli

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare

Dettagli

Laboratorio di Informatica I

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

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione alla programmazione in linguaggio C Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008

Dettagli

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 28 Linguaggi 2 / 28 Linguaggi 3 / 28 Linguaggi di alto livello Si basano su una macchina

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. Determinismo vs Non determinismo. Potere espressivo

Linguaggi Regolari e Linguaggi Liberi. Linguaggi Regolari. Determinismo vs Non determinismo. Potere espressivo e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle Tutti i linguaggi che possono essere

Dettagli

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Corso di Linguaggi e Traduttori Anno Accademico 2017 2018 Prof. Giovanni Pighizzini Progetto d esame Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Variabili

Dettagli

Automi deterministici e non

Automi deterministici e non Automi deterministici e non Negli esempi visti fin ora gli automi avevano sempre relazioni di transizione per cui per un dato elemento del dominio coppia (s, v), dove s è uno stato (sorgente) e v un simbolo,

Dettagli

Linguaggi di Programmazione e Compilatori

Linguaggi di Programmazione e Compilatori Maria Rita Di Berardini Linguaggi di Programmazione e Compilatori Raccolta Esercizi 10 giugno 2009 Università di Camerino Dipartimenento di Matematica e Informatica Indice 1 Analisi Lessicale...........................................

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 11 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 06 Aprile 2009 Riassunto delle puntate

Dettagli

Informatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione

Informatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione Informatica e Laboratorio di Programmazione Automi Alberto Ferrari Alberto Ferrari Informatica e Laboratorio di Programmazione automa o automa: macchina astratta o realizza un certo algoritmo, secondo

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 3 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 09 Marzo 2009 Riassunto delle puntate

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

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Lez. 8 La Programmazione Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1 Dott. Pasquale De Michele Dott. Raffaele Farina Dipartimento di Matematica e Applicazioni Università di Napoli

Dettagli

Unità Didattica 2 I Linguaggi di Programmazione

Unità Didattica 2 I Linguaggi di Programmazione Unità Didattica 2 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

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

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

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

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

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

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

Analizzatori sintattici a discesa ricorsiva

Analizzatori sintattici a discesa ricorsiva Analizzatori sintattici a discesa ricorsiva E uno schema di analizzatore che sfrutta la descrizione grammaticale in EBNF adatto a grammatiche LL(1). Si basa sulla scrittura di procedure ricorsive ricavate

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

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1 ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

Automi a pila. Dipartimento di Elettronica e Informazione Politecnico di Milano. 17 marzo 2017

Automi a pila. Dipartimento di Elettronica e Informazione Politecnico di Milano. 17 marzo 2017 Automi a pila Dipartimento di Elettronica e Informazione Politecnico di Milano 17 marzo 2017 Aumentiamo la potenza di un FSA Descrizione operativa dei limiti Un FSA ha un Organo di Controllo (OC) con memoria

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

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente

Dettagli

Introduzione alla programmazione. Alice Pavarani

Introduzione alla programmazione. Alice Pavarani Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello

Dettagli

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio Messaggio Insieme di sequenze di simboli, le parole,

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

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 calcolatore. Architettura di un calcolatore (Hardware)

Il calcolatore. Architettura di un calcolatore (Hardware) Il calcolatore Prima parlare della programmazione, e' bene fare una brevissima introduzione su come sono strutturati i calcolatori elettronici. I calcolatori elettronici sono stati progettati e costruiti

Dettagli

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Grammatiche Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Esempio dei numeri interi Si consideri il linguaggio

Dettagli

Introduzione al C. InformaticaB. Daniele Loiacono

Introduzione al C. InformaticaB. Daniele Loiacono Introduzione al C InformaticaB Facciamo un passo indietro Compilare o Interpretare? q Come rendo comprensibili al calcolatore i programmi scritti in un linguaggio di programmazione (ad es. C, C++, Java)?

Dettagli

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2003/04 Elementi di programmazione Stefano Ferrari Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Stefano Ferrari Università

Dettagli

Linguaggi. Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi:

Linguaggi. Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi: Linguaggi Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi: Sintassi: forma delle frasi, correttezza sintattica Semantica: significato delle frasi,

Dettagli

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3 Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Automi e Linguaggi Formali Espressioni regolari A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Espressioni regolari Un FA (NFA o DFA) e un metodo per costruire una macchina che riconosce linguaggi

Dettagli

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2008/09 Elementi di programmazione Stefano Ferrari UNIVERSITÀ DEGLI STUDI DI MILANO DIPARTIMENTO DI TECNOLOGIE DELL INFORMAZIONE Stefano Ferrari Università

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

Assegnazione di una variabile

Assegnazione di una variabile Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile

Dettagli

I linguaggi di programmazione

I linguaggi di programmazione I linguaggi di programmazione sono stati introdotti per facilitare ai programmatori il compito di scrittura dei programmi Sono linguaggi simbolici, in continua evoluzione Sono definiti da un insieme di

Dettagli