### 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.