Did you know ... | Search Documentation: |
![]() | Pack transpiler -- README.md |
Universal-transpiler is a source-to-source compiler that translates a subset of most programming languages into several others.
The original version of this translator was written in JavaScript, but [a better version has been written in Prolog](universal-transpiler.pl).
This is some JavaScript code:
function add(a,b){ var g = [3,4,5]; return a+b+(g[0])+(g.length); } function divide(a,b){ return a/b; }
and this is the Java code that it generates:
public static int add(int a,int b){ int[] g={3,4,5}; return a+b+(g[0])+(g.length); } public static int divide(int a,int b){ return a/b; }
#How to use this translator
Install the package by typing pack-install(transpiler)
in the SWI-Prolog console.
Now, you can use the translator to convert JavaScript source code into Lua:
:- use_module(library(transpiler)). :- set_prolog_flag(double_quotes,chars). :- initialization(main). main :- translate('function add(a,b){return a + b;}',lua,X),writeln(X).
#How to extend the translator
A limited number of translation rules are provided here, but you can easily add your own rules to universal-transpiler.pl
.
This is a simplified version of one of its translation rules, implementing the sine function:
%The type of this expression is double. parentheses_expr(Data,double,sin(Var1_)) --> { %The parameter of the sine function can be an integer or double. Var1 = expr(Data,double,Var1_) }, langs_to_output(Data,sin,[ ['java','javascript']: ("Math",ws,".",ws,"sin",ws,"(",ws,Var1,ws,")"), ['lua','python']: ("math",python_ws,".",python_ws,"sin",python_ws,"(",python_ws,Var1,python_ws,")"), ]).