Parselix v0.4.0 Parselix
Provides the macro for creating parser and some helper functions.
Examples
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