Existe um algoritmo / procedimento sistemático para testar se uma linguagem é livre de contexto?
Em outras palavras, dado um idioma especificado em forma algébrica (pense em algo como ), teste se o idioma é livre de contexto ou não . Imagine que estamos escrevendo um serviço da Web para ajudar os alunos com todos os seus trabalhos de casa; você especifica o idioma e o serviço da web gera "sem contexto" ou "sem contexto". Existe alguma boa abordagem para automatizar isso?
Obviamente, existem técnicas para a prova manual, como o lema de bombeamento, o lema de Ogden, o lema de Parikh, o lema de intercâmbio e muito mais aqui . No entanto, cada um deles exige uma visão manual em algum momento, portanto, não está claro como transformar qualquer um deles em algo algorítmico.
Vejo que Kaveh escreveu em outro lugar que o conjunto de linguagens sem contexto não é recursivamente enumerável, então parece que não há esperança de que algum algoritmo funcione em todas as linguagens possíveis. Portanto, suponho que o serviço da Web precise ser capaz de gerar "sem contexto", "sem contexto" ou "não sei dizer". Existe algum algoritmo que muitas vezes seria capaz de fornecer uma resposta diferente de "não sei dizer", em muitos dos idiomas que provavelmente nos livros didáticos? Como você criaria um serviço da Web?
Para tornar essa questão bem formulada, precisamos decidir como o usuário especificará o idioma. Estou aberto a sugestões, mas estou pensando em algo assim:
onde é uma expressão de palavras e é um sistema de desigualdades lineares sobre as variáveis de comprimento, com as seguintes definições:
Cada um de é uma expressão de palavra. (Eles representam variáveis que podem conter qualquer palavra em .)
Cada um de a, b, c, \ dots é uma expressão de palavra. (Implicitamente, , então representam um único símbolo no alfabeto subjacente.)
Cada é uma expressão de palavra, se for uma variável de comprimento.
A concatenação de expressões de palavras é uma expressão de palavras.
Cada um de é uma variável de comprimento. (Eles representam variáveis que podem conter qualquer número natural.)
Cada um dos pontos é uma variável de comprimento. (Eles representam o comprimento de uma palavra correspondente.)
Isso parece amplo o suficiente para lidar com muitos dos casos que vemos nos exercícios de livros didáticos. Obviamente, você pode substituir qualquer outro método textual de especificar um idioma em forma algébrica, se desejar.
Respostas:
Pelo teorema de Rice , verificar se a linguagem aceita por uma máquina de Turing tem alguma propriedade não trivial (aqui: ser livre de contexto) não é decidível. Portanto, você teria que restringir o poder do seu mecanismo de reconhecimento (ou descrição) para torná-lo não Turing completo, na esperança de obter uma resposta.
Para algumas descrições de idiomas, a resposta é trivial: se for por expressões regulares, é regular, portanto, livre de contexto. Se for por gramáticas livres de contexto, idem.
fonte
Qualquer idioma é aceito por um Push Down Automata, é um CFL. Aqui está uma análise detalhada para determinar se um idioma é CFL ou não. verifique se o idioma é CFL ou não
fonte
Experimente o software JFLAP se você quiser apenas verificar um CFG. Talvez você possa até pedir aos desenvolvedores do JFLAP que forneçam o código ou algoritmo do software. você pode obter o JFLAP aqui http://www.jflap.org/jflaptmp/ é gratuito, no entanto, requer JDK ou JRE ou algo assim. Ou talvez você possa experimentar outros softwares semelhantes e seus desenvolvedores.
fonte