Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Похожие документы
Linguaggi e Ambienti di Programmazione

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

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

Quiz sui linguaggi regolari

Linguaggi, Traduttori e le Basi della Programmazione

Esercizi di Fondamenti di Informatica per la sicurezza. Stefano Ferrari

I Linguaggi di Programmazione

Grammatiche Parse trees Lezione del 17/10/2012

Unità Didattica 2 I Linguaggi di Programmazione

Linguaggi di Programmazione

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

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

LINGUAGGI DI ALTO LIVELLO

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

Elementi di programmazione

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

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

Fasi di un Compilatore

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Anno 1. Teoria degli insiemi: definizioni principali

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

Linguaggi di Programmazione

Linguaggi di programmazione

CONCETTI FONDAMENTALI

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

Definire tramite una grammatica ad attributi il

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm

Analizzatori Lessicali con JLex. Giuseppe Morelli

Introduzione alla programmazione strutturata

Introduzione alla programmazione

Analizzatore Lessicale Parte I Scanner

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

Espressività e limitazioni delle grammatiche regolari

Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis

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

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa.

Informatica e Comunicazione Digitale Crediti formativi 9. No, ma la frequenza è fortemente consigliata Lingua di erogazione

Alcune Tracce dei Precedenti Esami del Dottorato di Siena in Logica Matematica ed Informatica Teorica

Fondamenti di Informatica T-1

Le basi del linguaggio Java

Il linguaggio di programmazione Python

Automi Automi finiti: macchine a stati su sistemi di transizioni finiti Modellare con TS e specificare con automi: si usa lo stesso tipo di

Linguaggi Regolari e Linguaggi Liberi

Logica proposizionale

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

Logica proposizionale

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Cosa si intende con stato

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

Introduzione alla programmazione in C++

Istruzioni Condizionali

Programmazione Procedurale in Linguaggio C++

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

Fondamenti d Informatica: Le Macchine di Turing. Barbara Re, Phd

Linguaggi Regolari e Linguaggi Liberi

Automi e Linguaggi Formali

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Problema: calcolare il massimo tra K numeri

Analisi lessicale (scanner)

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

AUTOMA A STATI FINITI

Indice. Prefazione. 3 Oggetti e Java 53

Definizione di Grammatica

Unità di apprendimento 6. Dal problema al programma

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

Le aree dell informatica

ALGORITMI: PROPRIETÀ FONDAMENTALI

Транскрипт:

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 vista matematico } Insieme di stringhe su un dato alfabeto } Da un punto di vista informatico } E interessante osservare linguaggi, generalmente infiniti, le cui stringhe sono caratterizzate da qualche particolare proprietà } Esempio: Il linguaggio C è costituito da tutte le stringhe che soddisfano la proprietà di poter essere analizzate da un compilatore C senza che venga rilevato alcun errore sintattico Un compilatore, in informatica, è un programma che traduce una serie di istruzioni scritte in un determinato linguaggio di programmazione (codice sorgente) in istruzioni di un altro linguaggio (codice oggetto). Questo processo di traduzione si chiama compilazione. 3

Fasi tipiche della compilazione } Analisi lessicale } Attraverso un analizzatore lessicale il compilatore divide il codice sorgente in tanti pezzetti chiamati token. I token sono gli elementi minimi (non ulteriormente divisibili) di un linguaggio, ad esempio parole chiave (for, while), nomi di variabili (pippo), operatori (+, -, «) } Analisi sintattica } L'analisi sintattica prende in ingresso la sequenza di token generata nella fase precedente ed esegue il controllo sintattico. Il controllo sintattico è effettuato attraverso una grammatica. 4 } Analisi semantica } L'analisi semantica si occupa di controllare il significato delle istruzioni presenti nel codice in ingresso. Controlli tipici di questa fase sono il type checking, ovvero il controllo di tipo, controllare che gli identificatori siano stati dichiarati prima di essere usati e così via. Come supporto a questa fase viene creata una tabella dei simboli che contiene informazioni su tutti gli elementi simbolici incontrati quali nome, scope, tipo (se presente) etc.

Studio formale dei linguaggi: applicazioni } Studio delle proprietà sintattiche dei linguaggi } Studio dei metodi di definizione della sintassi di un linguaggio di programmazione } Studio dei metodi di verifica che un programma soddisfi le proprietà sintattiche volute } Studio dei metodi di traduzione da un linguaggio all altro } Generazione e riconoscimento di linguaggi } Stringhe di caratteri aventi struttura particolare vengono frequentemente utilizzate per rappresentare vari aspetti dell elaborazione dei dati (es. sequenze di operazioni, sequenze di passi, protocolli di comunicazione, sequenze di interazioni sviluppate con l interfaccia utente) } Nella formulazione dei problemi trattati con metodi algoritmici ci si riconduce frequentemente al problema standard di decidere l appartenenza di una stringa ad un dato linguaggio } Esempio - Riconoscere il linguaggio {a n b n n 0} 5

Strumenti per definire un linguaggio } Espressioni regolari } Permettono di definire linguaggi con una struttura semplice e non sono idonee a rappresentare linguaggi più complessi come quelli di programmazione } Approccio generativo } Si utilizzano le grammatiche formali che consentono di costruire le stringhe di un linguaggio tramite un insieme prefissato di regole di produzione } Approccio riconoscitivo } Consiste nell utilizzare macchine astratte, dette automi riconoscitivi, che definiscono algoritmi di riconoscimento dei linguaggi stessi, vale a dire algoritmi che per un dato linguaggio L A* stabiliscono se una stringa α A* appartiene a L o meno 6

Alcune espressioni comunemente utilizzate } indirizzo email } url http } codice fiscale } Indirizzo IP 7

Espressione regolari } Le espressioni regolari consentono di descrivere tutti i linguaggi appartenenti ad un importante classe con una struttura abbastanza semplice Def: Dato un alfabeto A e dato l insieme di simboli {+,, *, Ø} si definisce espressione regolare sull alfabeto A una stringa r (A U {+,, *, Ø}) + tale che valga le seguenti condizioni 1. r = Ø 2. r = a che è un evento (o azione atomica) dove a A 3. r = (s + t), oppure r = (s t), oppure r = s*, dove s e t sono espressioni regolari sull alfabeto A 8

Espressioni Regolari e linguaggi } Le espressioni regolari consentono di rappresentare linguaggi mediante un opportuna interpretazione dei simboli che le compongono Espressioni Regolari 9 Linguaggi Ø Insieme vuoto Linguaggio che non contiene alcuna stringa a Evento o azione atomica {a} (s + t) scelta L(s) + L(t) (s t) Sequenza (a volte si omette il simbolo) s* Sequenza di n elementi con n maggiore o uguale a zero Sono valide le concatenazioni L(s) L(t) (L(s))*

Semantica (a + b)* (a*+ b* )* } Si tratta della stessa espressione? } Qual è il significato? } Un espressione regolare E denota un linguaggio L(E), dove L rappresenta una funzione da stringhe a linguaggi, pertanto: L(Ø) = Ø L{a} = {a} L(s + t) = L(s) + L(t) L(s t) = L(s) L(t) L (s*) = (L(s))* SEMANTICA (data per induzione strutturale) 10

Costruzione di espressioni regolari } Esempio: Si faccia riferimento all espressione regolare per stringhe che constano di 0 e 1 alternati } Istanze } 0101 } 1010 } 01010 } 10101 } 0 e 1 rappresentano i linguaggi L( 0 ) = { 0 }, L( 1)= { 1} } 0 1 rappresenta il linguaggio L(0 1) = { 0 1} } (0 1 )* rappresenta il linguaggio L((0 1)*) = {0 1 0 1 0 1 } } (1 0)* rappresenta il linguaggio L((1 0)*) = {1 0 1 0 1 0 } (0 1)* + (1 0)*? 11

Costruzione di espressioni regolari } Regole di precedenza tra gli operatori: * precede precede + Ex: a + b* c è equivalente a a + (( b )*) (c )) Ex: (hot + cold)(apple + blueberry + cherry)(pie + tart) rappresenta le dodici possibili stringhe date da: } hot apple pie } hot apple tart }.. } cold cherry pie } cold cherry tart 12

Costruzione di Espressioni Regolari } Stringhe di a e di b (a + b)* } Stringhe con almeno due a (a + b)* a a (a + b)* } Stringhe con almeno due b (a + b)* b b (a + b)* } Stringhe contenenti le sottostringhe aa oppure bb (a + b)* a a (a + b)* + (a + b)* b b (a + b)* 13

Esercizi: espressioni comunemente utilizzate } indirizzo email } url http } codice fiscale } Indirizzo IP 14

Esercizi Espressioni Regolari 1. Scrivere una espressione regolare per stringhe binarie che descriva l insieme {0, 11, 101}. 2. Scrivere una espressione regolare per stringhe binarie che descriva l insieme delle stringhe composte solo da simboli 0. 3. Scrivere una espressione regolare per tutte stringhe binarie. 4. Scrivere una espressione regolare per tutte stringhe binarie che cominciano e finiscono per 1. 5. Scrivere una espressione regolare per le stringhe binarie che contengono almeno tre 1 consecutivi. 6. Scrivere una espressione regolare per le stringhe binarie che contengono almeno tre 1. 7. Scrivere una espressione regolare per le stringhe binarie di lunghezza dispari. 8. Scrivere una espressione regolare per stringhe di testo che descriva le date in formato GG/MM/AAAA. 9. Scrivere una espressione regolare per stringhe di testo che descriva i numeri di telefono. 15

16 Questions?