import pry.atoms, pry.stream; import std.range.primitives, std.typecons; alias S = SimpleStream!string; with(parsers!S) { auto elements = seq(tk!'a', range!('a', 'd'), tk!'c'); S s = S("abc"); Tuple!(dchar, dchar, dchar) val; S.Error err; assert(elements.parse(s, val, err)); assert(s.empty); assert(val == tuple('a', 'b', 'c')); s = S("axc"); assert(!elements.parse(s, val, err)); assert(s.front == 'a'); assert(err.location == 1); }
Apply multiple parsers one after another as a sequence.