Sea una GLC con las siguientes definiciones:

  • Regla de : .
  • Handle: en .
  • Producción útil: es útil con .
  • No terminal útil: es útil es parte izquierda de una producción útil.
  • Producción no generativa: .
  • No terminal recursivo por izquierda: en .
  • No terminal recursivo por derecha: en .
  • No terminal cíclico: . Es causado por producciones no generativas.

Transformaciones Gramaticales

Dos GLC y son débilmente equivalentes si . y son fuertemente equivalentes si son débilmente equivalentes y para cada string terminal las derivaciones por izquierda mínimas de en tienen una correspondencia uno a uno con las de . Una derivación es mínima si ninguna forma sentencial se repite en la derivación.

Sustitución

Sea y , la es obtenida por sustitución de acuerdo a:

  1. no está en .
  2. Todas las otras producciones están en .
  3. Cada está en con .

Si ninguna producción de introducida por la regla 3 ha sido previamente introducida por la regla 3, y son fuertemente equivalentes. Se puede perder la equivalencia fuerte si se introduce por sustitución una producción duplicada.

Expansión

Sea con , se la reemplaza por una de dos opciones:

  • , o
  • .

Siendo un nuevo no terminal. Se dice que se expandió la regla . Siempre se mantiene la equivalencia fuerte entre y .

Se observa que sustitución y expansión son transformaciones inversas.

Eliminación de Producciones Inútiles

Sea una producción inútil con .

Para eliminar producciones inútiles, se puede utilizar el marcado , que marca cada regla de si hay una derivación de un string terminal. Las producciones no marcadas nunca terminan, por lo que se eliminan. Pasos:

  1. Sean con .
  2. Sea y el marcado de producciones terminables.
  3. Repetir hasta que y .

Luego se utiliza el marcado , que marca cada regla ya marcada por si es alcanzable desde . Si no es alcanzable, se elimina. Pasos:

  1. Sea del marcado y con .
  2. Sea el marcado de producciones alcanzables.
  3. Repetir hasta que .

Aseguramos que cada producción de como es terminable de la forma . Así, por cada producción de de se puede decidir si es o no útil en .

El test de vacío dice que para cualquier GLC es posible decidir si . En particular, si la gramática genera o no strings, .

Eliminación de Producciones No Generativas

Sea la producción no generativa , se desea eliminarla porque puede causar no terminales cíclicos. Las secuencias de pasos de derivación no generativos consecutivos de pueden ser representadas por un AEF con solo transiciones lambda.

Sean y con:

\begin{align} Q &= \left\{ A \,\middle/\, A \rightarrow B \text{ ó } B \rightarrow A \in P;\; A, B \in N \right\} \\ P' &= \left\{ A \xrightarrow{\lambda} B \,\middle/\, A \rightarrow B \in P \right\} \\ I &= \left\{ A \in Q \,\middle/\, \Sigma \rightarrow A \in P \ \lor \ B \rightarrow \varphi A \psi \in P \text{ con } \varphi \psi \neq \lambda \right\} \\ F &= \left\{ A \in Q \,\middle/\, A \rightarrow \beta \in P \text{ con } \beta \notin N \right\} \end{align}

incluye un nuevo no terminal por cada secuencia de pasos no generativos en una derivación mínima. Eso en es un camino sin ciclos.

Así:

  1. Toda producción sin un símbolo de es copiada.
  2. Por cada producción generativa con en surge en una producción donde:

Se cumple que y son fuertemente equivalentes siempre.

Factorización por Izquierda

Sean dos producciones con el mismo handle de una misma parte derecha. Esto provoca ambigüedad al diseñar un compilador por izquierda. Para evitarlo, se puede aplicar una factorización por izquierda:

Es un caso especial de expansión, por lo que y son fuertemente equivalentes.

Ejemplo:

Eliminación de Producciones

Sea una producción lambda. es anulable . Se acepta una definición no estricta de una GLC que tenga porque es salvable.

Identificación de no terminales anulables:

  1. Sea .
  2. Sea .
  3. Repetir hasta que .

Procedimiento:

de se agregan producciones donde . Luego, se eliminan todas las producciones . Si .

y son fuertemente equivalentes, y toda producción es salvable.

Formas Canónicas de Gramáticas

Se pueden definir formas restringidas de gramáticas libres de contexto, conocidas como formas canónicas: