This package acts as a complex number extension to the verbena math function transcompiler to JS.
It uses verbena's standard lexer, parser and compiler, all completely unmodified. The magic happens with the library: All operations are redefined to convert all numbers to complex.js Complex
numbers, and i
is treated as a simple constant.
Some additional logic is implemented after lexing and parsing to allow for additional robustness and ergonomics:
- any identifier
i
will be converted to the constanti
to allow implicit multiplications of variables by i, such asix
. - due to the lack of logical operator overloading in verbena, as well as the lack of a natural order on the complex numbers, function clauses are unimplemented and will be removed before compilation.
npm install verbena-complex
import { ComplexFunction } from 'verbena-complex';
const f = ComplexFunction("f(x) = re(x * (3+2i))");
console.log(f(2)); // { re: 6, im: 0 }