public
Description: Erlang library and packrat parser-generator for parsing expression grammars.
Homepage:
Clone URL: git://github.com/seancribbs/neotoma.git
name age message
file .gitignore Sat Oct 31 12:16:06 -0700 2009 Big spike: standalone parsers, escape NTs, rena... [seancribbs]
file LICENSE Wed Jun 10 19:57:31 -0700 2009 Add MIT license. [seancribbs]
file Makefile Loading commit data...
file README.textile Thu Jun 25 08:48:34 -0700 2009 Remove Rakefile now that make works. [seancribbs]
directory extra/
directory priv/
directory src/
directory tests/
README.textile

Neotoma

About

Neotoma is a packrat parser-generator for Erlang for Parsing Expression Grammars (PEGs).
It consists of a parsing-combinator library with memoization routines, a parser for PEGs,
and a utility to generate parsers from PEGs. It is inspired by treetop, a Ruby library with
similar aims, and parsec, the parser-combinator library for Haskell.

Neotoma is licensed under the MIT License (see LICENSE).

Features

  1. Simple, declarative parsers generated from even simpler grammars.
  2. Fully integrated, single-pass lexical and syntactic analysis (a feature of PEGs).
  3. Packrat-style memoization, boasting parse-time bound linearly to the input size (at the expense of memory usage).
  4. In-place semantic analysis/transformation, supporting single-pass end-to-end in some applications.
  5. Erlang code-generation for the lexical/syntactic analysis piece, with the option of semantic analysis/transformation in a separate module.
  6. Line/column number tracking for easy resolution of parsing errors.

Installation

  1. Clone the repository from github:
    $ git clone git://github.com/seancribbs/neotoma.git
  2. Symlink or copy the cloned repository to somewhere in your Erlang code path. $ERLANG_HOME/lib is best.
  3. Build the source:
    $ make

Usage

  1. After making sure the library is in your code path, fire up an Erlang shell.
  2. To generate a parser from a PEG, use peg_gen:file/1,2 (more detailed documentation pending). For PEG examples, see the extra/ directory in the repository.
1> peg_gen:file("extra/arithmetic.peg").
This will place arithmetic.erl in the same directory as the .peg file by default.

Contributing

Please send pull-requests to ‘seancribbs’ on github. When submitting a patch, eunit tests are strongly encouraged.