Parser combinators using LINQ monads for non-determinism