0.26.0 • Published 3 months ago

patrisika v0.26.0

Weekly downloads
269
License
MIT
Repository
github
Last release
3 months ago

Patrisika Revented

An library converts orthogonal AST into SpiderMonkey AST.

Semantics

AST for Patrisika is provided as JavaScript arraies. The following forms represents a node:

'identifier'

Represents a variable.

'.quote', value

Represents a literal value.

'.unit'

Represents undefined value.

'.thisp'

Represents this reference.

'.argsp'

Represents argument list passed into the current function.

['.lambda', ...params, body]

Defines an anonymous function.

'.list', ...items

Represents an array.

['.hash', ...'propName', propValue]

Represents an object.

'.', base, member

Represents a membering operation, i.e. base[member].

'.if', condition, consequent, alternate?

Represents a conditional evaluation.

'.while', condition, body

Represents a while loop evaluation. It returns the value of body in the last evaluation.

'.begin', ...items

Represents a sequencial evaluation. Returns the last item evaluated.

'.return', value

Return a value. Similar to JavaScript return statement.

['.try', block, param, handler]

Represents a exception handling expression. Returns the value of block normally, or the value of handler1 when a exception is thrown during evaluating block.

'.throw', value

Throws value as an exception.

'.set', left, right

Assign right to variable or property node left.

fn, ...args

Once fn is a valid node, it means a common function invocation.

'.new', callee, ...args

Initiates an instance of constructor callee, with args as arguments.

'.yield', value

Represents a ES6 yield expression. Any functions directly containing such node will become a generator function described in ES6 specification.

['.beta', ...params, body, ...args]

Represents a beta redex which is similar to [['.lambda', [...params], body], ...args], used to implement semantics of let in scheme.

Operators

  • Unary operator
    • ['.typeof', x] : typeof
    • ['!', x] : !
    • ['+', x] : +
    • ['-', x] : -
  • Binary and Logical operator
    • ['+', x, y] : + (both numeric and string)
    • ['-', x, y] : -
    • ['*', x, y] : *
    • ['/', x, y] : /
    • ['%', x, y] : %
    • ['<', x, y] : <
    • ['>', x, y] : >
    • ['<=', x, y] : <=
    • ['>=', x, y] : >=
    • ['===', x, y] : ===
    • ['!==', x, y] : !==
    • ['=~', x, y] : ==
    • ['!~', x, y] : !=
    • ['.is', x, y] : instanceof
    • ['&&', x, y] : &&
    • ['||', x, y] : ||

Usage

Using Patrisika is pretty simple and straight forward:

// Note : global scopes must be provided. Undeclared variables in Patrisika
//        are treated as local variables, instead of global.
var globalScope = new Patrisika.DefaultExterns;
globalScope.declare("globalVariable");
patrisika.compile(ast, globals);
0.26.0

3 months ago

0.25.0

2 years ago

0.24.0

2 years ago

0.23.0

3 years ago

0.22.2

4 years ago

0.22.1

4 years ago

0.22.0

4 years ago

0.21.0

8 years ago

0.20.3

8 years ago

0.20.2

8 years ago

0.20.1

8 years ago

0.20.0

8 years ago

0.19.3

8 years ago

0.19.2

9 years ago

0.19.1

9 years ago

0.19.0

9 years ago

0.18.4

9 years ago

0.18.3

9 years ago

0.18.2

9 years ago

0.18.1

9 years ago

0.18.0

9 years ago

0.17.0

9 years ago

0.15.0

9 years ago

0.13.2

9 years ago

0.13.0

9 years ago

0.12.0

9 years ago

0.10.0

9 years ago

0.9.0

9 years ago

0.8.0

10 years ago

0.7.0

10 years ago

0.6.0

10 years ago

0.5.0

10 years ago

0.1.0

11 years ago