JEL is the library for evaluating a simple single line expressions in Java. There is certain class of tasks where user should be given a possibility to enter an expression of his own into the program. Typical examples include : plotting user-defined functions, fitting the data by the arbitrary user-defined functions, calculation of integrals and solving differential equations involving the user-defined functions... and many many more.... The key term above is the "evaluation of the user-defined functions", which is exactly what JEL is supposed to do for You.
The key feature of JEL is the fact that it is a compiler ! To write the interpreter for expressions is the task, close to trivial but incurs a HUGE perfomance penalty due to the fact that Java is interpreted language itself. JEL, in contrary, compiles expressions directly to Java bytecodes, allowing their fast evaluation. Moreover, if user's Java virtual mashine has JIT compiler, expressions are transparently compiled into the native machine code, resulting in performance HIGHER that for most C written interpreters (plus JEL do not require recompilation when transferred from platform to platform).
The complete list of JEL features is given in its manual.
overshadowing of Library functions by dynamic variables (the latter now take prededence over the former during the name resolution); usage of valueOf family of methods for constructing primitive type wrapping classes (both in the compiler and generated code); bugfixes (see RELEASE NOTES below).
Be sure You have read and understand the terms of the GNU General Public License (GPLv3 since the version 2.0.1).
JEL is available in two forms:
Contents of both archives is exactly the same.
Also available online : |README| MANUAL|RELEASE NOTES|
2.1.1 (.tar.gz, zip); 2.1.0 (.tar.gz, zip); 2.0.2 (.tar.gz, zip); 2.0.1 (.tar.gz, zip); 2.0.0 (.tar.gz, zip); 0.9.11 (.tar.gz, zip); 0.9.10 (parser rewrite, .tar.gz, zip); 0.9.9 (.tar.gz, zip); 0.9.8 (.tar.gz, zip); 0.9.7 (.tar.gz, zip); 0.9.6 (.tar.gz, zip); 0.9.5 (.tar.gz, zip); 0.9.4 (.tar.gz, zip); 0.9.3 (buggy, .tar.gz, zip); 0.9.1 (.tar.gz, zip); 0.9.0 (code generator rewrite, .tar.gz, zip); 0.8.3 (.tar.gz, zip); 0.8.3-JDK1.2 (.tar.gz, zip); 0.8.1 (.tar.gz, zip); 0.8.1-JDK1.2 (.tar.gz, zip); 0.8 (.tar.gz, zip); 0.2 (.tar.gz, zip); 0.1 (.tar.gz, zip);
If there is a need, don't hesitate to post to these lists. I (KLM) always monitor them.
Other JVM's and JIT's tested (Blackdown Linux port of SUN's JDK with "tya" JIT, HP UX JDK with HP JIT, and most JVM's in interpreted mode) are free of this bug. The best way to see if JEL runs on Your JVM is to run JEL testsuite (now includes about 100 tests and instantiates close to 1000 different expressions). If some tests are failing -- tell me about it..
JEL is distributed to You under terms of the GNU General Public License. This means it is "free software" . However, any program, using JEL MUST be the "free software" as well.
I would be very happy to consider requests for JEL enchancements and modifications (to fit some particular purpose), syntax of the input language, for example, can be easily changed... Contact me directly if You need customized, supported version of JEL.
JEL © 1998 — 2020 by Konstantin L. Metlov <metlov@fti.dn.ua>