Classi di modelli. RegExp 1

Documenti analoghi
Lesson #4. Espressioni Regolari. Roberto De Virgilio

Espressioni regolari in UNIX p.1/19

Sistemi Operativi, Secondo Modulo, Canale M Z Riassunto della lezione del 07/03/2016

Introduzione alle espressioni regolari

Modulo 2 Appendice 1 Espressioni Regolari

Gestione avanzata dei file

Sistemi Operativi, Secondo Modulo, Canale M Z Riassunto della lezione del 13/03/2017

Sommario. Espressioni regolari. Equivalenza tra espressioni regolari e DFA. Esercizi problemi di decisione

Sistemi Operativi, Secondo Modulo, Canale A L Riassunto della lezione del 19/03/2018

Fondamenti di Programmazione Recupero Primo Parziale 30 Gennaio 2008 Traccia A

L ambiente UNIX/Linux. I filtri Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

L utility Unix awk [Aho-Weinberger-Kernighan]

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

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

Realizzare un programma

L ambiente UNIX/Linux. Espressioni regolari e comando find Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

LINGUAGGI FORMALI. Introduzione

Espressioni regolari. Espressioni regolari

Linguistica Computazionale

Tutorato di Fondamenti di Informatica TUTOR: DAVIDE GHIANI, GIULIA ORRU

Grammatiche Parse trees Lezione del 17/10/2012

Linguistica Computazionale

Fondamenti teorici e programmazione

Fondamenti di Programmazione: AUTOMI E LINGUAGGI FORMALI Corso di Laurea in MATEMATICA a.a. 2018/2019

Definire tramite una grammatica ad attributi il

Ulteriori comandi sui file

Espressioni Regolari

Espansione della shell 1) Espansione delle parentesi graffe

Analizzatore lessicale

L ambiente UNIX/Linux Espressioni regolari e comando find

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

LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese

Espressioni regolari

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

Espressioni Regolari. Giancarlo Massidda

PROGRAMMAZIONE III Appello del 7/03/2003

NFA per riconoscere numeri decimali

Linguaggi di Programmazione e Compilatori

Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: Semantica spesso data in modo informale

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

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

LINGUAGGI DI ALTO LIVELLO

Semantica Operazionale del linguaggio imperativo IMP

Espressioni regolari in Javascript (RegExp) Le espressioni regolari. Un po di storia. Antonio Lioy - Politecnico di Torino (2009) I-1

Le basi del linguaggio Java

Introduzione ai Linguaggi Formali

Python. Loriano Storchi.

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

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO

L utility Unix awk [Aho-Weinberger-Kernighan]

Espressioni regolari descrivono i linguaggi regolari. Un FA (NFA o DFA) è un metodo per costruire una macchina che riconosce linguaggi regolari.

Modelli per i linguaggi

Quiz sui linguaggi regolari

Linguaggi, grammatiche, espressioni regolari

Logica booleana, Costrutto IF

Il filesystem di Unix/Linux (I)

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

Programmazione. 23 novembre 2016

Corso di Laurea Magistrale in Ingegneria Informatica A.A Linguaggi Formali e Compilatori. I linguaggi formali. Giacomo PISCITELLI

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2013/14

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

Introduzione al corso

Linguaggi formali e compilazione

Linguaggi e Traduttori: Analisi lessicale

Linguaggi Regolari e Linguaggi Liberi

Linguaggi Regolari e Linguaggi Liberi. Linguaggi Regolari. Determinismo vs Non determinismo. Potere espressivo

Linguaggi formali e compilazione

9 Calcolo dei sequenti LC p

Assegnazione di una variabile

Corso di Linguaggi di Programmazione

non è lineare destro. (PUNTI 15)

Esempio stringhe palindrome 1

LINGUAGGI DI ALTO LIVELLO

AUTOMI A STATI FINITI

Nozioni Preliminari e Terminologia. Alfabeti Stringhe Linguaggi

Automi e Linguaggi Formali

Espressioni regolari descrivono i linguaggi regolari. Un FA (NFA o DFA) è un metodo per costruire una macchina che riconosce linguaggi regolari.

Manipolazioni elementari di flussi di testo strutturati

Esercizi in Laboratorio

Il linguaggio Python

Linguaggi regolari e automi a stati finiti

Laboratorio di Python

Linguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi

ESEMPI DI TRIPLE DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

Corso di Linguaggi di Programmazione

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm

Corso di Linguaggi di Programmazione

Corso sul linguaggio C

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1

Primi passi con JFlex

Linguaggi, grammatiche, espressioni regolari

Esercizi di Fondamenti di Informatica per la sicurezza. Stefano Ferrari

Struttura di un linguaggio

Logica per la Programmazione

Transcript:

RegExp 1 Classi di modelli I linguaggi possono essere rappresentati mediante Insiemi Pattern Espressioni regolari Modelli operazionali Automi Reti di Petri Diagrammi di stato Modelli generativi Grammatiche Modelli dichiarativi Logica Trasduttori

RegExp 2 Pattern Un sistema di pattern è una tripla (A, V, p) dove A è un alfabeto V è un insieme di variabili tale che A V= p è una stringa su A V detta pattern Il linguaggio generato dal sistema di pattern consiste di tutte le stringhe su A ottenute da p sostituendo ogni variabile in p con una stringa su A Esempio: ({0,1}, {v 1,v 2 },v 1 v 1 0v 2 ) Stringhe che iniziano con 0 (v 1 =ε) Stringhe che iniziano con una stringa su A ripetuta due volte, seguita da uno 0 e da qualunque stringa (inclusa ε)

RegExp 3 Espressioni regolari (RE): sintassi e semantica Definizione di RE su un alfabeto Σ: è una RE (che denota il linguaggio ) ε è una a RE (che denota il linguaggio {ε}) Ogni simbolo di Σ è una RE (che denota {a}, a Σ) Siano r e s due RE, allora: (r.s) è una RE (che denota la concatenazione dei linguaggi denotati da r e s) Per semplicità, il punto è spesso omesso (r s) è una RE (che denota l unione dei linguaggi denotati da r e s) Talvolta indicata r + s o r s (r)* è una RE (che denota il più piccolo soprainsieme del linguaggio denotato da r che contiene ε e chiuso rispetto a.) Nient altro è una RE

RegExp 4 Esempio ((0.(0 1)*) ((0 1)*.0)) è un espressione regolare sull alfabeto {0,1} Stringhe che iniziano con 0 Stringhe che finiscono con 0

RegExp 5 RE e pattern Le espressioni regolari seguono la stessa idea dei sistemi di pattern Ma hanno diverso potere espressivo Espressioni regolari Sistemi di pattern {xx x {0,1}*} non è un linguaggio regolare Sistema di pattern corrispondente: {{0,1}, {x}, xx} Il linguaggio denotato da 0*1* non è un linguaggio esprimibile mediante un sistema di pattern

RegExp 6 RE e grammatiche regolari Le RE corrispondono esattamente ai linguaggi regolari (stesso potere di RG e FSA) Facile da mostrare: Ogni linguaggio denotato da una RE è regolare: I casi base sono tutti linguaggi regolari I linguaggi regolari sono chiusi rispetto a concatenazione, *, unione Data una RG G, trovare una RE r tale che L(G)=L(r)

Dimostrazione informale Si consideri la grammatica S aa, A bb, A cb, B aa, B ε, S ac, C cc, C ε Alcune derivazioni (informali): A partire da S aa: a(b c) a(b c)a(b c)... a(b c)(a(b c))* Scritto anche come (a(b c)) + A partire da S ac: a ac acc accc... a(c)* In generale: (a(b c)(a(b c))* a(c)*) RegExp 7

RegExp 8 RE in pratica Le RE sono molto comuni nella pratica: Analizzatori lessicali (es. lex) Funzioni avanzate di ricerca/sostituzione nei text editor e in strumenti di sistema (emacs, vi, grep, awk...) Linguaggi di scripting (Perl, Python, Ruby,...) C è uno standard POSIX (API standard API per unix/linux) anche per le RE Sintatticamente, le RE in "pratica" sono un po diverse da quanto mostrato prima...

RegExp 9 RE POSIX Caratteri meta: ( ). [ ] ^ \ $ * +? { } Attenzione: il. è usato per indicare qualunque carattere, non per concatenare! [α] denota un singolo carattere α (es. [abc] denota {a,b,c}. Si può anche scrivere [a-z] per indicare qualunque lettera minuscola) [^α]: negazione: qualunque simbolo non in α (es. [^a-z] è qualunque carattere che non sia una lettera minuscola)

RegExp 10 RE POSIX RE (cont.) ^ e $ denotano ε rispettivamente all inizio e alla fine di una riga di testo *,+,,(,) sono come al solito \ funge da "escape" (per esempio, \$ denota il carattere $)

RegExp 11 RE POSIX Esempio 1 >> grep -E "^((Two) (In))" grep.txt In addition, two variant programs egrep and fgrep are available. Egrep is Two regular expressions may be concatenated; the resulting regular Two regular expressions may be joined by the infix operator ; the In basic regular expressions the metacharacters?, +, {,, (, and ) lose In egrep the metacharacter { loses its special meaning; instead use \{. (tutte le righe che iniziano con Two o In )

RegExp 12 RE POSIX Esempio 2 >> grep -E "^[A-Z]+$" grep.txt SYNOPSIS DESCRIPTION DIAGNOSTICS BUGS (tutte le righe che consistono di maiuscole)

RegExp 13 RE POSIX Esempio 3 >> grep -E "^[^a-za-z].+\.$" grep.txt -S Search subdirectories. [:print:], [:punct:], [:space:], [:upper:], and [:xdigit:]. [[:alnum:]] and \W is a synonym for [^[:alnum]].? The preceding item is optional and matched at most once. * The preceding item will be matched zero or more times. + The preceding item will be matched one or more times. { n } The preceding item is matched exactly n times. (tutte le righe che iniziano con un carattere che non è una lettera e finiscono con un punto)

Altri operatori α? α{n} α{n,m} α is optional α n α n α n+1 α n+2.. α m Esempio >> grep -E "[a-za-z]{15}" grep.txt grep [-[[AB] ]<num>] [-[CEFGLSVbchilnqsvwx?]] [-[ef]] <expr> [<files...>] availablefunctionality using either syntax. In other implementations, (tutte le righe che contengono una stringa di almeno 15 lettere) RegExp 14

RegExp 15 Caso pratico Traslare i tempi dei sottotitoli nei file in formato.srt In Python Esempio: 00:00:51,444 --> 00:00:57,515 <i>the Military Department has decided to assign more troops in order to crush the resistance.</i>

RegExp 16 Caso pratico def srtshift (fname, shift) : out = fname+"_out" x = open(fname,'r') y = open(out,'w') for t in x : time = gettime(t) if time : x0 = tostr(sub(time[0],shift)) x1 = tostr(sub(time[1],shift)) y.write(x0+" --> "+x1+'\n') else : y.write(t) x.close() y.close() srtshift( mymovie.srt", [1,25,37,00])

RegExp 17 Caso pratico def gettime(s) : retime = re.compile(r""" ^ \s* (?P<h1> [0-9][0-9]): (?P<m1> [0-9][0-9]): (?P<s1> [0-9][0-9]), (?P<z1> [0-9][0-9][0-9]) \s* --> \s* (?P<h2> [0-9][0-9]): (?P<m2> [0-9][0-9]): (?P<s2> [0-9][0-9]), (?P<z2> [0-9][0-9][0-9]) \s* $ """, re.verbose) m = retime.match(s) if m : return [int(m.group('h1')),int(m.group('m1')), \ int(m.group('s1')),int(m.group('z1'))], \ [int(m.group('h2')),int(m.group('m2')), \ int(m.group('s2')),int(m.group('z2'))] re.verbose ignora gli spazi nella RE, ma ci serve \s (qualunque tipo di spazio = [ \t\n\r\f\v])?p<name> è usato per dare un nome a un blocco (per potercisi riferire)

RegExp 18 Caso pratico def sub(t1,t2) : x = t1[:] if x[2]-t2[2] < 0 : x[2] += 60 x[1] -= 1 x[2] -= t2[2] if x[1]-t2[1] < 0: x[1] += 60 x[0] -= 1 x[1] -= t2[1] if x[0]-t2[0] < 0 : x[0] = 0 else : x[0] -= t2[0] return x def tostr(t) : def prdigit(n,ndigits) : h = str(n) while len(h) < ndigits: h = '0'+h return h return prdigit(t[0],2)+':'+prdigit(t[1],2)+':' \ +prdigit(t[2],2)+','+prdigit(t[3],3)