YALI.js
Yet Another Lox Interpreter. Yet Another Lox Interpreter. Javascript Implementation. A Parser, Interpreter, REPL, Code Formatter and Transpiler for the Lox programming language implemented in Javascript.
Install / Use
/learn @danman113/YALI.jsREADME
YALI.js
Yet Another Lox Interpreter. Javascript Implementation
Lox is a Dynamically Typed Programming Language created by Bob Nystrom for his excellent book Crafting Interpreters.
This is yet another Javascript Implementation.
Try it out in the Playground!
Installation
$ npm install yalijs
CLI Usage
File
$ yali loxfile.lox
REPL
$ yali
> print "No semicolons needed!"
loxfmt
$ loxfmt --write --indent=" " loxfile.lox
lox2python
$ lox2python loxfile.lox --out="a.py"
OR
$ lox2python loxfile.lox | python
Embedding in your JS App
The main interface of YALI.js is a run method that will tokenize, parse, and interpret your lox source code, all in one function.
run(source_code, environment = new Environment(), printfn = console.log, debug = false)
You can pass in an environment object, which lets you define built-in variables and functions like so:
const { run, Environment } = require('yalijs')
const env = new Environment()
env.setBuiltin('owner', 'dberezin')
env.setBuiltin('meaning_of_life', 42)
env.setBuiltin('alert', (interpreter, arg) => alert(arg[0]))
run('print meaning_of_life;', env)
You can also pass in a printfn that will be called for every print statement. Here's an example for capitalizing each word in the stdout:
run(
'print "hello world";',
new Environment(),
out => console.log(out.split(' ').map(_.capitalize).join(' '))
)
> Hello World
Parsing
YALI.js also provides a parse function to tokenize and parse lox source code, returning an array of AST nodes that can be manipulated as desired. See any of the transpiler examples for reference.
Contribute
For any bugs and feature requests please open an issue. For code contributions please create a pull request. Enjoy!
Related Skills
node-connect
345.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
106.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
