Está en la página 1de 10

Analizador sintctico

precedencia de operador
Gramtica ambigua:
1) E -> E+E
2)E-> E*E
3)E-> (E)
4)E-> id

Analizador sintctico
precedencia de operador

Las relaciones de precedencia pueden establecerse entre


los operadores de una gramtica guiada por clases de
operadores ( vea la tabla de operadores en el proymoodle)
En la precedencia de operadores, la cadena de tokens es
tomada del flujo del analizador lexico.
Pero... incorporamos un autmata para consultar una
nueva tabla...la tabla de operadores.
Se crean dos estados...A) en espera de un operador y B) en
espera de un operando.

Analizador sintctico
precedencia de operado

Para llevar el anlisis, slo tenemos que mantener dos pilas


de smbolos.
Una pila va guardando operadores y otra en paralelo para
operandos. En ese proceso de llenado de pilas...se comparan
(consultando la tabla de operadores)las precedencias de
operadores vecinos inmediatos.
En caso de que al comparar dos operadores vecinos resultra
que el del tope de la pila es de mayor precedencia..entonces
se usan un par de operandos del tope de la otra pila en
conjunto con este operador para hacer una reduccin.

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.

También podría gustarte