A cosa si riferisce "contesto" in "grammatica senza contesto"?


30

Ci sono molte definizioni online su cosa sia una grammatica senza contesto, ma nulla che trovo soddisfi il mio problema principale:

Da quale contesto è libero?

Per indagare, ho cercato su Google "grammatica sensibile al contesto", ma non sono ancora riuscito a trovare l'argomento "contesto".

Qualcuno può spiegare a cosa si contextriferisce il termine in questi nomi?


5
Trovo la spiegazione di Wikipedia abbastanza buona - "Una grammatica formale è considerata" libera dal contesto "quando le sue regole di produzione possono essere applicate indipendentemente dal contesto di un non terminale. Indipendentemente dai simboli che la circondano, il singolo non finale sul lato sinistro può sempre essere sostituito dal lato destro. " - può essere riformulato e semplificato per diventare un "inglese semplice", ma l'essenza mi sembra piuttosto chiara.
jkff,

1
@jkff è grandioso trovare la spiegazione buona, ma non riesco ancora a capire cosa significhi veramente "contesto" qui. Ho bisogno di vedere un esempio in cui esiste un contesto e in cui non esiste alcun contesto. A me sembra che ogni grammatica che ho visto abbia un contesto
CodyBugstein

Non è chiaro dalla definizione?
Raffaello

2
Ironia della sorte, la parte cruciale del contesto mancava da quella definizione , quindi ho appena aggiunto una frase per spiegarlo.
reinierpost,

2
Esempio: in C ++ 11, overridepuò essere un nome variabile o una parola chiave, a seconda di dove viene utilizzato (ovvero, il suo contesto). Se utilizzato dopo una dichiarazione di metodo, è una parola chiave. Altrimenti non lo è. Questo è un esempio di grammatica sensibile al contesto.
Thomas Eding,

Risposte:


37

Hai ragione, c'è sempre un contesto in un certo senso. Non credo che tu possa capire cosa significhi "contesto" in "senza contesto" senza comprendere una produzione.

Una produzione è una regola di sostituzione. Dice che, per generare stringhe all'interno della lingua, puoi sostituire ciò che è a sinistra con ciò che è a destra:

A -> xy

Ciò significa che la sequenza astratta A può essere sostituita dal carattere "x" seguito dal carattere "y". Puoi anche avere produzioni più complesse:

zA -> xy

Ciò significa che il carattere "z" seguito dalla sequenza astratta A può essere sostituito dai caratteri "x" e "y".

Una produzione senza contesto significa semplicemente che c'è solo una cosa sul lato sinistro. Il primo esempio è senza contesto, perché A può essere sostituito da "x" e "y", indipendentemente da ciò che viene prima o dopo. Tuttavia, nel secondo esempio, il carattere "z" deve comparire prima di A, quindi la combinazione può essere sostituita da "x" e "y", quindi è coinvolto un certo contesto.

Una grammatica senza contesto è quindi solo una grammatica con solo produzioni senza contesto.

Il secondo esempio è in realtà un esempio di una produzione senza restrizioni. C'è un'altra categoria che è tra senza contesto e senza restrizioni chiamata "sensibile al contesto". Un esempio di produzione sensibile al contesto è:

zA -> zxy

La differenza è che ciò che precede A (e dopo) sul lato sinistro deve essere conservato sul lato destro. Ciò significa effettivamente che solo A viene sostituito, ma può essere sostituito solo nel contesto appropriato.


2
Grazie che è di grande aiuto! In realtà non ho mai visto un esempio di grammatica con più di una variabile sul lato sinistro, come hai mostrato. Immagino sia per questo che non riuscivo a vedere quale fosse il "contesto". Grazie
CodyBugstein

4
Forse un esempio contestuale più semplice sarebbe zA -> zxy: A è ancora sostituito da xy, ma solo dopo z.
MSalters

Più in dettaglio, questa risposta parla di una grammatica senza restrizioni , mentre @MSalters sottolinea che la grammatica sensibile al contesto sarebbe un esempio migliore del significato del contesto.

@MSalters: hai un buon punto. Ho modificato la mia risposta. Mi è stato difficile trovare un modo per aggiungere quei dettagli alla mia descrizione senza sembrare più complesso, quindi quello che ho finito per fare è stato semplicemente aggiungere più dettagli alla fine.
Vaughn Cato,

9

Aβ
αAδ

Che cos'è la beta? È un terminale o una variabile? E puoi spiegare "modulo di valutazione"? Ciò significa che non può essere ulteriormente derivato?
CodyBugstein,

La beta può essere qualsiasi cosa è solo che A-> beta è una regola. Forma Sentenziale significa che dato il tuo simbolo iniziale usando le regole della grammatica, lo trasformiamo in un risultato. Questo risultato si chiama modulo sentenziale. Dopo ogni utilizzo di ogni regola otteniamo un nuovo modulo di valutazione.
iLoveCamelCase,

3
@Imray Devi dare un'occhiata alle definizioni formali per grammatiche e grammatiche senza contesto. Non c'è scorciatoia per comprendere gli oggetti formali .
Raffaello

1
@Imray Una forma sentenziale è una stringa di simboli terminali e non terminali che deriva dall'assioma (chiamato anche simbolo iniziale ) mediante l'applicazione di regole grammaticali (chiamate anche produzioni ). Una forma sentenziale può essere derivata in un'altra applicando una regola a uno dei suoi simboli non terminali. Quando non ci sono non-terminali a sinistra, la forma sentenziale è una frase , cioè una stringa o una parola nella lingua definita o generata dalla grammatica. La terminologia viene dai linguisti che un tempo erano i principali contribuenti a questa parte della teoria del linguaggio formale.
babou,

Pensavo che un modulo di valutazione non potesse contenere alcuna variabile: deve essere solo un terminale.
CodyBugstein,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.