A que se refere "contexto" na "gramática livre de contexto"?

30

Existem muitas definições on-line sobre o que é uma gramática livre de contexto, mas nada que eu encontre satisfaça meu principal problema:

De que contexto é livre?

Para investigar, pesquisei no Google "gramática sensível ao contexto", mas ainda não consegui encontrar o que era o "contexto".

Alguém pode explicar a que contexttermo se refere esses nomes?

CodyBugstein
fonte
5
Acho a explicação da wikipedia muito boa - "Uma gramática formal é considerada" livre de contexto "quando suas regras de produção podem ser aplicadas independentemente do contexto de um termo não terminal. Não importa quais símbolos o envolvam, o único termo não terminal no lado esquerdo pode sempre ser substituído pelo lado direito ". - pode ser reformulado e simplificado para se tornar "inglês simples", mas a essência disso parece bastante clara para mim.
Jkff 27/05
1
@jkff, é ótimo que você ache a explicação boa, mas ainda não entendi o que "contexto" realmente significa aqui. Eu preciso ver um exemplo onde há contexto e onde não há contexto. Para mim, parece que cada gramática que eu vi tem contexto
CodyBugstein
Não está claro a partir da definição?
Raphael
2
Ironicamente, faltava um pouco do contexto crucial nessa definição , então adicionei uma frase para explicá-la.
Reinierpost
2
Exemplo: No C ++ 11, overridepode ser um nome de variável ou uma palavra-chave, dependendo de onde é usada (ou seja, seu contexto). Se usado após uma declaração de método, é uma palavra-chave. Caso contrário, não é. Este é um exemplo de gramática sensível ao contexto.
Thomas Eding

Respostas:

37

Você está certo, sempre há um contexto em algum sentido. Eu não acho que você possa entender o que "contexto" significa em "livre de contexto" sem entender uma produção.

Uma produção é uma regra de substituição. Ele diz que, para gerar strings no idioma, você pode substituir o que está à esquerda pelo que está à direita:

A -> xy

Isso significa que a sequência abstrata A pode ser substituída pelo caractere "x" seguido pelo caractere "y". Você também pode ter produções mais complexas:

zA -> xy

Isso significa que o caractere "z" seguido da sequência abstrata A pode ser substituído pelos caracteres "x" e "y".

Uma produção sem contexto simplesmente significa que existe apenas uma coisa no lado esquerdo. O primeiro exemplo é livre de contexto, pois A pode ser substituído por "x" e "y", independentemente do que vem antes ou depois dele. No entanto, no segundo exemplo, o caractere "z" deve aparecer antes do A e, em seguida, a combinação pode ser substituída por "x" e "y", para que haja algum contexto envolvido.

Uma gramática sem contexto é apenas uma gramática com apenas produções sem contexto.

O segundo exemplo é realmente um exemplo de produção irrestrita. Há outra categoria entre livre de contexto e irrestrita chamada "sensível ao contexto". Um exemplo de produção sensível ao contexto é:

zA -> zxy

A diferença é que o que vem antes de A (e depois) no lado esquerdo deve ser preservado no lado direito. Isso significa efetivamente que apenas A é substituído, mas só pode ser substituído no contexto apropriado.

Vaughn Cato
fonte
2
Obrigado que é uma grande ajuda! Na verdade, nunca vi um exemplo de gramática com mais de uma variável no lado esquerdo, como você mostrou. Eu acho que é por isso que eu não conseguia ver qual era o "contexto". Obrigado
CodyBugstein
4
Talvez um exemplo contextual mais simples seja zA -> zxy: A ainda é substituído por xy, mas somente após z.
MSalters 27/05
Mais detalhadamente, essa resposta fala sobre uma gramática irrestrita , enquanto o @MSalters aponta que a gramática sensível ao contexto seria um exemplo melhor do significado do contexto.
@MSalters: Você tem um bom argumento. Eu modifiquei minha resposta. Eu tive dificuldade em encontrar uma maneira de adicionar esses detalhes à minha descrição sem parecer mais complexo, então o que acabei fazendo foi apenas adicionar mais detalhes no final.
Vaughn Cato
9

Aβ
αAδ
iLoveCamelCase
fonte
O que é beta? É um terminal ou uma variável? E você pode explicar a "forma sentencial"? Isso significa que não pode ser derivado mais?
CodyBugstein
Beta pode ser qualquer coisa, apenas que A-> beta é uma regra. Forma sentencial significa que, dado o seu símbolo inicial usando as regras da gramática, nós o transformamos em resultado. Este resultado é chamado formulário sentencial. Após cada uso de cada regra, obtemos um novo formulário sentencial.
ILoveCamelCase
3
@Irmay Você precisa examinar as definições formais para gramáticas e gramáticas sem contexto. Não há atalho para entender objetos formais .
Raphael
1
@Imray Uma forma sentencial é uma sequência de símbolos terminais e não terminais que deriva do axioma (também chamado símbolo inicial ) pela aplicação de regras gramaticais (também chamadas produções ). Um formulário sentencial pode ser derivado em outro aplicando uma regra a um de seus símbolos não terminais. Quando não existem terminais não, a forma sentencial é uma sentença , ou seja, uma string ou palavra no idioma definido ou gerado pela gramática. A terminologia vem dos linguistas que foram ao mesmo tempo os principais contribuintes para essa parte da teoria formal da linguagem.
babou 27/05
Eu pensei que um formulário sentencial não pode ter nenhuma variável nele - ele precisa ser apenas um terminal.
CodyBugstein