Grammatica libera dal contesto

Da Wikipedia, l'enciclopedia libera.
(Reindirizzamento da Grammatica context-free)
Vai a: navigazione, cerca

In informatica e in linguistica, una grammatica context-free (grammatica libera dal contesto o CFG) è una grammatica formale in cui ogni regola sintattica è espressa sotto forma di derivazione di un simbolo a sinistra a partire da uno o più simboli a destra. Ciò può essere espresso con due simbolismi equivalenti (nel seguito verrà utilizzato il secondo simbolismo):

V ::= w
V → w

dove V è un simbolo non terminale e w è una sequenza di simboli terminali e non terminali. Il termine "context-free" (libera dal contesto) si riferisce al fatto che il simbolo non terminale V può sempre essere sostituito da w, indipendentemente dai simboli che lo precedono o lo seguono. Un linguaggio formale si dice context-free se esiste una grammatica context-free che lo genera.

Le grammatiche context-free sono abbastanza potenti da descrivere la sintassi della maggior parte dei linguaggi di programmazione; al tempo stesso, sono abbastanza semplici da consentire un parsing molto efficiente.

La notazione formale di Backus-Naur (BNF) è la sintassi più comunemente usata per descrivere grammatiche context-free.

Non tutti i linguaggi formali sono context-free — un conosciuto controesempio è il seguente  \{ a^n b^n c^n : n \ge 0 \} .

Questo particolare linguaggio può essere generato da una grammatica di parsing di espressione, un formalismo relativamente nuovo seguito particolarmente dai linguaggi di programmazione.

Indice

[modifica] Definizione formale

Come una grammatica formale, una grammatica context-free \mathcal{G} può essere definita come una quadrupla:

\mathcal{G} = \left \langle N, \Sigma, P, S \right \rangle

dove

  • N\, è un insieme finito di simboli non terminali
  • \Sigma\, è un insieme finito di simboli terminali
  • P\, è un insieme finito di regole di produzione (o derivazione)
  • S \in N è un elemento di N, il quale determina il simbolo di partenza non terminale
  • gli elementi di P sono nella forma
N \longrightarrow (\Sigma \cup N)^*

[modifica] Esempi

[modifica] Esempio 1

Una semplice grammatica context-free:

S → aSb | ε

dove il metasimbolo | è una disgiunzione logica, usata per separare multiple opzioni. Questa grammatica genera il linguaggio  \{ a^n b^n : n \ge 0 \} , il quale è un linguaggio non regolare.


[modifica] Esempio 2

Ecco una grammatica context-free per espressioni algebriche con infissi sintatticamente corretti nelle variabili x, y e z:

S → x | y | z | S + S | S - S | S * S | S/S | (S)

Questa grammatica può, ad esempio, generare la stringa "( x + y ) * x - z * y / ( x + x )".


[modifica] Esempio 3

Una grammatica context-free per il linguaggio consistente in tutte le stringhe nell'insieme {a,b} che contengono un numero diverso di a e di b è

S → U | V
U → TaU | TaT
V → TbV | TbT
T → aTbT | bTaT | ε

T può generare tutte le strighe con lo stesso numero di a e b, U genera tutte le stringhe con più a che b e V genera tutte le stringhe con meno a di b.


[modifica] Esempio 4

Un altro esempio di linguaggio context-free è  \{ a^n b^m c^{m+n} : n \ge 0, m \ge 0 \} . Non è un linguaggio regolare, ma è context free dal momento che può essere generato dalla seguente CFG (Context Free Grammar):

S → aSc | B
B → bBc | ε

[modifica] Altri esempi

Le grammatiche context-free non sono limitate alle applicazioni matematiche (linguaggi "formali"). La grammatica del Lojban, un linguaggio artificiale con un immenso potere espressivo, è context-free, e non ambiguo. Recentemente si è pensato che il genere poetico Venpa del Tamil sia guidato da una grammatica context-free.

[modifica] Voci correlate

[modifica] Collegamenti esterni

Teoria degli automi: linguaggi formali e grammatiche formali
Gerarchia di Chomsky Grammatica Linguaggio Automa minimo
Tipo-0 (illimitato) Ricorsivamente enumerabile Macchina di Turing
(illimitato) Ricorsivo Decider
Tipo-1 Dipendente dal contesto Dipendente dal contesto Automa lineare
Tipo-2 Libera dal contesto Libero dal contesto Automa a pila ND
Tipo-3 Regolare Regolare A stati finiti
Ciascuna categoria di linguaggio o grammatica è un sottoinsieme del proprio sovrainsieme di categoria direttamente sottostante.
linguistica Portale Linguistica: accedi alle voci di Wikipedia che trattano di linguistica
Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Comunità
Stampa/esporta
Strumenti
Altre lingue