Header lexy/dsl/return.hpp

Rule lexy::dsl::return_

namespace lexy::dsl
    constexpr rule auto return_;

return_ is a rule that terminates parsing of the current production early.


It is not used inside loops (e.g. lexy::dsl::loop, lexy::dsl::while_, lexy::dsl::list).


Always succeeds without consuming any input. Parsing of the current production is then finished.




None; but all existing values are immediately parsed to the context, e.g. the callback is immediately invoked if lexy::parse() is used.

Example 1. Parse a (simplified) XML element, which can be empty
struct production
    static constexpr auto rule = [] {
        auto tag_name = dsl::identifier(dsl::ascii::alpha);

        // If we're having tag name followed by a `/`,
        // it is an empty element without content.
        // Immediately return in that case.
        auto if_empty  = dsl::if_(dsl::lit_c<'/'> >> dsl::return_);
        auto open_tag  = dsl::angle_bracketed(tag_name + if_empty);
        auto close_tag = dsl::angle_bracketed(dsl::lit_c<'/'> + tag_name);

        // Placeholder content.
        auto content = LEXY_LIT("content");

        return open_tag + content + close_tag;
See xml.cpp for a more complete XML parser.

See also