4 votos

¿Esta gramática de BNF es ambigua?

Tengo un BNF definido de la siguiente manera:

<S> -> 0
<S> -> 1
<S> -> <S><S>

Creo que esta gramática no es ambigua, pero la solución fue "sí". ¿Alguna idea?
La solución del libro es impar para mí, porque creo que es la misma que la de arriba.

<S>-> 0|1|<S><S>

Gracias,
Chan

0 votos

Das dos veces la misma gramática. Una gramática inequívoca para la misma lengua es $S \rightarrow 0S \mid 1S \mid 0 \mid 1$ por ejemplo.

13voto

jdotjdot Puntos 129

Una técnica general para comprobar la ambigüedad es ésta. Transformar la gramática en un sistema de ecuaciones:

$S(x) = S(x)^2 + 2x$

Resolver para $S(x)$ rinde $S(x) = \frac{1}{2}(1 - \sqrt{1 - 8x})$ que es la función generadora ordinaria que enumera los árboles de derivación izquierda de la gramática.

El lenguaje generado es $\{0,1\}^+$ que tiene la función generadora $\frac{1}{1-2x} - 1$ . Esto es obviamente diferente de lo anterior, por lo que hay más árboles de derivación a la izquierda (para palabras de longitud $n$ ) que las palabras (de longitud $n$ ).

Esta técnica se remonta a Chomsky y Schützenberger, 1963 ( PDF ).

3 votos

¡Interesante! Nunca había oído hablar de este enfoque hasta ahora... +1.

1 votos

Sí, pocos lo han hecho. Lo cual es gracioso dado lo viejo que es. Mi asesor utiliza mucho y con gusto las funciones generadoras, así que nos enseña esas cosas. Tenga en cuenta, sin embargo, que este enfoque puede ser arbitrariamente difícil de ejecutar (resolver el sistema de ecuaciones y comparar las funciones resultantes). Los sistemas de álgebra computacional ayudan mucho.

2voto

Alex Bolotov Puntos 249

Considere lo siguiente:

$S \to S S \to S S S \to 1 S S \to 1 1 S \to 1 1 1$

$S \to S S \to 1 S \to 1 S S \to 1 1 S\to 1 1 1$

0 votos

@Moron: ¡Gracias! Pero, ¿qué te parece la solución? Creo que también podría generar dos árboles de análisis distintos.

0 votos

@chan: La 'solución' sólo parece ser repetir las reglas gramaticales... ¿Olvidaste copiar algo?

0 votos

@Moron: Lo he copiado textualmente. Tiene dos soluciones, la otra es EBNF: <S> -> {0|1}(0|1) . Y no es la primera vez que me confunde la solución de mi profesor, parecía muy vago al explicar las cosas.

0voto

jamolkhon Puntos 1442

Considera que la cadena = 000

1) S = S S = (S S) S = (0 0) 0 = 000

2) S = S S = S ( S S) = 0 (0 0 ) = 000

0 votos

Si leo correctamente tu notación no estándar, 1) es una derivación a la izquierda y 2) una derivación a la derecha. Por lo tanto, esto no es un testigo de que la gramática sea ambigua.

0voto

user518179 Puntos 1

Usted puede escribir LHS (lado izquierdo) de su BNF y RHS (lado derecho) como cmt anterior para resolver eso. Después de tener LHS y RHS de su BNF, vamos a comparar dos de estos, si no hay diferencia entre estos => Su BNF no ambigua y viceversa. Buena suerte :D

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X