Rule
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.
Requirements
In this table:
-
T
is a type meeting the requirements of Rule -
t
is a const value of typeT
-
it
is an lvalue with type cpp:char const*[] -
end
is a value of type cpp:char const*[]
Expression | Type | Semantics, Pre/Post-conditions |
---|---|---|
|
- |
Copy construction of
|
[]T::value_typecpp: |
- |
Values of this type are returned by the rule when the parse operation is successful |
[]t.parse(it,end)cpp: |
[]result<T::value_type>cpp: |
Attempt to parse the buffer of characters defined by the range []// [it,end)cpp:. Upon success, the return result holds an instance of the rule’s value type, and the reference parameter []itcpp: is modified to point to the first unconsumed character. Otherwise, upon failure the result holds an error. In this case the implementation defines if and how the reference parameter []itcpp: is modified. |
Exemplar
For best results, it is suggested that all constructors for rules be marked []constexprcpp:.
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{};