You are on page 1of 15

Ambigedad

1. Proceso de derivacin hacia la derecha o hacia


la izquierda
2. Gramticas ambiguas
Una G es ambigua si existe una x que
pertenece a L(G) tal que existen dos o ms rboles
de derivacin diferentes cuyo resultado es x.
Una gramtica es ambigua si existe una
cadena para la que haya dos o ms derivaciones a
izquierda o a derecha.

Cmo eliminar la ambigedad


Establecer una regla que especifique en cada
caso ambiguo cul de los rboles de anlisis
gramatical es el correcto (Regla de no
ambigedad o de eliminacin de
ambigedades)
Cambiar la gramtica a una forma que obligue
a construir el rbol correcto. En el caso de
operaciones matemticas, considerar la
precedencia

Derivacin por la izquierda


Exp => exp op exp
Exp => exp op exp op exp
Exp => nmero - nmero op exp
Exp => 34 3 * exp
Exp => 34 3 * nmero
Exp => 34 3 * 42

<exp> ::= <exp> <op><exp>


<exp> ::= (<exp>)
<exp> ::= nmero
<op> ::= +|-|*|

rbol 1

exp
Exp

Exp

Op

Op
numero

Exp
-

Exp
*

nmero

nmero

34

42
3

Derivacin por la izquierda


<exp> ::= <exp> <op><exp>
<exp> ::= (<exp>)
<exp> ::= nmero
<op> ::= +|-|*|

Exp => exp op exp


Exp => nmero op exp
Exp => 34 - exp
Exp => 34 exp op exp
Exp => 34 nmero op exp
Exp => 34 3 op exp
Exp => 34 3 * exp
Exp => 34 3 * nmero
Exp => 34 3 * 42

rbol 2
exp

Exp

Op
nmero

Exp
-

Exp

Op
nmero

Exp
*

Nmero

34

*
3

42

Precedencia
Si son la misma operacin: precedencia por la
izquierda
34 - 2 41
34 (2 - 41)
34 (-39)
73

34 - 2 41
(34 2 )- 41
32 41
-9

Asociatividad por la izquierda:


Suma, resta, multiplicacin

Cambiar gramtica para eliminar


ambigedad

<exp> ::= <exp> <op><exp>


<exp> ::= (<exp>)
<exp> ::= nmero
<op> ::= +|-|*|

<exp> ::= <factor> <op><factor> | <factor>


<factor> ::= (<exp>)
<factor> ::= nmero
<op> ::= +|-|*|

Realice la derivacin para:


3 -10-2

3*4-2

10 3 *2

Con las dos gramticas

<exp> ::= <exp> <op><exp>


<exp> ::= (<exp>)
<exp> ::= nmero
<op> ::= +|-|*|

<exp> ::= <factor> <op><factor> | <factor>


<factor> ::= (<exp>)
<factor> ::= nmero
<op> ::= +|-|*|

Eliminar ambiguedad
Cascada de precedencia
Reglas diferentes para los operadores con la misma
precedencia
Los ms cercanos a la raz tienen menor precedenciaMs cercano

<exp> ::= <exp> <opsuma><term>| <term>


<opsuma> ::= +|<term> ::= <term> <opmult><term>| <factor>
<opmult>::= *
<exp> ::= (<exp>) | nmero

a la raz

Eliminar ambiguedad
Regla de la anidacin ms cercana
Para el else ambiguo
<sentencia> ::= <sent -if>| otro
<sent-if> ::= if (<exp>) <sentencia> | if (<exp>) <sentencia> else
<exp>::= 0|1
Una parte else, siempre debera estar asociada con la sentencia if ms cercana

<sentencia> ::= <sentsinigualar>| <sent-igualada>


<sent-sinigualar> ::= if (<exp>) <sent-sinigualar> else <sent-sinigualar> | otro
<sent-igualada> ::= if (<exp>) <sentencia> |
if (<exp>) <sent-sinigualar> else <sent-igualada>
<exp>::= 0|1
Obliga a que todas las partes del else se empaten tan pronto como sea posible

<sentencia> ::= <sent -if>| otro


<sent-if> ::= if (<exp>) <sentencia> | if (<exp>) <sentencia> else
<exp>::= 0|1
Sentencia

sentif
if

Exp

Sentencia

0
if

Else

Sentif
(

otro

Exp

)
1

If (exp)
if(exp)
sentencia
Else
sentencia

If ( 0 )
if( 1 )
otro
Else
otro

Sentencia

Sentencia
Otro

<sentencia> ::= <sent -if>| otro


<sent-if> ::= if (<exp>) <sentencia> | if (<exp>) <sentencia> else <sentencia>
<exp>::= 0|1
Sentencia
sentif
if

Exp

Sentencia

0
if

Exp

Sentencia

If ( 0 )
if( 1 )

otro
Else
otro

Sentif

Otro

If ( 0 )
if( 1 )
sentencia
Else
sentencia

Else

Sentencia
otro

<sentencia> ::= <sentsinigualar>| <sent-igualada>


<sent-sinigualar> ::= if (<exp>) <sent-sinigualar> else <sent-sinigualar> | otro
<sent-igualada> ::= if (<exp>) <sentencia> |
if (<exp>) <sent-sinigualar> else <sent-igualada>
<exp>::= 0|1

Ejercicio: Realice la derivacin y el rbol sintctico para:


If (0)
if (1)

If (1)
otro
Else
otro

otro
else
otro
If ( 0 )
if( 1 )
otro
Else
otro

ANLISIS SINTCTICO
ASCENDENTE

DIFERENCIAS CON ANALISIS


DESCENDENTE
ANALISIS DESCENDENTE
DOS TIPOS:
1. Descendente recursivo
2. LL(1) ( Descontinuado)
1. L : La entrada se procesa de
izquierda a derecha
2. L :

ANLISIS ASCENDENTE

You might also like