3-1pasar de Infija a Sufija
-
Upload
jesus-rejon -
Category
Documents
-
view
180 -
download
10
Transcript of 3-1pasar de Infija a Sufija
Reglas básicas para pasar de notación
infija a posfija
Sí el símbolo es “(“
éste se mete a la pila de operadores.
Si el símbolo es “)”
se saca de la pila todo lo que exista hasta llegar al
primer “(“. Los operadores van a la salida, a
medida que salen de la pila. El “(“ se saca pero no
va a la salida.
Reglas básicas para pasar de notación infija a
posfija (continuación)
Si el símbolo es un operador, si el operador en el tope de
la pila es de la misma o de mayor precedencia, dicho
operador se saca y va a la salida, continuando de esta
manera hasta que el primer paréntesis izquierdo o un
operador de menor precedencia se encuentre en la pila.
Cuando esta situación ocurre, entonces el operador en
turno se mete en la pila.
Si el símbolo es un operando, éste se envía directamente a
la salida.
El símbolo de terminación, aquí es el punto y coma, saca
todos los símbolos de la pila
Pasa de notación infija a posfija la expresión ((A+B)*C/D+E↑F)/G
Punto
temporal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Carácter ( ( A + B ) * C / D + E ↑ F ) / G ;
Pila de
operadores
( (
(
(
(
+
(
(
+
(
(
( *
(
*
(
/
(
/
(
+
(
+
(
↑
+
(
↑
+
(
/
Salida A B + C * D / E F ↑+ G /
El resultado en notación posfija es: AB+C*D/EF↑+G/.
Convertir de una expresión infija EI a Posfija EPOS
Conv-posfija(EI, EPOS)Expresión infija EI, posfija EPOS, PILA.MAX número máximo de elementos de la pila
1. Hacer TOPE 02. Repetir mientras EI sea diferente de la cadena vacía
Tomar el símbolo más a la izquierda de EI, recortando la expresión2.1 Si el símbolo es paréntesis izquierdo
Entonces Poner símbolo en pila
Llamar a PONE con PILA, TOPE, MAX y símbolo
Se asume que hay espacio disponible en PILA
Si no
2.1.1 Si el símbolo es paréntesis derecho
entonces2.1.1.1 Repetir mientras (PILA[TOPE]
paréntesis izquierdo
Llamar a QUITA con PILA, TOPE y DATO
Hacer EPOS EPOS + DATO2.1.1.2 Fin del ciclo del paso 2.1.1.1
Llamar a QUITA con PILA, TOPE y DATOQuitamos el paréntesis izquierdo de PILA y
no lo agregamos a EPOSSi no
2.1.1.3 Si el símbolo es un operandoEntonces
Agregar Símbolo a EPOSSi no es un operadorLlamar PILA-VACIA con PILA, TOPE y BAND
2.1.1.3A Repetir mientras (BAND=FALSO)Y (la prioridad del operador sea menor o
igual que la prioridad del operador que está
en la cima de la PILA)Llamar a QUITA con PILA, TOPE y DATOHacer EPOS EPOS + DATO
Llamar a PILA-VACIA con PILA, TOPE y
BAND2.1.1.4B Fin del ciclo del paso 2.1.1.3A
Llamar a PONE con PILA, TOPE, MAX
y símbolo2.1.1.4 Fin del condicional del paso 2.1.1.3
2.1.2 Fin del condicional del paso 2.1.1
2.2. Fin del condicional del paso 2.1
3. Fin del ciclo del paso 2
4. Llamar a PILA-VACIA con PILA, TOPE, y BAND
5. Repetir mientras BAND = FALSO
Llamar a QUITA con PILA, TOPE, y DATO
Hacer EPOS EPOS + DATO
Llamar a PILA-VACIA con PILA,TOPE, y BAND
6. Fin del ciclo del paso 5
7. Escribir EPOS
Ejemplo. Usa el algoritmo anterior para transformar
de infija a posfija: (X+Z)*W/T Y-V
Paso EI Símbolo Pila EPOS
analizado0 (X+Z)*W/T Y-V
1 X+Z)*W/T Y-V ( (2 +Z)*W/T Y-V X ( X
3 Z)*W/T Y-V + (+ X
4 )*W/T Y-V Z (+ XZ
5 *W/T Y-V ) ( XZ+
6 W/T Y-V * * XZ+
) XZ+
7 /T Y-V W * XZ+W8 T Y-V / / XZ+W*
9 Y-V T / XZ+W*T/ / XZ+W*
10 Y-V / XZ+W*T
11 -V Y / XZ+W*TY
- / XZ+W*TY12 V - - XZ+W*TY /
- - XZ+W*TY /13 V - XZ+W*TY /V
14 XZ+W*TY /V-