JME y JMEScript
JMEScript Manual de Usuario de JME

Descripción


JME (Java Math Expression) es un evaluador freeware de expresiones matemáticas y lógicas a partir de una cadena para entornos Java.

Se distribuye mediante una biblioteca en jar ejecutable (que lanza un REPL de JME).

La biblioteca incluye el lenguaje JMEScript, un potente lenguaje estructurado de script en español que utiliza JME para la evaluación de expresiones aritmético-lógicas.

JME realiza cálculos numéricos, no es una biblioteca de cálculo simbólico (CAS), por lo que no simplificará expresiones o resolverá ecuaciones algebraicamente (si algunas numéricas). En lugar de eso devolverá como resultado los tipos de datos del lenguaje.

JME/JMEScript es case insensitive, por lo que todas las variables, constantes, funciones y caracteres en general no diferencian mayúsculas-minúsculas (excepto para el tipo Texto y ciertos operadores). Los tokens del lenguaje están formados por distintas clases de números, operadores, funciones, identificadores, paréntesis, booleanos, vectores y cadenas. JME no es thread-safe, por lo que el programador debe encargarse de la programación multihilo.

La clase jme.Expresion es la clase principal de la biblioteca JME, encargada de crear, almacenar y evaluar las expresiones.


Descarga


, JMEScript

 Descargar biblioteca JME (jme_6_2.jar) - 1.2MB
   Descargar javadoc (jme_doc_6_2.zip) - 4MB

Para la escritura y ejecución de scripts puede utilizarse el IDE JMEScriptGUI.



Principales características




Ejemplos


Entrada y salida de expresiones JME:

masa probabilística en [μ-σ,μ+σ] para N(0,1):

stexto(normaldist(-1,1)/%$2)+'%'

Texto: '68.26%'

masa probabilística en [3,+∞) para N(-1,2):

stexto(normaldist(3,inf,-1,2)/%$2)+'%'

Texto: '2.27%'

Digrafo de 8 nodos:

gr_nuevo([[0,1,0,0,0,0,0,0],[0,0,1,0,1,1,0,0],[0,0,0,1,0,0,1,0],[0,0,1,0,0,0,0,1],[1,0,0,0,0,1,0,0],[0,0,0,0,0,0,1,0],[0,0,0,0,0,1,0,0],[0,0,0,1,0,0,1,0]],['a','b','c','d','e','f','g','h'],verdadero)

Grafo en JMEScriptGUI con visor de grafos v0.1:

Vecindad del nodo 'b':

gr_vecindad(gr_nuevo([[0,1,0,0,0,0,0,0],[0,0,1,0,1,1,0,0],[0,0,0,1,0,0,1,0],[0,0,1,0,0,0,0,1],[1,0,0,0,0,1,0,0],[0,0,0,0,0,0,1,0],[0,0,0,0,0,1,0,0],[0,0,0,1,0,0,1,0]],['a','b','c','d','e','f','g','h'],verdadero),'b')

Diccionario: { 'etiquetas': ['c','e','f'] 'ady': [[0,0,0],[0,0,1],[0,0,0]] 'esDirigido': verdadero 'esPonderado': falso 'esPseudografo': falso 'esMultigrafo': falso 'nodoData': '__null__' 'aristaData': '__null__' }

Vecindad del nodo 'c', 'd' y 'h':

gr_vecindad(gr_nuevo([[0,1,0,0,0,0,0,0],[0,0,1,0,1,1,0,0],[0,0,0,1,0,0,1,0],[0,0,1,0,0,0,0,1],[1,0,0,0,0,1,0,0],[0,0,0,0,0,0,1,0],[0,0,0,0,0,1,0,0],[0,0,0,1,0,0,1,0]],['a','b','c','d','e','f','g','h'],verdadero),['c','d','h'])

Diccionario: { 'etiquetas': ['g'] 'ady': [[0]] 'esDirigido': verdadero 'esPonderado': falso 'esPseudografo': falso 'esMultigrafo': falso 'nodoData': '__null__' 'aristaData': '__null__' }

Vecindad cerrada del nodo 'c', 'd' y 'h':

gr_vecindad(gr_nuevo([[0,1,0,0,0,0,0,0],[0,0,1,0,1,1,0,0],[0,0,0,1,0,0,1,0],[0,0,1,0,0,0,0,1],[1,0,0,0,0,1,0,0],[0,0,0,0,0,0,1,0],[0,0,0,0,0,1,0,0],[0,0,0,1,0,0,1,0]],['a','b','c','d','e','f','g','h'],verdadero),[2,'d',7],verdadero)

Diccionario: { 'etiquetas': ['c','d','g','h'] 'ady': [[0,1,1,0],[1,0,0,1],[0,0,0,0],[0,1,1,0]] 'esDirigido': verdadero 'esPonderado': falso 'esPseudografo': falso 'esMultigrafo': falso 'nodoData': '__null__' 'aristaData': '__null__' }


Salida en REPL:

>>> set grafo=gr_nuevo([[0,1,1,0],[0,0,0,1],[0,0,0,1],[1,0,0,0]],true)||
>>> gr_fuerteconexo(grafo)

         ==> Booleano: verdadero

        (parse: 120µs(10%) / eval: 1,1ms(90%) / total: 1,2ms)

>>> gr_subyacente(grafo)

         ==> Diccionario:

                {     'etiquetas': ['v0','v1','v2','v3']
                            'ady': [[0,1,1,1],[1,0,0,1],[1,0,0,1],[1,1,1,0]]
                     'esDirigido': falso
                    'esPonderado': falso
                  'esPseudografo': falso
                   'esMultigrafo': falso
                       'nodoData': '__null__'
                     'aristaData': '__null__' }

        (parse: 171µs(15%) / eval: 948µs(85%) / total: 1,1ms)

>>> gr_conexo(ans)

         ==> Booleano: verdadero

        (parse: 124µs(12%) / eval: 876µs(88%) / total: 1ms)

>>> enumerar(grafo><'ady',grafo><'etiquetas')

         ==> VectorEvaluado:

                | 'v0'  [0,1,1,0] |
                | 'v1'  [0,0,0,1] |
                | 'v2'  [0,0,0,1] |
                | 'v3'  [1,0,0,0] |


        (parse: 262µs(20%) / eval: 1,1ms(80%) / total: 1,3ms)

Script que ejecuta acciones sobre JMEScriptGUI:

Ejemplo de sentencia 'accion' en JMEScriptGUI

Salida en JMEScriptGUI



Aplicación para representación de gráficas y fractales JGE


JGE (Java Graphical Expression) es una aplicación freeware para gráficas y fractales usando expresiones JME. Entre sus principales características:


   JGE 0.1.2


Autor y mail



Autor: Miguel Alejandro Moreno Barrientos
  Ingeniero Técnico en Informática de Sistemas por la Universidad de Córdoba (España)

Comentarios, dudas, bugs, etc.: proyectojme@gmail.com