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