...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
A Rule defines an algorithm used to match an input buffer
of ASCII characters against a set of syntactical specifications. Each rule
represents either a terminal symbol or a composition in the represented grammar.
The library comes with a set of rules for productions typically found in
RFC documents. Rules are not invoked directly; instead, rule variables are
used with overloads of parse
which provide a convenient,
uniform front end.
In this table:
T
is a type meeting the
requirements of Rule
t
is a const value of
type T
it
is an lvalue
with type char const*
end
is a value of type
char const*
Table 1.38. Valid expressions
Expression |
Type |
Semantics, Pre/Post-conditions |
---|---|---|
T(t) |
Copy construction of
|
|
T::value_type |
Values of this type are returned by the rule when the parse operation is successful |
|
t.parse(it,end) |
|
Attempt to parse the buffer of characters defined by the range
|
For best results, it is suggested that all constructors for rules be marked
constexpr
.
struct Rule { struct value_type; constexpr Rule( Rule const& ) noexcept = default; auto parse( char const*& it, char const* end ) const -> result< value_type >; }; // Declare a variable of type Rule for notational convenience constexpr Rule rule{};