• Non ci sono risultati.

Corso di Automi e Linguaggi Formali Linguaggi liberi dal contesto

N/A
N/A
Protected

Academic year: 2022

Condividi "Corso di Automi e Linguaggi Formali Linguaggi liberi dal contesto"

Copied!
21
0
0

Testo completo

(1)

Corso di Automi e Linguaggi Formali

Linguaggi liberi dal contesto

(2)

Limitazioni dei linguaggi regolari

Molti linguaggi non sono regolari Esempio:

        

E il linguaggio naturale? E i linguaggi di programmazione? Puo’ un automa a stati finiti riconoscere programmi validi da

programmi non validi? NO!

Pero’ e’ quello che fa un compilatore

(3)

Grammatiche

Regole per specificare frasi corrette in italiano Una frase e’ un soggetto, seguito da un

verbo, seguito da un complemento oggetto Un soggetto e’ un nome, o un articolo

seguito da un nome

Uso delle regole: per generare frasi corrette Esempio: F S V CO A N V CO (A=

un) (N=cane) (V=mangia) (CO= un osso) un cane mangia un osso

(4)

Da espressioni regolari a grammatiche

Posso usare le espressioni regolari per generare tutte le stringhe del linguaggio

Esempio:   genera  e poi una stringa di



Regole corrispondenti:

  



Per la stringa    :       

       

(5)

Grammatiche libere da contesto

Insieme di regole: grammatica

Grammatica libera da contesto: per applicare una regola non devo guardare cosa

c’e’ intorno ad

Esempio: la posso applicare sia alla stringa     che a      

La regola     la posso applicare solo alla prima stringa:        

Solo un simbolo a sinistra della freccia

(6)

Grammatiche libere da contesto

Quadrupla  



alfabeto (terminali)

insieme (non-terminali)

insieme di regole:  



 

simbolo iniziale Regola: coppia 



, con  e  stringa su  (scriveremo ) Parte sinistra: sempre un non-terminale Parte destra: terminali e/o non-terminali (forma sentenziale)

(7)

Derivazioni

Da posso derivare in un passo  ( ) se

  

e    

     

e 

 in

Da posso derivare  ( ) se esistono

   tale che:

 

e   

  



Derivazione: sequenza di passi

(8)

Non-determinismo

Piu’ regole con la stessa parte sinistra:

e 

Piu’ nonterminali in una forma sentenziale:

  

derivazione: processo non deterministico Linguaggio generato da una grammatica :

        

Tutte le stringhe di terminali derivabili da  Linguaggio libero da contesto se e’ libera da contesto

(9)

Esempio

  

       

   

Esempio di derivazione:

                     

          

Libero da contesto e non regolare

(10)

Esempio

  

      

  

   

Esempio di derivazione:      

                   

   

Libero da contesto e regolare

Tutti i linguaggi regolari sono anche liberi da contesto

(11)

Esempio

  

           



  

Esempio di derivazione:

                     

         



Libero da contesto e non regolare

(12)

Esempio: espressioni algebriche

Molti linguaggi di programmazione le

contengono; il compilatore deve controllare che siano corrette

     

,  qualsiasi numero

 

, :



,



,



, 



, 



,



, 

    

   

                

(13)

Anche comandi

Aggiungo le regole

 

Posso derivare il comando   

  

Aggiungo

 

while do

 



Posso derivare il comando

     

(14)

Esercizio

  

  

 

Dare una derivazione per la stringa        Qual e’ il linguaggio generato?

(15)

Esercizio

  

    

 

Dare una derivazione per la stringa        Qual e’ il linguaggio generato?

(16)

Esercizio

  

 



Dare una derivazione per la stringa           Qual e’ il linguaggio generato?

(17)

Esercizio

    

    

 

Dare una derivazione per la stringa         Qual e’ il linguaggio generato?

(18)

Esercizio

Costruire grammatiche libere da contesto per i seguenti linguaggi:

           

       

  

Il linguaggio degli identificatori

rappresentati dalla espressione regolare

 



  



   

   

(19)

Parsing

Ogni stringa puo’ essere generata da piu’

derivazioni

Esempio:  , 

 

, 

 

   

  

   

Albero di parsing:

S B

a e

A A

(20)

Albero di parsing

Radice = simbolo iniziale, nodo interno = nonterminale, foglia = terminale

Relazione padre - figli  : regola





Stringa derivata: concatenazione delle foglie Un albero rappresenta un insieme di

derivazioni: uguali tranne l’ordine di espansione di un nonterminale

Per ogni nonterminale, si dice quale regola usare, ma non quando

(21)

Derivazioni canoniche

Derivazione piu’ a sinistra: rimpiazzo sempre il nonterminale piu’ a sinistra

Derivazione piu’ a destra: rimpiazzo sempre il nonterminale piu’ a destra

Tutte le derivazioni rappresentate dallo stesso albero di parsing sono equilaventi

Riferimenti

Documenti correlati

- Costruire automi da componenti usando delle operazioni algebriche sui linguaggi.. - E.g., dati L e M possiamo costruire un automa per L ∩ M Proprieta’

Automi e Linguaggi Formali.. Proprieta’ dei

- Costruire automi da componenti usando delle operazioni algebriche sui linguaggi. - E.g., dati L e M possiamo costruire un automa per L ∩ M Proprieta’

Grammatiche libere da contesto (Context-free grammars) - Base della sintassi BNF (Backus-Naur-Form).  Regole di derivazione → linguaggi di

Il prodotto di un albero sintattico e’ la stringa ottenuta dal concatenamento delle foglie da sinistra a destra. - E’ una stringa derivabile dalla

Un linguaggio regolare e’ anche libero da contesto Da una espressione regolare, o da un automa, si puo’. ottenere una grammatica che genera lo

(b) Se una computazione e’ legale per un PDA, allora lo e’ anche la computazione formata aggiungendo una stringa alla fine della terza componente (fondo dello stack).. (c) Se

(b) Se una computazione e’ legale per un PDA, allora lo e’ anche la computazione formata aggiungendo una stringa alla fine della terza componente (fondo dello stack). (c) Se