### NAME
Lox - A Perl implementation of the Lox programming language
### DESCRIPTION
A Perl translation of the Java Lox interpreter from
[Crafting Interpreters](
https://craftinginterpreters.com/).
### INSTALL
As long as you have Perl 5.24.0 or greater, you should be able to run `plox`
from the root project directory.
If you'd rather build and install it:
$ perl Makefile.PL
$ make
$ make test
$ make install
### SYNOPSIS
If you have built and installed `plox`:
$ plox
Welcome to Perl-Lox version 0.02
>
$ plox hello.lox
Hello, World!
Otherwise from the root project directory:
$ perl -Ilib bin/plox
Welcome to Perl-Lox version 0.02
>
$ perl -Ilib bin/plox hello.lox
Hello, World!
Pass the `--debug` or `-d` option to `plox` to print the tokens it scanned
and the parse tree.
### TESTING
The test suite includes 238 test files from the Crafting Interpreters
[repo](
https://github.com/munificent/craftinginterpreters).
$ prove -l t/*
### EXTENSIONS
Perl-Lox has these capabilities from the "challenges" sections of the book:
- Anonymous functions `fun () { ... }`
- Break statements in loops
- Multi-line comments `/* ... */`
- New Exceptions:
- Evaluating an uninitialized variable
### DIFFERENCES
Differences from the canonical "jlox" implementation:
- repl is stateful
- signed zero is unsupported
- methods are equivalent
Prints "true" in plox and "false" in jlox:
class Foo { bar () { } } print Foo().bar == Foo().bar;
### AUTHOR
Copyright 2020 David Farrell
### LICENSE
See `LICENSE` file.