Awesome
Neotomex
Obligatory Alpha Quality Disclaimer
A PEG implementation with an Elixir interface.
While inspired by neotoma, Neotomex doesn't use functional composition. Instead, it creates a data structure representing a grammar, and then applies the data structure to an input.
NB: For now, Neotomex is a recursive rather than packrat parser.
Usage
By taking advantage of pattern matching and Elixir's macros, Neotomex provides a fresh DSL for specifying grammars.
Here's a simple grammar for parsing a number:
defmodule Number do
use Neotomex.ExGrammar
@root true
define :number, "digit+" do
digits -> digits |> Enum.join |> String.to_integer
end
define :digit, "[0-9]"
end
42 = Number.parse! "42"
See the /examples
directory for other examples, including a
json grammar.
Learning More
Check out the module docs to learn more about how Neotomex specifies grammars, and how to write your own:
iex> h Neotomex.Grammar
iex> h Neotomex.ExGrammar
Look in examples/
for existing usage.
Roadmap
- Packrat parsing
- Match labels a la neotoma (e.g. a:match)
Copyright (c) Thomas Moulia, 2014