Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wizzard0/js2lua
Javascript to Lua translator
https://github.com/wizzard0/js2lua
Last synced: 3 months ago
JSON representation
Javascript to Lua translator
- Host: GitHub
- URL: https://github.com/wizzard0/js2lua
- Owner: wizzard0
- Created: 2015-01-22T10:04:36.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2018-02-20T08:53:10.000Z (over 6 years ago)
- Last Synced: 2024-01-19T22:58:51.143Z (5 months ago)
- Language: JavaScript
- Homepage: https://tvori.info/
- Size: 10.6 MB
- Stars: 201
- Watchers: 19
- Forks: 17
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Lists
- my-awesome-lua - js2lua - Javascript to Lua translator, using LuaJIT (Resources / Transpiler Lua to JS and vice versa)
README
# Javascript to Lua translator
### Hey, I heard Javascript was made in 10 days!
So... this is an experiment with making a full-blown Javascript to Lua translator, preserving semantics and so on.
It's a single-pass transpiler that directly generates Lua code from the Esprima AST, without any kind of IR.
Quick-and-dirty, cutting corners, etc etc - don't expect much of this code :)
For example, each ternary expression (?:) generates 4 function calls and a closure - too lazy to implement anything more clever :)Runs on vanilla LuaJIT, without any C modules or hacking the VM (e.g. Tessel runs on Lua, too, but on heavily modified runtime, which I didnt like)
Oh, and it probably can't bootstrap itself right now. Anyone willing to make it self-hosting? That would be cool :)
Results on ES5 test suite in 10 days:
`Passed: 3659 Failed: 7753 Cannot Translate: 138 Skipped: 175 Total: 11725 Time: 1479.842`**UPDATE: For more complete variants, see https://github.com/PaulBernier/castl. Also, https://github.com/Etiene/js2lua**
## Requirements and usage
Uses LuaJIT, esprima, lua-date, lpeglj, ta-regex, ast-hoist, esutils, escodegen
Tested under LuaJIT 2.1+ and node 0.10+.
Assumes LuaJIT binary at `\bin\luajit\luajit`
To run something: `node run.js something.js`. After translation, you can also use `luajit something.lua` to run translated code directly.
To run tests: `node test\test.js test\sometestname.js`. It compares STDOUT of JS and Lua versions to decide if the test passed.
To run entire ES5 test suite: `node test\test.js test\es5\**\*.js` (WARNING: Full suite takes over 20 minutes on fast, SSD-equipped machine!)
Some tests are blacklisted (grep for LUA_SKIP) because they cause infinite loop or do something similarly bad, they're marked as "skipped".License: MIT
(c) 2015 Oleksandr Nikitin