La más obvia que he encontrado, $$S \rightarrow SSS | A | B | C$$ $$A \rightarrow Aa | \epsilon$$ $$B \rightarrow Bb | \epsilon$$ $$C \rightarrow Cc | \epsilon$$
Sin embargo, me doy cuenta de que esta CFG es ambious porque podemos generar diferentes de análisis de los árboles de la misma cadena debido a la regla de $S \rightarrow SSS$.
Así que he revisado mi lengua para evitar la ambigüedad de la siguiente manera:
$$S \rightarrow SABC | ASBC | ABSC | ABCS $$ $$A \rightarrow Aa | \epsilon$$ $$B \rightarrow Bb | \epsilon$$ $$C \rightarrow Cc | \epsilon$$
donde $S$ es el punto de partida de la variable en ambas gramáticas.
Me pregunto si esta CFG es la correcta? Lo que no estaba seguro de que es la primera regla de $S$, parece un poco redundante, pero no sé cómo solucionarlo de modo que puede generar todas las cadenas sobre el alfabeto $\Sigma = \{a, b, c\}$. Alguna idea?
Actualización
La pregunta es motivado por este problema:
Demostrar que el complemento de la lengua $L = \{a^nb^mc^k, k = n + m\}$ es independiente del contexto.
Puesto que ya he encontrado el CFG para el idioma $L_1 = \{a^nb^mc^k, k \neq n + m\}$, lo que estoy tratando de hacer es encontrar la CFG para su complemento, que incluye dos partes:
- $L_1$
- $L_2$ = Cualquier cadena de más de alfabeto $\Sigma = \{a, b, c\}$ que no está en el formulario de $a^mb^nc^k$.
Así que si no puedo encontrar el CFG para 2, la unión de estas dos lenguas es también CFG añadiendo un extra de regla: $$S \rightarrow S_1 | S_2$$ donde $S_1$ es a partir de la variable de $L_1$, e $S_2$ es a partir de la variable para $L_2$.