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 grammatica

  • L’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 M e N possono essere sostituiti con:

  • un numero naturale
  • un’espressione o dove M e N sono due ulteriori simboli terminali o non-terminali

Ad esempio, la stringa 5 + 7 è ben definita dalla grammatica, mentre la stringa 5 + + non lo è

Definizione: Sintassi Astratta

La sintassi astratta di un linguaggio è una definizione induttiva di un insieme T di 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 plus e times non sono né iniettive né con immagini disgiunte. Di conseguenza, la funzione eval non 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)