# Jasmine

### About this library

Jasmine is a very fast evaluator for numerical expressions and algorithms. In some situations Jasmine may evaluate compiled expressions faster than code created with javac, the Java compiler.

To keep the library as fast as possible it differentiates between expressions and algorithms, for instance the following expression will calculate the distance between two points.

`sqrt((x0 - x1)*(x0 - x1) + (y0 - y1)*(y0 - y1))`

Algorithms include support for variables, loops and conditional constructs so the following algorithm calculates the sum of the squares for all numbers 1 - 100 inclusive

`for(i = 1, i <= 100, i = i + 1); s = s + i * i; fend`

Jasmine works by parsing expressions and algorithms and then using the ASM (Java byte code manipulation) library to create byte code that can be executed directly by the JVM (Java Virtual Machine).

### Features

- very simple to use and very fast.
- all calculations use the double data type.
- floating point numbers can be expressed as simple decimals (e.g. 2.59) or in exponential format (e.g. 2.3E-5).
- handles + and - unary operators used with number literarls.
- uses standard order of precedence.
- includes all the commonly used functions found in java.lang.Math
- evaluates algorithms with multiple expressions and over multiple lines.
- will report syntax errors found during parsing.
- user can decide how errors are handled.
- includes simple conditional statement, if-else-endif.
- includes while-wend, repeat-until and for-fend loop constructs.
- comments can be added to algorithms to document them.
- does not use the Java compiler to create the byte code.

#### Jasmine is entirely written in Java and does not require Processing.

Although the library is packaged as a Processing library the actual library jar does not require Processing for its functions. For non-Processing users simply unzip the download, extract the files jasmine.jar, asm-5.0.3.jar and asm-util-5.0.3.jar and add them to the classpath of your project.