Header lexy/dsl/newline.hpp

The newline and eol token rules.

Token rule lexy::dsl::newline

lexy/dsl/newline.hpp
namespace lexy
{
    struct expected_newline {};
}

namespace lexy::dsl
{
    constexpr token-rule auto newline;
}

newline is a token rule that matches a newline.

It is entirely equivalent to lexy::dsl::literal_set` containing of the literals "\r\n" and "\n", where the error has been overridden to lexy::expected_newline.

Example 1. Match a newline at the end
struct production
{
    static constexpr auto rule = LEXY_LIT("Hello") + dsl::newline;
};
Caution
As a token rule, it matches whitespace immediately following the newline. As such, the rule is best used in contexts where automatic whitespace skipping is disabled, or where it doesn’t include newline characters.
Caution
Differentiate between lexy::dsl::ascii::newline, which matches \r or \n, and lexy::dsl::newline, which matches \r\n or \n!

Branch rule lexy::dsl::eol

lexy/dsl/newline.hpp
namespace lexy::dsl
{
    constexpr branch-rule auto eol;
}

eol is a branch rule that matches the end of a line.

(Branch) Parsing

If at EOF, succeeds without consuming anything. Otherwise, forwards to lexy::dsl::newline

Errors

lexy::expected_newline: if it could match neither EOF nor a newline; at the starting reader position.

Parse tree

If at EOF, single token node with the lexy::predefined_token_kind lexy::eof_token_kind whose range is empty. Otherwise, the token node created by lexy::dsl::newline.

Example 2. Match a newline or EOF at the end
struct production
{
    static constexpr auto rule = LEXY_LIT("Hello") + dsl::eol;
};
Caution
The same caveat about whitespace as for newline applies here as well.

See also