Shell de ejecución y verificación de sentencias matemáticas

7
 “Shell de ejecución y verificación de sentencias matemátic as” 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 este proyecto 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 f or 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 pos tfix nota tion to finally evalua te the post fix express ion 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 name Plowing 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.

Transcript of Shell de ejecución y verificación de sentencias matemáticas

Page 1: Shell de ejecución y verificación de sentencias matemáticas

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.

Page 2: Shell de ejecución y verificación de sentencias matemáticas

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

Page 3: Shell de ejecución y verificación de sentencias matemáticas

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

Page 4: Shell de ejecución y verificación de sentencias matemáticas

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

Page 5: Shell de ejecución y verificación de sentencias matemáticas

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

Page 6: Shell de ejecución y verificación de sentencias matemáticas

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).

Page 7: Shell de ejecución y verificación de sentencias matemáticas

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