Trattamento degli errori



Documenti analoghi
Analizzatore lessicale o scanner

Introduzione alla programmazione in C

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Funzioni in C. Violetta Lonati

Approccio stratificato

Linguaggi formali e compilazione

Corso di Informatica

Dispensa YACC: generalità

Ricorsione. Rosario Culmone. - p. 1/13

La Metodologia adottata nel Corso

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Introduzione ai Metodi Formali

Linguaggi e Paradigmi di Programmazione

Agenti Mobili Intelligenti e Sicurezza Informatica Utilizzare un nuovo paradigma applicativo per la realizzazione di sistemi informatici sicuri.

GESTIONE INFORMATICA DEI DATI AZIENDALI

Appunti sulla Macchina di Turing. Macchina di Turing

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Metodologie di programmazione in Fortran 90

La selezione binaria

Arduino: Programmazione

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esempi di algoritmi. Lezione III

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

Ricerca non informata in uno spazio di stati

Corso di Informatica

FONDAMENTI di INFORMATICA L. Mezzalira

Codifica: dal diagramma a blocchi al linguaggio C++

Piano di gestione della qualità

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

MODELLO UNICO DI DOMANDA

INFORMATICA 1 L. Mezzalira

Progettazione : Design Pattern Creazionali

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

OSSERVAZIONI TEORICHE Lezione n. 4

Gli algoritmi: definizioni e proprietà

Analisi e diagramma di Pareto

Soluzione dell esercizio del 2 Febbraio 2004

LINGUAGGI DI PROGRAMMAZIONE

Allocazione dinamica della memoria - riepilogo

I motori di ricerca. Che cosa sono. Stefania Marrara Corso di Sistemi Informativi

Definizione di nuovi tipi in C

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Le Macchine di Turing

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Automazione Industriale (scheduling+mms) scheduling+mms.

REGOLE PER L ESAME (agg.te settembre 2015)

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Le macchine di Turing

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Invio SMS. DM Board ICS Invio SMS

Hub-PA Versione Manuale utente

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

IL SOFTWARE SECONDO LA NORMA UNI EN ISO :2008 (IIA PARTE) 1

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Questionario di gradimento del Museo di Palazzo Grimani Estratto dalla relazione sui dati raccolti giugno 2011 luglio 2012

Gestione del processore e dei processi

Semantica operazionale dei linguaggi di Programmazione

( x) ( x) 0. Equazioni irrazionali

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Linguaggio C - Stringhe

SISTEMA di GESTIONE QUALITÀ Non Conformità ed Efficacia delle Azioni Correttive Preventive

Variabili e tipi di dato

Fasi di creazione di un programma

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Esercizi su. Funzioni

Esercizi Capitolo 6 - Alberi binari di ricerca

Lab 04 Istruzioni, cicli e array"

La Progettazione Concettuale

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

ALGEBRA DELLE PROPOSIZIONI

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Cosa è un foglio elettronico

Manutenzione e manutenzione preventiva: un investimento fondamentale per abbattere i costi e migliorare l efficienza produttiva di macchine e impianti

di Frederic Moyersoen Giocatori: 3-10 Età: a partire dagli 8 anni Durata: circa 30 minuti

Introduzione. Informatica B. Daniele Loiacono

Metodi statistici per le ricerche di mercato

La rappresentazione in bilancio delle rimanenze

Problemi, Algoritmi e Programmi

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Programmi e Oggetti Software

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

B+Trees. Introduzione

(a cura di Francesca Godioli)

12. Evoluzione del Software

Regione Piemonte Portale Rilevazioni Crediti EELL Manuale Utente

Strutturazione logica dei dati: i file

Pronto Esecuzione Attesa Terminazione

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

VISUALIZZAZIONE MESSAGGI CONTROLLI TELEMATICI MOD

ESAMI ONLINE E QUESTIONARI ANVUR (FAQ)

VALUTATE!VALUTATE!VALUTATE!

Transcript:

Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Trattamento degli errori Giacomo PISCITELLI

Trattamento degli errori Comunemente gli errori di programmazione possono essere di varia natura: lessicali, quando derivano da cattiva ortografia di identificatori, parole chiave, operatori o stringhe erroneamente non delimitate da apici; sintattici, quando sono determinati da simboli ; mal posizionati, parentesi tonde o graffe non bilanciate, comparsa di token (case) che non sono regolarmente preceduti da altri token (switch); semantici, quando sono dovuti a non corrispondenza tra operatori e operandi oppure di numero o di tipo tra parametri; logici, quando sono dovuti a bachi dell algoritmo risolutore o a cattiva conoscenza o uso del linguaggio, con improprio uso di operatori. Politecnico di Bari G. Piscitelli pag. 2 di 17

Trattamento degli errori Un motivo per trattare l argomento dell error recovery assieme all analisi sintattica è che molti errori, qualunque sia la loro causa, appaiono essere di natura sintattica e vengono evidenziati appena l analisi sintattica di una frase non può procedere. Anche se pochi linguaggi vengono ideati tenendo conto dei possibili errori e delle possibili reazioni al loro verificarsi, la precisione dei metodi d analisi dei linguaggi di programmazione permette di rivelare gli errori sintattici con notevole efficienza. Diversi metodi di parsing, quali LL e LR, rilevano gli errori quasi immediatamente, non appena il flusso di token dallo scanner non è più congruente con la grammatica. Più precisamente i parser hanno solitamente la proprietà viable prefix : sono in grado, cioè, di rilevare un errore non appena si presenta nell input un prefisso non valido al fine di costruire una corretta stringa del linguaggio. Un parser deve essere in grado di scoprire, diagnosticare gli errori in maniera efficiente (ed efficace ai fini di correzione), e di riprendere l analisi e scoprire nuovi errori. Scoperta degli errori Diagnosi dell errore in termini chiari e accurati, preferibilmente con indicazione del numero di linea contenente l errore e di un puntatore alla posizione nella linea Recupero e rapida ripresa del processo di analisi, con minimo processing overhead Politecnico di Bari G. Piscitelli pag. 3 di 17

Strategie di riparazione Good error handling is not easy to achieve Dopo aver rivelato un errore, come fare a recuperare e riprendere l analisi? Sebbene nessuna strategia si sia rivelata accettabile in generale, un certo numero di metodi si sono dimostrati di buona applicabilità. L approccio più semplice è quello di evidenziare un messaggio informativo appena rivelato l errore, senza segnalare ulteriori errori prima di aver ripristinato la capacità del parser di riprendere l analisi; se gli errori si accumulano oltre un certo limite, è meglio rinunciare a segnalare un inutile e incomprensibile valanga di inesattezze. Politecnico di Bari G. Piscitelli pag. 4 di 17

Strategie di riparazione Per quanto attiene l error recovery, le strategie più frequentemente adoperate sono: panic mode: phrase level: scoperto l errore, il parser riprende l analisi in corrispondenza di alcuni token selezionati, detti token sincronizzanti (es.: delimitatori begin end ; che hanno un ruolo chiaro e non ambiguo nel sorgente) scartando alcuni caratteri. Svantaggi: può essere scartato molto input, ma ha il vantaggio della semplicità e di evitare di produrre un loop infinito; scoperto l errore, il parser può apportare correzioni locali sul resto dell input inserendo/ modificando/ cancellando alcuni terminali per poter riprendere l analisi (es.: scambiando, con ;, cancellando o inserendo ; ) Svantaggi: possibili loop infiniti, difficoltà a trattare situazioni in cui l errore è avvenuto prima del punto di rivelazione; error productions: viene fatto uso di produzioni che estendono la grammatica per generare gli errori più comuni. Metodo efficiente per la diagnostica. global correction: si cerca di calcolare la migliore correzione possibile alla derivazione errata (minimo costo di interventi per inserzioni/cancellazioni/). Metodo d interesse teorico ma poco usato in pratica, se non per attuare strategia phrase level. Politecnico di Bari G. Piscitelli pag. 5 di 17

Strategie di riparazione Not all are supported by all parser generators Politecnico di Bari G. Piscitelli pag. 6 di 17

Error Recovery: Panic Mode Strategie di riparazione Politecnico di Bari G. Piscitelli pag. 7 di 17

Syntax Error Recovery: Error Productions Strategie di riparazione Politecnico di Bari G. Piscitelli pag. 8 di 17

Error Recovery: Local and Global Correction Strategie di riparazione Politecnico di Bari G. Piscitelli pag. 9 di 17

Analisi ascendente Riparazione locale Produzione di errori Analisi discendente Albero connesso Predecessori e successori Sincrotriple Trattamento degli errori Attenzione L analizzatore sintattico può accorgersi dell errore con grande ritardo. Infatti l errore può produrre un sintomo solo quando il prefisso analizzato non è più completabile in modo da derivare una frase sintatticamente corretta del linguaggio. Esempio L = ab*aa cb*cc Data la frase ab n cc Primo errore scoperto dopo ab n Correzione a distanza minima Politecnico di Bari G. Piscitelli pag. 10 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Gestione degli errori in parser predittivi Un errore può verificarsi in un parser predittivo (LL(1))» Se il simbolo terminale in cima alla pila non corrisponde con il simbolo di ingresso» Se il simbolo in cima alla pila è un simbolo non terminale A, e il simbolo di ingresso è a, e M[A,a] è vuoto. Cosa deve fare il parser quando si verifica un errore? Il parser dovrebbe:» essere capace di fornire un messaggio di errore (più veritiero possibile).» recuperare l errore ed essere capace di continuare il parsing della stringa d ingresso. Politecnico di Bari G. Piscitelli pag. 11 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Scoperto un errore Metodo dell albero connesso» cerca una ripresa ipotizzando la mancanza di una sottostringa nella pila.» se fallisce tenta una correzione saltando uno o più caratteri fino a quando l analisi può riprendere. void errore { do { do { if (la configurazione è valida) { stampa dignostico return} scarta il simbolo in cima alla pila } while (pila non è vuota) ripristina la pila avanza la testina di lettura } while la stringa è terminata } Politecnico di Bari G. Piscitelli pag. 12 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Scelta dei token di sincronizzazione Definire per ogni non terminale la sincrotripla: (marca di apertura, non terminale, marca di chiusura) 1) Scartare tutti i caratteri fino a quando si trova un simbolo, specificatamente un simbolo finale di una stringa derivabile da A 2) Se c è specificatamente il carattere iniziale di una stringa Scelta delle sincrotriple» Marca di apertura First (A)» Marca di chiusura Follow(A) Politecnico di Bari G. Piscitelli pag. 13 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Scelta dei token di sincronizzazione Tecniche panic mode per la scelta dei token di sincronizzazione: Per i non terminali A: FOLLOW(A) - si scartano tutti i terminali fino a trovarne uno in FOLLOW(A), quindi si fa pop(a) E possibile considerare altri simboli, che terminano il costrutto corrente (es. ; alla fine di uno statement di assegnazione). Altri esempi: per le espressioni le keyword delle istruzioni (if <expr> then ), per le istruzioni i blocchi, ecc. Politecnico di Bari G. Piscitelli pag. 14 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Analisi LR -Trattamento degli errori panic mode Tecnica panic mode : isolare la frase che contiene l errore e riprendere l analisi non appena possibile. Quando scopre un errore l automa percorre lo stack verso il basso fino a un non terminale sullo stack per cui goto[a,a]=s; pone s sullo stack e continua l analisi. Se si scorre tutta la pila, si passa al prossimo carattere di input, e così via La scelta dei simboli può essere fatta in modo da isolare il tipo di frase (es. ; per le espressioni) Politecnico di Bari G. Piscitelli pag. 15 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Analisi LR -Trattamento degli errori phrase level Tecnica phrase level : cercare di ripristinare l analisi apportando correzioni locali alla frase errata. Quando scopre un errore su un carattere a l automa cerca di inserire un carattere b per cui è definita la goto : la riparazione è accettata se l analisi può riprendere da b, altrimenti si ripristina la pila iniziale. La tabella di parse action[a,a] può contenere esplicitamente il riferimento ad una funzione di gestione errore adatta al contesto. Politecnico di Bari G. Piscitelli pag. 16 di 17

CdL Magistrale Ing. Informatica Linguaggi Formali e Compilatori Analisi sintattica (parser) Trattamento degli errori passato e presente Politecnico di Bari G. Piscitelli pag. 17 di 17