Para un lenguaje libre de contexto determinado G, que llamamos un no terminal nullable si , es decir, podemos derivar la cadena vacía de después de aplicar un número finito de producciones.
Hay un algoritmo simple para determinar qué no terminales de una gramática son anulables, como se puede encontrar aquí :
Comenzamos considerando todos los no terminales como no anulables. todos los como anulables si hay una producción . Luego hacemos un bucle sobre todas las demás producciones excluyendo las producciones con un terminal en ellas, y marcamos como anulable si todos son anulables. Seguimos haciendo este bucle hasta que terminemos un bucle sin marcar ningún no terminal como anulable.A i → ϵ A i → B 1 B 2 … B k A i B i
Mi problema con este algoritmo es que tiene un tiempo de ejecución: un peor de los casos es por ejemplo , , , ..., , .A 1 → A 2 A 2 → A 3 A 3 → A 4 A n - 1 → A n A n → ϵ
¿Existe un algoritmo para este problema con un mejor tiempo de ejecución que ?