Per l’analisi lessicale vogliamo cercare di ricordare le parole legali all'interno di questo linguaggio e questo è fatto con i linguaggi regolari.

Introduzione a analizzatori lessicali

Token

Struttura del token è fatto da due parti

  • Identificatore della classe del token
  • Identificatore del valore del token
  • Pattern e lessema ci sono direi boh

Pattern e Lessema

I pattern sono una descrizione generale della forma dei valori di una classe di token.

Lessema è una istanza di un particolare pattern

  • Esempio di scan

    Untitled 1

Di solito viene storato come puntatore alla tabella dei simboli

Espressioni regolari

Definizione

  • Slide definizione espressioni regolari

    Untitled 2

  • Disambiguazione della grammatica

    Untitled 3

  • Esempio espressione regolare

    Untitled 4

Linguaggio generato da regexp

Per capire questa parte è importante avere in mente le operazioni sui linguaggio definiti in Descrizione linguaggio

  • Slide

    Untitled 5

Linguaggio regolare

  • Definizione linguaggio regolare

    Untitled 6

Ogni linguaggio finito è un linguaggio regolare questo è una proposizione che lega fortemente i linguaggi (utilizzati poi veramente per l'implementazione) (basta fare l’unione!)

  • Esempio linguaggio finito generato da linguaggio regolare

    Untitled 7

  • Esempi di espressioni regolari infiniti

    Untitled 8

Oltre ai classici operatori definiti in precedena per questa sezione aggiungiamo

Ripetizione-positiva, Possibilità, Elenco

Definizioni regolari

Le definizioni regolari ci aiutano a creare una struttura del token di cui dobbiamo fare lo scanning.

In pratica andiamo a creare delle definizioni che rendono più facile la descrizione di un pattern con regexp.

  • Slide

    Untitled 9

  • Esempi

    Untitled 10

Equivalenza regexp

Untitled 11

  • Esempi di equivalenze

    Untitled 12

Queste equivalenze non sono sempre facili da dimostrare

Automi

In questa parte si fa una descrizione molto generale di cosa siano gli automi.

Caratteristiche (3)

  • Slide

    Untitled 13

  1. Memoria finita (dato da un numero di stati)
  2. Input una stringa da riconoscere
  3. Output è solamente un singolo bit (si oppure no)

Descrizione e funzionamento

  • Slide

    Untitled 14

Descrizione

  • Testina sul primo carattere in input.
  • Su stato q0

Funzionamento

Il funzionamento dell'automa è molto semplice, esegue un semplice algoritmo:

  1. Leggi il carattere attuale, se esiste una transizione etichettata con quanto letto spostati secondo la regola di quel carattere.
  2. Dopo aver finito di leggere la stringa, se è in uno stato buono restituisci 1, altrimenti 0
  3. Se è bloccato in uno stato ritorna 0

Diagrammi di transizione

I diagrammi di transizione sono utili per definire in modo grafico cosa fa l'espressione regolare

  • Slide

    Untitled 15

Automi finiti non deterministici (NFA)

Definizione (5)

  • Slide

    Untitled 16

Possiamo definire gli automi non deterministici come una quintupla di

  1. Albeto dei simboli di input
  2. Stati possibili
  3. Stato iniziale
  4. Stati finali (accettati)
  5. Funzioni di transizione, che ha come codominio l'insieme delle parti di Q

Alla fine, per scopi didattici si utilizza sempre il diagramma di transizione. La differenza principale con gli automi a stati finiti è che posso avere lo stesso label di transizione per singolo stato

Caratteristiche (2)

  1. Facili da realizzare (esiste quasi una bigezione credo fra NDA ed espressione regolare)
  2. Inefficienti (backtracking, e fallibile), principalmente causato dal suo non determinismo

Stato finale accettato

  • Slide

    Untitled 17

Questo è una slide molto importante per definire il concetto di stringa accettata/riconosciuta. Praticamente posso affermare che una stringa è riconosciuto da questo automa finito non-deterinistico se anche un solo cammino da q0 a un qualunque stato accettato.

Oltre questo voglio andare a definire in modo formale il concetto di mossa, o cammino in un diagramma di rappresentazione per un automa finito.

  • Descrizione istantanea, mossa, cammino, stringa accettata

    Untitled 18

Indico che uno stato è raggiungibile da uno stato , con il simbolo , ossia , questo è possibile solo se sto leggendo una stringa che ha come relazione una stringa buona, ma questo pezzo è più chiaro negli appunti quindi ti invito di leggere dalì con la rappresentazione logica classica.

La chiusura riflessiva e transitiva di questo concetto di mossa è indicata con , N è il nome di questo automa, dovrebbe essere ancora sopra. x

Linguaggio riconosciuto da NDA e equivalenza

  • Slide

    Untitled 19

La parte di sopra è la definizione di un linguaggio riconosciuto da un automa, è un modo molto compatto per esprire l'esistenza di un cammino come sopra.

Inoltre possiamo definire il concetto di equivalenza fra NDA che è quando il linguaggio riconosciuto è esattamente lo stesso.

Definizione di linguaggio riconosciuto con e-closure

  • Linguaggio riconosciuto, scritto in modo più elegante, con epsilon closure

    Untitled 20

Con la definizione di delta cappuccio possiamo definire che un linguaggio in questo modo:

NFA da espressioni regolari (!!!) (duplicato)

Questo è un teorema molto importante per rappresentare una sorta di equivalenza fra linguaggi regolari e NFA.

  • Enunciato

    Untitled 21

  • Hint dimostrazione

    Induzione strutturale sulla sintassi BNF delle espressioni regolari, andremo a dimostrare che posso comporre NFA che alla fine riescono a riconoscere il linguaggio regolare

  • Consigli di studio

    Impararsi i metodi di conversione di ogni parte della sintassi in NFA, poi li componi come dei lego e sei apposto

  • Dimostrazione

    Untitled 22

    Untitled 23

    Untitled 24

    Untitled 25

Automi finiti deterministici (DFA)

Definizione

  • Slide

    Untitled 26

  • Differenze rispetto NDA

    Untitled 27

Principalmente la definizione è uguale agli automi non deterministici l’unica cosa che cambia è il delta che ora è definito come

Non c’è più l’insieme delle parti, magari dopo vediamo come questi automi sono equivalenti, ma c’è una esplosione esponenziale al momento di conversione da deterministico a non deterministico.

Algoritmo creazione DFA da NFA

Untitled 28

  • L’algoritmo di creazione

    Untitled 29

  • Esempio di utilizzo dell'algoritmo (lezione 6)

    Untitled 30

    Untitled 31

    Untitled 32

con l’insieme degli stati finali della NFA.

DFA equivalente a NFA (non chiede)

  • Dimostrazione both, e osservazioni in modo informale

    • Slide →

      Untitled 33

    Questa proposizione si può vedere dalla definizione

    • Slide ←

      Untitled 34

C'è veramente in questo passo una esplosione esponenziale perché il numero degli stati diventa esponenzialmente tanto.

Untitled 35

  • Dimostrazione, induzione, molto formale.

    Untitled 36

    Untitled 37

    Untitled 38

  • Esempio di conversione

    Untitled 39

    Untitled 40

epsilon-closure

  • Slide

    Untitled 41

  • Algoritmo per epsilon-closure

    Untitled 42

Questo concetto di chiusura Epsilon ci racchiude il concetto degli stati raggiungibili in un NFA senza leggere nessun input.