UNIVERSIDAD IBEROAMERICANA – UNIBE
Asignatura:
Teoría de Autómatas y Compiladores
Estudiante:
Jesús Ariel Fermín (22-0909)
Asignación:
Segundo Parcial – Compilador de Expresiones matemáticas
Maestro:
Rina María Familia
1. Aspectos Generales
a. Descripción de la problemática abordada
El compilador de expresiones matemáticas tiene como objetivo principal transformar expresiones
matemáticas en notación infija, sin la presencia de paréntesis ni reglas de precedencia de
operadores, a notación postfija para facilitar su evaluación. La notación postfija, también conocida
como notación polaca inversa, elimina la ambigüedad en la expresión, ya que cada operador sigue
directamente a sus operandos.
b. ¿Cuál será la entrada de datos?
La entrada del compilador será una expresión matemática en notación infija, compuesta por
operadores y operandos. Un ejemplo de entrada podría ser "1+1" o "3-55*40".
c. ¿Cuál será la salida de datos?
La salida consistirá en un acepto o rechazo del compilador en caso de que esta expresión sea
incorrecta, o, en su defecto en código, el valor numérico resultante de la expresión. Así que, si
tenemos “1+1”, nuestra máquina de pila funcionará correctamente, pero si usamos “2+”, entonces
obtendremos un estado Reject.
d. Glosario de Términos
• Compilador de Expresiones Matemáticas:
Herramienta informática diseñada para procesar expresiones matemáticas y convertirlas de una
forma a otra, facilitando su manipulación y evaluación en sistemas computacionales.
• Notación Infija:
Forma tradicional de escribir expresiones matemáticas donde los operadores se colocan entre los
operandos. Por ejemplo, "a + b".
• Árbol de Expresión:
Estructura de datos en forma de árbol que representa la jerarquía de una expresión matemática.
Cada nodo del árbol representa un operando u operador.
• Pila:
Estructura de datos que sigue el principio LIFO (Last In, First Out), donde el último elemento
agregado es el primero en ser eliminado. Se utiliza comúnmente en compiladores para gestionar
la conversión de notación infija a postfija.
• Operando:
Un valor en una expresión matemática que puede ser un número, una variable o cualquier entidad
que se combine mediante operadores.
• Operador:
Un símbolo que representa una operación matemática, como suma (+), resta (-), multiplicación
(*), o división (/), que se aplica a operandos.
2. Detalles del Diseño
a. Definición de la sintaxis
Este programa es un evaluador simple de expresiones matemáticas que realiza operaciones de
suma, resta, multiplicación y división. A continuación, se presenta una definición de la sintaxis
del programa:
• Entrada de Datos:
o expresion: Se solicita al usuario que ingrese una expresión matemática.
o Inicialización de Variables:
o operadores: Una lista que contiene los operadores matemáticos válidos ("+", "-
", "*", "/").
o numeros: Una lista vacía que se utilizará para almacenar los operandos numéricos
de la expresión.
o operaciones: Una lista vacía que se utilizará para almacenar los operadores de
la expresión.
o numero_actual: Una cadena vacía que se utilizará para construir el número
actual durante el análisis de la expresión.
• Análisis de la Expresión:
1. Se recorre cada carácter de la expresión.
2. Si el carácter es un dígito, se agrega a numero_actual.
3. Si el carácter es un operador, se convierte numero_actual a un entero y se agrega a
la lista numeros, luego se agrega el operador a la lista operaciones, y se reinicia
numero_actual.
• Finalización del Análisis:
Al finalizar el análisis, se convierte el último numero_actual a un entero y se agrega a la lista
numeros.
• Cálculo del Resultado:
Se inicializa la variable resultado con el primer número de la lista numeros.
Se recorre la lista operaciones y, dependiendo del operador, se realiza la operación
correspondiente con el número siguiente de la lista numeros.
• Impresión del Resultado:
Se imprime el resultado de las operaciones.
b. Tabla de símbolos
Nombre Tipo Rol Modificador de acceso
expresion String Variable Local
operadores List Variable Local
numeros List Variable Local
operaciones List Variable Local
numero_actual String Variable Local
caracter Char Variable Local
resultado Float Variable Local
c. Máquina de pila abstracta
El autómata tiene un conjunto finito de estados, un conjunto finito de símbolos de entrada y un
conjunto finito de símbolos de pila. El autómata comienza en un estado inicial y procesa los
símbolos de entrada uno por uno.
El autómata acepta la expresión si llega a un estado final después de procesar todos los símbolos
de entrada. Si el autómata no llega a un estado final, entonces rechaza la expresión.
En el caso de un autómata de verificación de expresiones que se le pasarán expresiones simples,
el conjunto de símbolos de entrada puede incluir los siguientes símbolos:
• Dígitos (0-9)
• Operadores (+, -, *, /)
El conjunto de símbolos de pila puede incluir los siguientes símbolos:
• Operandos (números)
• Símbolos de operación (operadores)
Las reglas de transición pueden definirse de forma que el autómata acepte la expresión si la
estructura sintáctica de la expresión es válida. Por ejemplo, las reglas de transición pueden
requerir que el autómata:
• Lea un dígito para colocarlo en la pila.
• Lea un operador para colocarlo en la pila.
En este caso, el autómata aceptará la expresión si:
• La expresión comienza con un número.
• Cada número está seguido de un operador o del final de la expresión.
• Cada operador está seguido de dos números.
Por ejemplo, el autómata aceptará las siguientes expresiones:
• 1+2
• 3*4
• 5/6
d. Código
Este compilador también fue realizado en código, yendo más allá y realizando en sí la operación
dada. A continuación el código fuente en Python.
e. Resultados