@onlabsorg/swan-js

0.13.0 • Public • Published

SwanJS

SwanJS is an expression language that runs in any JavaScript environment.

swan = require('swan-js');              // load the library
evaluate = swan.parse( "3 * x" );       // compile an expression
context = swan.createContext({x:10});   // create an expression context
value = await evaluate(context);        // evaluate expression in context: 30

You can install SwanJS via npm:

npm install @onlabsorg/swan-js

Syntax

A Swan expression is simply a sequence of binary operations (operand operator operand operator operand ...), eventually grouped with parentheses (...), square braces [...] or curly braces {...}.

The available binary operations are:

  • Arithmetic operations: x + y, x - y, x * y, x / y, x % y, x ^ y
  • Comparison operations: x == y, x != y, x > y, x >= y, x < y, x <= y
  • Logic operations: x & y, x | y
  • Conditional and alternative operations: x ? y, x ; y, or combined x ? y ; z
  • Pairing operation: x , y
  • Application (function call): x y
  • Function definition: x -> y
  • Composition operations: g << f, f >> g
  • Mapping operation: x => f
  • Assignment operations: name = x, name: x
  • Sub-contexting operation: x.y

The types of grouping available are:

  • Parentheses to alter evaluation precedence: (expr)
  • Square braces to create lists: [x1, x2, x3, ...]
  • Curly braces to create namespaces: {n1:v1, n2=v2, n3:v3, ...}

The data types defined in swan are:

  • Nothing, or empty tuple: ()
  • Bool: TRUE, FALSE
  • Numb: 123.4
  • Text: "abc", 'abc', `abc`
  • List: [a, b, c, ...]
  • Namespace: {n1:v1, n2=v2, n3=v3, ...}
  • Func: names -> expression
  • Undefined: undefined(operationName, operands)
  • Tuple: x1, x2, x3, ...

Besides these operations, Swan defines also some essential builtins, consisting in functions constants.

Learn more

License

MIT

Related projects

  • olojs is a template engine and content management system that uses swan as inline expression language

Package Sidebar

Install

npm i @onlabsorg/swan-js

Weekly Downloads

204

Version

0.13.0

License

MIT

Unpacked Size

459 kB

Total Files

50

Last publish

Collaborators

  • onlabsorg