Post on 09-Jul-2015
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 1/7
“Shell de ejecución y verificación de sentencias matemáticas”
Resumen:
El siguiente proyecto describe el proceso para desarrollar una Shell que permite reconocer
y ejecutar sentencias matemáticas validando su sintaxis para cada expresión, en esteproyecto se primero se definirá un lenguaje el cual incluirá la definición de las palabras
pertenecientes al lenguaje mediante expresiones regulares para identificarlas, como por
ejemplo: sin, cos, log, +, -, etc, para identificar las palabras se utilizara un autómata de pila
determinista (AFD). El segundo paso será transformar las expresiones de notación infija a
notación posfija para finalmente evaluar la expresión usando una maquina posfija
representado por un autómata de pila. La aplicación será implementada en lenguaje de
programación java y para el reconocimiento de las se utilizara un reconocedor léxico con
el nombre de JFLEX que ara la función de autómata de finito determinista.
Abstract:
This project describes the process of developing a Shell to recognize and enforce
judgments validating mathematical syntax for each expression, this Project will first
define a language which will include the definition of words belonging to language using
regular expressions to identify them as for example: sin, cos, log, +, -, etc., to identify
the words used deterministic stack automata(DSA). The second step is to convert infix
expressions to postfix notation to finally evaluate the postfix expression using a machine
represented by a stack automaton. The application will be implemented in Java
programming language and the recognition of the use of a lexicón recognizer JFLEX namePlowing function deterministic finite automaton.
Indice.
INTRODUCCION
Un programa para el análisis de expresiones matemáticas presenta principalmente 2
dificultades, la primera es saber en qué notación se recibirá la entrada para ser analizada;
este punto se considera importante por la razón de que la notación utilizada presentara
un ventaja al momento de analizar la expresión y tomando en cuenta esta condición, la
opción que mejor facilita esta labor es utilizar notaciones posfijas.
El segundo problema presente en el análisis de expresiones matemáticas está presente al
momento de evaluar las variables, ya que al utilizar variables en las expresiones, se deben
evaluar su sintaxis para detectar errores como por ejemplo la raíz cuadrada de una
variable cuando su valor es negativo.
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 2/7
Para poder solucionar estos problemas se utiliza una maquina postfija que evalúa
expresiones en dicha notación, esta máquina puede ser reemplazada por autómata de pila
que ejecuta la misma función que además de analizar la sintaxis arrojara el resultado de la
expresión matemática si este lo tuviera.
Antecedente:
1. Java Mathematical Expression Parser (JEP).
Descripcion:
JEP fue diseñado por NathanFunk. Estudiante graduado en Ciencias de la
Computación en la Universidad Alberta en Canadá. JEP es un Java API (Interfaz de
programación de aplicaciones de Java) diseñado para la evaluación de expresiones
matemáticas. Las expresiones son pasadas como argumentos de tipo cadena
(String) y pueden ser evaluadas instantáneamente.
Aporte:
Uso de variables en las expresiones.
Uso de funciones matemáticas (seno, coseno, tangente, logaritmo,
factorial, etc).
2. Paper: ” Una clase Parser en Java para evaluar expresiones algebraicas”
Descripción:
El artículo presenta una clase parser en Java para evaluar expresiones algebraicas
empleando algoritmos fundamentales para la construcción de compiladores,
pasando por la conversión de expresiones de infija a postfija, la evaluación de
expresiones en notación postfija, el algoritmo de evaluación por precedencia de
operadores, el algoritmo parsing de precedencia y el algoritmo de construcción de
funciones de precedencia. El objetivo del artículo es escribir un analizador léxico en
un lenguaje convencional de programación de sistemas, utilizando las posibilidades
de entrada y salida del lenguaje Java para leer las expresiones a evaluar desde la
entrada; procesarlas y enviar los resultados a la salida.
Aporte:
Utilización de notación posfija.
Utilización de maquina posfija
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 3/7
Realidad problemática:
En la actualidad los métodos de analizar ecuaciones y expresiones matemática se ven
limitados al uso de calculadoras, o la misma intuición personal, pero ya que la intuición
requiere experiencia y en muchos casos puede fallar y una calculadora de carácter
científico tiene altos costos.
Otro caso presente relacionado con este tema es de la educación y las dificultades que se
pueden presentar al momento de enseñanza a los alumnos, las definiciones algebraicas y
las funciones geométricas presentan un alto grado de dificultad para el alumno que se
inicia en las matemáticas.
Objetivos:
Objetivos generales:
Desarrollar un Shell de que permita ejecutar y verificar sentencias matemáticas
Objetivos específicos:
Definir un lenguaje y sus palabras asociado a las sentencias matemáticas.
Implementar un autómata finito determinista que reconozca las palabras incluidas
en la sentencia matemática
Implementar un algoritmo que transforme las expresiones matemáticas de
notación infija a posfija.
Implementar un autómata de pila que sirva de maquina posfija para el
reconocimiento y ejecución de las sentencias matemáticas
Marco Teórico:
Autómata Finito determinista:
Es un modelo matemático que realiza cómputos en forma automática sobre
una entrada para producir una salida.
Este modelo está conformado por un alfabeto, un conjunto de estados y un
conjunto de transiciones entre dichos estados. Su funcionamiento se basa en
una función de transición, que recibe a partir de un estado inicial una cadena de
caracteres pertenecientes al alfabeto (la entrada), y que va leyendo dicha cadena
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 4/7
a medida que el autómata se desplaza de un estado a otro, para finalmente
detenerse en un estado final o de aceptación , que representa la salida.
La finalidad de los autómatas finitos es la de reconocer lenguajes regulares, que
corresponden a los lenguajes formales más simples según la Jerarquía de
Chomsky.
Formalmente, un autómata finito es una 5-tupla (Q , Σ, q 0 , δ, F ) donde:6
es un conjunto finito de estados;
es un alfabeto finito;
es el estado inicial;
es una función de transición;
es un conjunto de estados finales o de aceptación.
Autómata Finito Determinista:
Esun autómata finito que además es un sistema determinista; es decir, para cada estado
en que se encuentre el autómata, y con cualquier símbolo del alfabeto leído, existe
siempre a lo más una transición posible desde ese estado y con ese símbolo.
Formalmente, se define como una 5-tupla (Q , Σ, q 0 , δ, F ) donde:1
es un conjunto de estados;
es un alfabeto;
es el estado inicial;
es una función de transición;
es un conjunto de estados finales o de aceptación.
En un AFD no pueden darse ninguno de estos dos casos:
Que existan dos transiciones del tipo δ(q ,a )=q 1 y δ(q ,a )=q 2, siendo q 1 ≠ q 2;
Que existan transiciones del tipo δ(q , ε), donde ε es la cadena vacía, salvo
que q sea un estado final, sin transiciones hacia otros estados.
Autómata de Pila:
Un autómata con pila, autómata a pila o autómata de pila es un modelo matemático de
un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 5/7
esa cadena pertenece al lenguaje que el autómata reconoce. El lenguaje que reconoce un
autómata con pila pertenece al grupo de los lenguajes libres de contexto en la
clasificación de la Jerarquía de Chomsky.
Formalmente, un autómata finito es una 5-tupla (Q , Σ, q 0 , δ, F ) donde:6
es un conjunto finito de estados;
es un alfabeto finito;
es el estado inicial;
es una función de transición;
es un conjunto de estados finales o de aceptación.
MÁQUINAS POSTFIJAS
Una expresión postfija esta formada por una serie de operandos y operadores. Se
evalúa usando una máquina postfija, en la forma siguiente: cuando se encuentra
un operando, se apila en la pila; cuando se encuentra un operador, el número de
operandos (según el operador) son sacados de la pila; se realiza la operación, y el
resultado se apila de nuevo en la pila. Cuando la expresión postfija completa ha
sido procesada, el resultado deberá de ser el único valor en la pila.
Considere la expresión 1 + 5 * 2; que en notación postfija es, La evaluación es
como sigue: el 1, el 5 y el 2 son apilados en ese orden, en la pila de operandos. Alleerse el operador de multiplicación; el 2 y el 5 son desapilados, efectuándose el
producto de 2*5, siendo el resultado 10; ahora, 10 es metido a la pila.
Continuando con el algoritmo; se lee en la entrada el operador de suma, por lo que
10 y 1 son sacados de la pila, procediéndose a efectuar la suma entre estos;
siendo el resultado 11; el cual es apilado nuevamente en la pila. En consecuencia
el resultado de la evaluación es 11. La figura 4, ilustra este hecho.
JFlex:
JFlex es una metacompilador que permite generar rápidamente analizadores
léxicos que se integran con Java.
Escrito por Gerwin Klein y Régis Décamps.
Se dispondrá de un fichero Jflex.jar, el cual contendrá un clase Main, encargada
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 6/7
de Metacompilar nuestro programa .jflex de entrada; de esta manera, una
invocación típica es de la forma:
java JFlex.Main fichero.jflex
Lo que generará un fichero Yylex.java que implementa al analizador lexicográfico.
Notacion PosFija:
La Notación Polaca Inversa, notación de postfijo, o notación posfija,(en inglés, Reverse polish notation, o RPN), es un método algebraico alternativo deintroducción de datos. Su nombre viene por analogía con la relacionada notación polaca,una notación de prefijo introducida en 1920 por el matemático polaco Jan Lukasiewicz, endonde cada operador está antes de sus operandos. En la notación polaca inversa es alrevés, primero están los operandos y después viene el operador que va a realizar loscálculos sobre ellos. Tanto la notación polaca como la notación polaca inversa nonecesitan usar paréntesis para indicar el orden de las operaciones mientras la aridad deloperador sea fija.
Ventajas:
Los cálculos se realizan secuencialmente según se van introduciendo operadores, en vez de
tener que esperar a escribir la expresión al completo. Debido a esto, se cometen menos
errores al procesar cálculos complejos.
El proceso de apilación permite guardar resultados intermedios para un uso posterior. Esta
característica permite que las calculadoras RPN computen expresiones de complejidad muy
superior a la que alcanzan las calculadoras algebraicas.
No requiere paréntesis ni reglas de preferencia, al contrario que la notación algebraica, ya que
el proceso de apilamiento permite calcular la expresión por etapas.
En las calculadoras RPN, el cálculo se realiza sin tener que apretar la tecla "=" (aunque se
requiere pulsar la tecla "Enter" para añadir cifras a la pila).
5/10/2018 Shell de ejecución y verificación de sentencias matemáticas - slidepdf.com
http://slidepdf.com/reader/full/shell-de-ejecucion-y-verificacion-de-sentencias-matematicas 7/7
El estado interno de la calculadora siempre consiste en una pila de cifras sobre las que se
puede operar. Dado que no se pueden introducir operadores en la pila, la notación polaca
inversa es conceptualmente más sencilla y menos dada a errores que otras notaciones.
En términos educativos, la notación polaca inversa requiera que el estudiante comprenda la
expresión que se está calculando. Copiar una expresión algebraica directamente a una
calculadora sin comprender la aritmética dará un resultado erróneo.
Bibliografia:
Una clase Parser en Java para evaluar expresiones algebraicas - Edgar Ruiz Lizama y
Eduardo Raffo Lecca
Simple(x) Numerical Formula Parser-Ralf Wirtz -
http://www.codeproject.com/KB/recipes/rwformulaparser.aspx
MathParser - Math Formula Parser -Tamer Oz -
http://www.codeproject.com/KB/cs/MathParserLibrary.aspx
Analisis del interpretador de expresiones matemáticas: Java Mathematical Expression Parser (JEP) - EDWIN
CAMILO CUBIDES GARZON
¿Cómo evaluar expresiones matemáticas en el computador? - Alexander Borbón A. -
http://www.cidse.itcr.ac.cr/revistamate/ContribucionesV7_n2_2006/Parseador/index.ht
ml