3-1pasar de Infija a Sufija

8
Notación Infija a posfija Reglas básicas

Transcript of 3-1pasar de Infija a Sufija

Notación Infija a posfija

Reglas básicas

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-