shift-forth
About
JavaScript Compiler library that takes input in Shift-AST format in SSA form and produces Forth program.
The library uses: shift-traverse-js library for AST traversal.
Status
Initial code.
Installation
npm install shift-forth
Usage
Require Parser, Scope analyzer, and Shift-Forth.
var parse = default analyze = default forth = ;
Parse JavaScript string, analyze scope, emit Forth string.
var source tree scope; source = 'function sub (a, b) { return a - b; }';tree = ; // Shift ASTforth; // add names to noname AST nodesscope = ; // Scoped ASTforth; // add dependency graphforth; // add Forth definition to scoped ASTconsole;
Should produce the following Forth program:
: sub - exit ;
Examples
Source
{ return a + 42;} { return a - b;} { return a * g0;} { return b + c + a;} { return a + b + c;} { var x; x = a + b; return x;}
Forth optimized version
variable g0: add42 42 + exit ;: sub - exit ;: mul_global g0 @ * exit ;: add3_fast + + exit ;: add3_slow 2 pick 2 pick + + nip nip exit ;: add_var + exit ;
Forth not optimized version with comments
variable g0 : add42 ( a:$2 )0 pick ( a: $2:$1 )42 ( a: $2:$1 $3:$1 )+ nip ( $1:$0 )exit ( $1:$0 ); ( $1:$0 ) : sub ( a:$2 b:$3 )1 pick ( a: b:$3 $2:$1 )1 pick ( a: b: $2:$1 $3:$1 )- nip nip ( $1:$0 )exit ( $1:$0 ); ( $1:$0 ) : mul_global ( a:$2 )0 pick ( a: $2:$1 )g0 @ ( a: $2:$1 $3:$1 )* nip ( $1:$0 )exit ( $1:$0 ); ( $1:$0 ) : add3_fast ( a:$5 b:$3 c:$4 )1 pick ( a:$5 b: c:$4 $3:$2 )1 pick ( a:$5 b: c: $3:$2 $4:$2 )+ nip nip ( a:$5 $2:$1 )1 pick ( a: $2:$1 $5:$1 )+ nip ( $1:$0 )exit ( $1:$0 ); ( $1:$0 ) : add3_slow ( a:$3 b:$4 c:$5 )2 pick ( a: b:$4 c:$5 $3:$2 )2 pick ( a: b: c:$5 $3:$2 $4:$2 )+ ( a: b: c:$5 $2:$1 )1 pick ( a: b: c: $2:$1 $5:$1 )+ nip nip nip ( $1:$0 )exit ( $1:$0 ); ( $1:$0 ) : add_var ( a:$2 b:$3 )1 pick ( a: b:$3 $2:$1 )1 pick ( a: b: $2:$1 $3:$1 )+ nip nip ( $1:x ) ( x:$5 )0 pick ( x: $5:$4 )nip exit ( $5:$4 ); ( $5:$4 )
License
MIT