Appunti rubati da @exiss
Definizione: Linguaggio
Definiamo come linguaggio un insieme di stringhe
Definizione: Grammatica
Definiamo come grammatica un insieme di regole, dette termini, che definiscono come poter manipolare le stringhe di un linguaggio.
La forma di Backus-Naur è una notazione utilizzata per descrivere grammatiche ed è definita come:
Dove:
<symbol>è un simbolo non-terminale espresso dalla grammaticaL’operatore
::=indica che ciò che si trova alla sua sinistra può essere sostituito con ciò che si trova alla sua destra
<_expression_>consiste in una o più sequenze di simboli terminali o non-terminali, dove ogni sequenza è separata da una barra verticale (ossia|) indicante una scelta possibile per l’operatore::=.Esempio
Consideriamo il linguaggio espresso dalla grammatica:
Tale grammatica indica che i simboli non-terminali
MeNpossono essere sostituiti con:
- un numero naturale
- un’espressione o dove
MeNsono due ulteriori simboli terminali o non-terminaliAd esempio, la stringa
5 + 7è ben definita dalla grammatica, mentre la stringa5 + +non lo è
Definizione: Sintassi Astratta
La sintassi astratta di un linguaggio è una definizione induttiva di un insieme
Tdi termini, che permettendo di definire strutture algebriche senza dover necessariamente definire concretamente le sue operazioni.Esempio
Consideriamo ancora il linguaggio definito dalla grammatica:
Definiamo quindi la funzione in grado di valutare le espressioni del linguaggio:
Notiamo quindi che la grammatica definisce in modo astratto (ma concretamente tramite eval) le seguenti operazioni:
Nota: le operazioni
plusetimesnon sono né iniettive né con immagini disgiunte. Di conseguenza, la funzioneevalnon ci permette di definire un’algebra induttiva.Tuttavia, per tale linguaggio è comunque possibile definire (in qualche modo, ad esempio fissando una precedenza per le operazioni rompendo proprietà come l’associatività e la commutatività) una funzione che possa descrivere un’algebra induttiva.
Teorema: Algebra induttiva dei termini
Dato un linguaggio con una sintassi astratta con termini definiti in
T, esiste sempre un’algebra induttiva . Di conseguenza, tutte le proprietà di un linguaggio sono dimostrabili tramite l’induzione strutturale sulla sua algebra dei termini.(dimostrazione omessa)