Professional Documents
Culture Documents
CD-
EF*
GH/
3.
4.
5.
6.
7.
8.
5,6,2,+,*,12,4,/,Smbolo examinado
5
6
2
+
*
12
4
/
)
Pila
5
5,6
5,6,2
5,8
40
40,12
40,12,4
40,3
37
Resultado
EJEMPLO:
A+(B*C-(D/Ef)*g)*H
A+([BC*]-[DEF/]*G)*H
A+([BC*]-[DEF/G*])*H
A+[(BC*DEF/G*-H*)]
ABC*DEF/G*-H*+
SMBOLO EXAM.
PILA
EXPRESIN P
(+
(+(
(+(
AB
(+(*
AB
(+(*
ABC
(+(-
ABC*
(+(-(
ABC*
(+(-(
ABC*D
(+(-(/
ABC*D
(+(-(/
ABC*DE
(+(-(/
ABC*DE
(+(-(/
ABC*DEF
(+(-
ABC*DEF/
(+(-*
ABC*DEF/
(+(-*
ABC*DEF/G
(+
ABC*DEF/G*-
(+*
ABC*DEF/G*-
(+*
ABC*DEF/G*-H
ABC*DEF/G*-H*+
Evaluar expresiones:
X=2, Y=5, Z=X+Y; obtener Z
X=2, Y=5; Z=(((Y-1)/X)*(X+Y))
Problemas:
- Qu se evala primero? -> (parntesis).
- Dnde guardamos resultados intermedios? -> En pilas.
El proceso a seguir es tener dos pilas, una para
operandos y otra para operadores, para su realizacin es
necesario que est bien parentizado, ya que, consiste en
evaluar la expresin y si encontramos un parntesis
izquierdo no hacemos nada, si es un operando lo pasamos a la
pila de operandos y si es un operador a la de operadores, de
forma que cuando encontremos un parntesis derecho, hay que
realizar una operacin, cuyos operandos y operador se
encuentran en las pilas, y as sucesivamente.
Si la expresin no est realizada con parntesis hay que
tener rdenes de prelacin y el algoritmo es un poco ms
difcil (Ver Estructuras de Datos en JAVA de Weiss).
Utilizamos pilas porque necesitamos albergar resultados
intermedios pero no sabemos cuantos. La solucin es utilizar
pilas.