Skip to content

Instantly share code, notes, and snippets.

@PollRobots
Last active December 11, 2015 06:49
Show Gist options
  • Select an option

  • Save PollRobots/4562318 to your computer and use it in GitHub Desktop.

Select an option

Save PollRobots/4562318 to your computer and use it in GitHub Desktop.
let rec pegToString expr =
let pegToStringParen = function
| Terminal _ | NonTerminal _ | Epsilon as x -> pegToString x
| x -> "(" + pegToString x + ")"
match expr with
| Terminal x -> "\"" + x + "\""
| NonTerminal x -> x
| Epsilon -> "<epsilon>"
| Sequence x -> List.map pegToStringParen >> List.reduce (fun a b -> a + " " + b) <| x
| Choice x -> List.map pegToStringParen >> List.reduce (fun a b -> a + " / " + b) <| x
| ZeroOrMore x -> pegToStringParen x + "*"
| OneOrMore x -> pegToStringParen x + "+"
| Optional x -> pegToStringParen x + "?"
| And x -> "&" + pegToStringParen x
| Not x -> "!" + pegToStringParen x
let printPeg expr =
printfn "%s" <| pegToString expr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment