Current section

Files

Jump to
minipeg lib minipeg combinators convenience.ex
Raw

lib/minipeg/combinators/convenience.ex

defmodule Minipeg.Combinators.Convenience do
@moduledoc ~S"""
Convenience combinators, combining more basic combinators and mappers
"""
use Minipeg.Types
alias Minipeg.Combinators.{Base, Mapping}
alias Minipeg.Parser
@spec many_as_string(Parser.t(), maybe(binary), non_neg_integer()) :: Parser.t()
def many_as_string(parser, name \\ nil, min_count \\ 0) do
Base.many(parser, name, min_count)
|> Mapping.map(&IO.chardata_to_string/1)
end
@spec many_sel(list(Parser.t()), maybe(binary), non_neg_integer()) :: Parser.t()
def many_sel(parsers, name \\ nil, min_count \\ 0) do
name1 = name || ("many_sel:[#{parsers |> Enum.map_join("|", &(&1.name))}]")
Base.many(Base.select(parsers), name1, min_count)
end
def many_seq(parsers, name \\ nil, min_count \\ 0) do
name1 = name || ("many_seq:[#{parsers |> Enum.map_join("...", &(&1.name))}]")
Base.many(Base.sequence(parsers), name1, min_count)
end
end
# SPDX-License-Identifier: Apache-2.0