Leg 0.1.3
=========

This is a release of Leg, a Lua library exporting a complete Lua 5.1 grammar
and a small API for user manipulation.


Dependencies
------------

* You need, understandably, to have Lua 5.1 up and running to be able to use
this library :)

* Also, Leg uses LPeg 0.7 extensively for pattern matching, so LPeg is
expected be installed. You can get LPeg at

http://www.inf.puc-rio.br/~roberto/lpeg.html


Basic Installation
------------------

There are three ways to install Leg:

* `make install`

  Run `make install`, and a directory called `leg` with the source files inside
  will be put in a specific path. Tweak Makefile's LUA_LIB variable to
  indicate the appropriate path for your system; Makefile ships with it set
  to /usr/local/share/lua/5.1 . Make sure you have the proper permissions to
  access the path you want; if not or in doubt, use the `make` option below.

* `make` or `make leg`

  A directory `leg` will be created in your working directory, with the
  source files inside. Just put it in a LUA_PATH-visible place and you're
  ready to go.

* by hand

  If you don't have, don't want to or can't use `make`, you can just put all
  the files in `src` inside a directory called `leg`, and put that directory
  in your LUA_PATH.


Read the Lua Reference Manual for the LUA_PATH and the LUA_CPATH syntax
(http://www.lua.org/manual/5.1/manual.html#pdf-package.path).


Copyright
---------

See the file "COPYRIGHT".


Bug Fixes and New Stuff
-----------------------

See the file "release".


Testing
-------

You can either:

* run `make test`; or

* go to the directory `tests` and run `test.lua`.

Both do the same thing.


Work to do
----------

* Improve error checking: currently it is bolted on and not extensible, and
  different patterns react differently to mismatching: scanner.STRING throws
  an error when a mismatch happens, but some errors simply return false and an
  error message. I don't know a good way to handle this.

* A better API for grammar extensions. The current one is very ad hoc, and
  requires some fine tuning to make sure it works correctly. Metalua's API
  seems interesting, and was originally based on Parsec. Investigation is
  under way.

* The binary operators' precedences isn't enforced in the grammar; one must
  enforce it by hand when capturing expressions. This can be very annoying.

* More thorough testing.
