Como converter uma gramática livre de contexto não incorporável para gramática regular?

7

Observe que estou ciente da indecidibilidade da conversão de gramática livre de contexto em gramática regular. Mas, dada a propriedade de não incorporação da gramática livre de contexto de entrada, existe algum algoritmo para convertê-la em gramática regular ou diretamente no DFA?

Franck Dernoncourt
fonte
O que você quer dizer com "a propriedade não incorporada"?
DW

Respostas:

4

Confira este link . Esta é uma versão mais simples de uma prova de Chomsky de que as gramáticas NSE representam idiomas regulares. Felizmente, a técnica de prova ilustra como construir uma gramática esquerda-regular a partir de uma determinada gramática NSE. Aqui está a minha explicação:

  1. Para cada um dos pares (v_1, v_2) de elementos de V , decidir se v_1 \ le v_2 com base na definição dada: v_1 \ le v_2 se v_2 * : = V ^ * v_1 V ^ * .|V|(|V|+1)/2(v1,v2)Vv1v2v1v2v2:=Vv1V
  2. Construa classes de equivalência de modo que, se e , e estiverem na mesma classe de equivalência. Será uma partição de todos os elementos de em uma ou mais classes de equivalência.v1v2v2v1v1v2V
  3. Agora, para cada par de classes de equivalência de conforme descrito acima, determine se verificando se em em .(VE1,VE2)VVE1VE2v1VE1v2VE2
  4. A construção define correspondente às classes de equivalência modo que, se , é um subconjunto de . Cada também deve conter o jogo do alfabeto . Você terá um para cada , e cada conterá variáveis ​​nas classes de equivalência "inferiores a" o correspondente , além de todos os símbolos do alfabeto.UEVEVEiVEkVEiUEkUEkEUEVEUEVE
  5. Determine para cada variável seguinte forma: é o conjunto de todas as produções em cujo lado esquerdo pertence à classe de equivalência que contém a variável .P(v)vP(v)Pv
  6. Para cada variável , construir uma gramática do seguinte modo: , onde é a classe de equivalência contendo e o é aquela correspondente à .vG(v)=(VEUE,UE,P(v),v)VEvUEVE
  7. Os autores provaram um lema que afirma que é uma gramática linear. A partir disso, podemos escrever expressões regulares sobre para cada variável . Note-se que para a correspondente aos "menor" símbolos, esta expressão regular conterá apenas do alfabeto originais .G(v)UEvUEVEE
  8. Substitua iterativamente expressões regulares que contêm apenas símbolos do alfabeto em expressões regulares mais complicadas obtidas na etapa 7. Eventualmente, você terá uma expressão regular correspondente ao idioma gerado a partir do símbolo inicial original , e essa expressão regular conterá apenas símbolos do alfabeto original alfabeto.S
  9. Agora você tem uma expressão regular para a gramática NSE e pode obter um DFA mínimo usando o teorema de Kleene, a construção do subconjunto e um algoritmo de minimização do DFA.

Se você quiser um exemplo, posso tentar fornecer um mais tarde. Tente fazer alguns você mesmo, leia o artigo (é breve) e poderemos falar sobre complexidade mais tarde.

Patrick87
fonte
Woa, isso precisa de algum amor de formatação, Patrick!
Raphael
@ Rafael Sim, SO não usa LaTeX, então eu fiz o meu melhor na época. Não estou ansioso por isso, mas vou dar um jeito nisso, eventualmente, se alguém não me derrotar.
Patrick87