Skip to content

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.

License

Notifications You must be signed in to change notification settings

danman113/YALI.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

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!

About

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.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published