Parselix

A parser combinator library for Elixir.
hex.pm version

Document

Parselix Document

Features

For what?

Installation

Add {:parselix, "~> x.x.x"} to deps of your app.

Example

JSON

See the json parser implementation by Parselix.

Function style

@doc "Replaces error messages."
def error_message(parser, message) do
  fn target, position ->
    case parser.(target, position) do
      {:error, _, _} -> {:error, message, position}
      x -> x
    end
  end
end
@doc "Parse lowercase characters."
def lowercases do
  fn target, position do
    parser = lowercase() |> many_1()
    parser.(target, position)
  end
end

Function style with parser_body macro

@doc "Parse uppercase characters."
def uppercases do
  parser_body do
    uppercase() |> many_1()
  end
end

Macro style

@doc "Picks one value from the result of the given parser."
parser :pick, [parser, index] do
  parser |> map(&Enum.at(&1, index))
end
@doc "Parses the end of text."
parser :eof do
  fn
    "", position -> {:ok, :eof, "", position}
    _, position -> {:error, "There is not EOF.", position}
  end
end

Private

parserp :private_dump, [parser] do
  parser |> map(fn _ -> :empty end)
end

License

MIT

Author

ryo33