Grammatica libera dal contesto: differenze tra le versioni
template citazione; fix parametro isbn |
m Bot, replaced: Linguaggio formale (matematica) → Linguaggio formale |
||
Riga 2: | Riga 2: | ||
:V ::= ''w'' |
:V ::= ''w'' |
||
:V → ''w'' |
:V → ''w'' |
||
dove V è un [[grammatica formale|simbolo non terminale]] e ''w'' è una sequenza di [[grammatica formale|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 [[ |
dove V è un [[grammatica formale|simbolo non terminale]] e ''w'' è una sequenza di [[grammatica formale|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 [[linguaggio di programmazione|linguaggi di programmazione]]; al tempo stesso, sono abbastanza semplici da consentire un [[parsing]] molto efficiente. |
Le grammatiche context-free sono abbastanza potenti da descrivere la sintassi della maggior parte dei [[linguaggio di programmazione|linguaggi di programmazione]]; al tempo stesso, sono abbastanza semplici da consentire un [[parsing]] molto efficiente. |
||
La [[Backus-Naur Form|notazione formale di Backus-Naur]] (BNF) è la sintassi più comunemente usata per descrivere grammatiche context-free. |
La [[Backus-Naur Form|notazione formale di Backus-Naur]] (BNF) è la sintassi più comunemente usata per descrivere grammatiche context-free. |
Versione delle 00:58, 12 set 2014
In informatica e in linguistica, una grammatica context-free (o libera dal contesto, CFG o non contestuale) è 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 .
Questo particolare linguaggio può essere generato da una grammatica di parsing di espressione, un formalismo relativamente nuovo seguito particolarmente dai linguaggi di programmazione.
Definizione formale
Come una grammatica formale, una grammatica context-free può essere definita come una quadrupla:
dove
- è un insieme finito di simboli non terminali
- è un insieme finito di simboli terminali
- è un insieme finito di regole di produzione (o derivazione)
- è un elemento di , il quale determina il simbolo di partenza non terminale
- gli elementi di sono nella forma
Bibliografia
- Giorgio Ausiello, Fabrizio D'Amore, Giorgio Gambosi, Linguaggi modelli complessità, Milano, Franco Angeli Editore, 2003, ISBN 88-464-4470-1.