transparent-lang

0.0.10 • Public • Published

Transparent Lang Build Status

Small DSL for the transparent-tank project.

    npm install transparent-lang

Usage:

transparent-lang supports:

  • Expressions such as height * width
  • Boolean expression such as shape = "square"
  • Rules such as area = height * width if shape = "square"

Expressionss

  // 1. Define your data
  const variables = {
    height: 4,
    width: 5
  };

  const symboltable = {
    lookup: key => variables[key],
    restrict: () => {}
  };

  // 2. Deine your expression
  let expression = new Expression( 'height * width', symboltable );

  // 3. Evaluate the expression over your data
  expression.eval(); // returns 20

Bools

  // 1. Define your data
  const variables = {
    shape: 'square'
  };

  const symboltable = {
    lookup: key => variables[key],
    restrict: () => {}
  };

  // 2. Deine your expression
  let expression = new Bool( 'shape = "square"', symboltable );

  // 3. Evaluate the expression over your data
  expression.eval(); // returns true

Rules

  // 1. Define your data
  const variables = {
    shape: 'square'
    height: 4,
    width: 5,
    area: null
  };

  const symboltable = {
    lookup: key => variables[key],
    restrict: (key, value) => variables[key] = value
  };

  // 2. Deine your expression
  let rule = new Rule( 'area = height * width if shape = "square"', symboltable );

  // 3. Evaluate the rule over your data
  rule.eval(); // returns true

  // OBS! variables.area is now 20

Grammar

Find a visual representation of the grammar here: Grammar.

rule                ::= ( statement EOL )* statement? EOF
statement           ::= binaryMExpression ( 'IF' bexpression )?
bexpression         ::= bterm ( 'OR' bterm )*
bterm               ::= bconstant | bunaryOp | bparenthesis | binaryBExpression
                        ( 'AND' ( bconstant | bunaryOp | bparenthesis | binaryBExpression ) )*
binaryBExpression   ::= bfactor equality bfactor
bfactor             ::= bconstant
                      | bunaryOp
                      | identifier
                      | literal
binaryMExpression    ::= mexpression equality mexpression
equality             ::= '='
                      | '<>'
                      | '>'
                      | '>='
                      | '<'
                      | '<='
mexpression         ::= mterm ( ( '+' | '-' ) mterm )*
mterm               ::= mterm2 ( '^' mterm2 )*
mterm2              ::= mfactor ( ( '*' | '/' ) mfactor )*
mfactor             ::= munaryexpression
                      | identifier
                      | literal
                      | '(' mexpression ')'
literal             ::= number
                      | "'" name "'"
                      | '"' name '"'
                      | bconstant
bconstant           ::= 'false'
                      | 'true'
munaryExpression    ::= munaryOp '(' mfactor ')'
munaryOp            ::= 'COS'
                      | 'SIN'
                      | 'TAN'
                      | 'EXP'
                      | 'LN'
                      | 'ABS'
                      | 'SQRT'
                      | 'LOG10'
                      | 'ARCSIN'
                      | 'ARCCOS'
                      | 'ARCTAN'
                      | 'CEIL'
                      | 'TRUNC'
                      | 'FLOOR'
                      | 'ROUND'
sign                ::= '+' | '-'
number              ::= [0-9]+ ( '.' [0-9]+ )?
identifier          ::= name
name                ::= [a-zA-Z_] [0-9a-zA-Z_]*

Readme

Keywords

none

Package Sidebar

Install

npm i transparent-lang

Weekly Downloads

3

Version

0.0.10

License

MIT

Last publish

Collaborators

  • maate