Documentos de Académico
Documentos de Profesional
Documentos de Cultura
precedencia de operador
Gramtica ambigua:
1) E -> E+E
2)E-> E*E
3)E-> (E)
4)E-> id
Analizador sintctico
precedencia de operador
Analizador sintctico
precedencia de operado
Analizador sintctico
precedencia de operador
Formalizamos las relaciones de precedencia de
operadores con un conjunto de tres elementos para
distinguirlos.
<*
=*
*>
Por ejemplo: op1 <* op2 quiere decir que el operador1
tiene menor precedencia que el operador2
Analizador sintctico
precedencia de operador
Un punto importante en esta clase de anlisis es que la
cadena reductora es aquella que cumple con dos
operandos en la pila, a y b y un operador op1 en el
tope, tal que cumple con:
-
a *> b
Y ese es el reductor.
Analizador sintctico
precedencia de operador
El algoritmo del anlisis de precedencia por operador puede ser as:
Entradas: flujo de tokens, tabla de precedencia
Mientras entrada != FIN_DE_FLUJO | FIN_CAD
Leer hasta el primer extremo izquierdo *>
De regreso a la derecha leer hasta el primer <* a la izquierda.
Ejecutar el reductor entre estos.
Volver a buscar reductores ignorando las relaciones extremas.
Fin_Mientras
Analizador sintctico
precedencia de operador
(
id
*>
*>
*>
*>
id
*>
*>
*>
*>
<*
<*
*>
*>
*>
*>
<*
<*
<*
*>
*>
*>
<*
<*
<*
<*
*=
<*
<*
<*
<*
*=
Analizador sintctico
precedencia de operador
Analizar la expresin:
(a + b)
Es decir:
(id + id)
%<* ( <* id *> + <* id *> ) *> %
Analizador sintctico
precedencia de operador
Aplicando el algoritmo sencillo de aislar el reductor y la
consulta de la tabla. Se tendra...
%<* ( <* id *> + <* id *> ) *> %
Marcado en rojo...se localiz elm primer reductor.
Tomar en cuenta las reglas de produccin de este ejemplo.
Analizador sintctico
precedencia de operador
Quedara una forma as:
%(E+id)%
O sea la pila de anlisis, tendra este estado:
%<* ( <* + <* id *> ) *> %
La siguiente reduccin deja la pila as:
%<* ( <* + *> ) *> %
Y as sucesivamente hasta llegar al smbolo de inicio.