YuyaAizawa/peg/2.0.0

NOTE: the latest version is 2.2.0

Rerouted (retagged, needs approval). The tag now points at a different commit than when this version was published. The Lamdera package server serves a copy recovered from https://github.com/YuyaAizawa/peg.

What we checked: Tag 2.0.0 is still on github.com/YuyaAizawa/peg; its commit 5132956e1ccc is from 2020-01-20 23:50 UTC, after the version was published (2020-01-19 12:32 UTC); elm.json is byte-identical to package.elm-lang.org's; the exposed modules match docs.json; the zip's SHA-1 is not the published one and nothing else confirms its contents.

We could not verify this copy against what was published, so the Lamdera compiler asks before using it (y/n). Without a terminal, as in CI, it stops with an error unless approved:

  • lamdera make --auto-approve-package-rerouting approves rerouted versions for that run,
  • LAMDERA_AUTO_APPROVE_PACKAGE_REROUTING=1 does the same for every run in that environment,
  • LAMDERA_CACHE=off skips the Lamdera package server altogether: packages come from package.elm-lang.org and GitHub only, as with elm, and a rerouted version then fails to download.

Details · package.elm-lang.org's zip: https://github.com/YuyaAizawa/peg/zipball/2.0.0/

PEG for Elm

A parser combinator implementation for Parsing Expression Grammer (PEG).

Usage

  1. Make base parser.
  2. Combine parsers.
  3. Use parse function to get result.

-- 1. Make base parser.
numbers =
  chars Char.isDigit

minus =
  match "-"
    |> option
    |> map (Maybe.withDefault "")


-- 2. Combine parsers.
intParser =
  seq2
  minus numbers
  (\minusStr numberStr -> minusStr ++ numberStr)
    |> flatMap (\str ->
      case String.toInt str of
        Just i -> return i
        Nothing -> fail)

-- 3. Use `parse` function to get result.
result =
  intParser |> parse "42" -- Just 42

Example

We will present mini-C parser example. COMING SOON!

License

BSD-3-Clause. see LISENCE file.