Listing 4: The sequence class
// Copyright (c) 2001, Joel de Guzman and Dan Nuffer // Permission is granted to use this code without restriction as // long as this copyright notice appears in all source files. template <typename A, typename B> struct sequence : public binary<A, B> , public parser<sequence<A, B> > { sequence(A const& a, B const& b) : binary<A, B>(a, b) {} template <typename IteratorT> match parse(IteratorT& first, IteratorT const& last) const { IteratorT s = first; match ma, mb; if ((ma = this->left().parse(s, last)) && (mb = this->right().parse(s, last))) { first = s; return ma + mb; } return match(); } };