O que realmente se entende por livre de contexto no termo gramática livre de contexto?

29

Eu estudo os compiladores há algum tempo e tenho pesquisado o que significa "contexto" na gramática e o que significa que a gramática é "livre de contexto", mas sem resultado.

Então, alguém pode ajudar com isso?

Shady Atef
fonte
7
O que você quer dizer com "realmente"? Quais explicações você leu e o que você não entende? IIRC, todo livro didático incompleto sobre o assunto explicará o que eles significam.
Raphael
2
Aqui está um exemplo relacionável. Considere a palavra "ler". É uma única palavra que tem dois significados completamente diferentes. Um é o tempo presente "ler", o outro é o tempo passado "eu li". Se você viu a palavra "ler" em um pedaço de texto, não pode desambiguar qual dos dois significados ela representa, sem olhar para o contexto. Portanto, o inglês é sensível ao contexto, porque você não pode analisar cada token (palavra) sem considerá-lo no contexto. Uma gramática sensível ao contexto é aquela em que o significado de cada token é inequivocamente dedutível do único token que o representa.
Alexander - Restabelece Monica

Respostas:

30

O contexto pode ser explicado com relação às regras de produção permitidas para diferentes gramáticas na hierarquia de Chomsky.

Se você considerar gramáticas livres de contexto, suas regras de produção terão a seguinte forma:

Aα

Portanto, você pode observar que a parte esquerda desse tipo de regra é composta de apenas um símbolo não terminal; assim, a substituição do símbolo não terminal ocorre sem considerar o seu "contexto", ou seja, os outros símbolos pelos quais está cercado.

Por outro lado, se você considerar as regras de produção de gramáticas sensíveis ao contexto, elas terão a seguinte forma:

βAγβαγ

Aαβγ

βγ

Você pode encontrar mais detalhes nesta resposta em matemática e nesta resposta em engenharia de software.

PieCot
fonte
Obrigado pela resposta. Mas o estranho para mim é que uma pergunta semelhante foi feita na matemática SE.
Shady Atef
1
βγ
1
@Frozn AFAIK, a que é apresentada aqui é a definição padrão de acordo com a hierarquia de Chmosky. Certamente, existem gramáticas mais poderosas do que sensíveis ao contexto que permitem qualquer tipo de produção, mas as gramáticas padrão sensíveis ao contexto não.
Bakuriu 4/17/17
2
@Frozn: Bakariu está certo, aqui estamos falando de gramáticas definidas de acordo com a hierarquia de Chomsky, que se baseia em condições cada vez mais restritivas nas regras de produção. Em particular, as gramáticas sem contexto são do tipo 2, enquanto as sensíveis ao contexto são do tipo 1. No entanto, as gramáticas do tipo 0 possuem regras de produção que não são limitadas por nenhuma restrição e, portanto, são chamadas de sistemas de reescrita irrestritas. Aqui você pode encontrar uma breve descrição da hierarquia de Chomsky com alguns exemplos.
PieCot
βAγδ|βAγ||δ|
17

AthingsstuffAmore-stuffthingsExprx:=y+zf(y+z)return y+z

David Richerby
fonte
4

De um modo geral, mesmo os idiomas regulares podem ter dependências de contexto, o que significa que você pode determinar - até certo ponto - de que maneira os símbolos podem aparecer nas proximidades de outros símbolos em uma string que pertence a esse idioma.

O que é específico das gramáticas sem contexto é que, quando existem várias maneiras de substituir um símbolo não terminal, aplicando regras diferentes com o mesmo não terminal no lado direito, a escolha de qual regra aplicar nunca depende do que está acontecendo em torno deste símbolo durante o processo de derivação.

Você pode pensar nelas como linguagens de derivação sem contexto, linguagens sem contexto, para abreviar.

André Souza Lemos
fonte