Linguaggi ed espressioni regolari

In questa lezione analizzeremo la famiglia delle espressioni regolari (in inglese regular expression o, in forma abbreviata, regexp, regex o RE) di cui si invita a leggere come introduzione la relativa pagina di Wikipedia.

lezione
lezione
Linguaggi ed espressioni regolari
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Linguaggi formali e automi
Avanzamento Avanzamento: lezione completa al 100%

Definizione

modifica

Formalmente definiamo espressione regolare una stringa   costruita su un alfabeto   e in unione ai seguenti metasimboli:

  •  : insieme vuoto
  •  : unione (notazione alternativa:  )
  •  : concatenazione
  •  : star
  •  : parentesi

Una RE è detta ben formata se si presenta in una delle seguenti forme:

  •  
  •  
  •   o  
  •   o   (notazione alternativa)
  •  

dove   e   sono a loro volta espressioni regolari. Si noti che la precedenza degli operatori è:

  •  
  •  
  •  

Definiamo inoltre altri operatori non essenziali ma frequentemente usati, utilizzando solo le proprietà sopra descritte:

  •  
  •  
  •   (potenza)
  •   con   (ripetizione)
  •  
  •   (intervalli ordinati)

Altri operatori possono essere quelli insiemistici teorici: intersezione, differenza e complemento. Una espressione regolare che contiene questi operatori è detta espressione regolare estesa. Nota: Il potere espressivo di una RE estesa non è maggiore di quello di una RE standard.

Definizione di linguaggio regolare

modifica

Diciamo che un linguaggio è un linguaggio regolare se è denotato da una RE. Formalmente, un linguaggio regolare   è un linguaggio su un alfabeto   che ha una corrispondente RE in accordo con la seguente tabella:

Espressione Linguaggio
   
   
 
 
 
 
 
 
   

Denotiamo con   la famiglia di tutti linguaggi regolari e con   la famiglia di tutti i linguaggi finiti (cioè con cardinalità finita).

Allora possiamo dire che:

 

(intuibile: un linguaggio finito può sempre essere visto come l'unione di un numero finito di stringhe, ognuna delle quali concatenazione di un numero finito di simboli dell'alfabeto)

Derivare il linguaggio dalla RE

modifica

Per derivare il linguaggio dobbiamo definire alcuni concetti supplementari.

Sottoespressione

modifica

Definiamo sottoespressione (in inglese subexpression o SE) una ben parentizzata sottostringa di una RE che si presenta nelle parentesi più esterne.

Chiariamo con un esempio. Sia data la RE:

 

questa RE ha due SE:   e  , mentre   e   NON sono SE di  , ma sono SE di  .

Versione numerata

modifica

Definiamo 'versione numerata di una RE, la RE a cui vengono aggiunti i numeri alle lettere che compongono la RE, in modo da differenziale le lettere uguali. Anche qui chiariamo il concetto con un esempio:

 

la sua versione numerata è:

 

Questa notazione è importante per definire l'ambiguità di un linguaggio (introdotta nelle sezioni successive).

Scelta e derivazione

modifica

Diciamo che una RE è una scelta (in inglese choice) di un'altra RE nei seguenti casi:

  •   è una scelta di  
  •   è una scelta di   e  
  •   è una scelta di  

Diciamo che una SE   deriva da   (scritto come   se:

  •   è una scelta di  ;
  • oppure,   è una scelta di   per ogni  

La derivazione può avvenire più volte allo stesso modo. In questo caso scriviamo:

  •  
    • se  ,  , ...,   con   fisato
  •  
    • se  ,  , ...,   con  
  •  
    • se  ,  , ...,   con  
  •  
  •  
  •   o equivalentemente   o ancora  
  •  
  •   o equivalentemente   o ancora  

Linguaggio definito da un RE

modifica

Il linguaggio definito da una espressione regolare   è:

 

Diciamo che due RE sono equivalenti se definiscono lo stesso linguaggio.

Ambiguità delle RE

modifica

Una stringa di un linguaggio regolare può essere derivato dalla RE in modi differenti, cioè attraverso distinte derivazioni. Diciamo che una RE è ambigua se esiste una stringa derivabile attraverso due distinte derivazioni che non differiscono solo dall'ordine di applicazione.

Esempio:

 

Ambigua, due modi di derivazione di  :

  •  
  •  

Condizione sufficiente affinché una RE sia ambigua, se il linguaggio generato dalla RE in versione numerata include due stringhe che coincidono a meno dei numeri.

Esempio:

 

Genera:

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. ...

Come si vede eliminando i numeri, la stringa 2 coincide con la stringa 7, perciò la RE è ambigua.

Proprietà di chiusura

modifica

«Un insieme è chiuso rispetto a un'operazione se e solo se ogni insieme ottenuto applicando l'operazione ai membri dell'insieme originale, l'insieme ottenuto è contenuto nell'insieme originario»

  è chiuso rispetto alla concatenazione, unione e star (quindi anche per gli altri operatori sopra descritti).

modifica

Esempi pratici - https://www.evemilano.com/come-funzionano-le-espressioni-regolari-regex/

Altri progetti

modifica