51 namespace identifier {
53 template<
class CharSeq>
73 template<
class CharSeq>
80 size_t len =
id.length();
84 if (!strncmp(&*chew,
id.data(),len)) {
85 size_t where = size_t(chew);
102 template<
class CharSeq>
107 if (!symname.length()) {
109 "Identifier needed instead of \""
110 << chew.
buf().substr(
size_t(chew)) <<
'\"' <<
emit();
template struct traits::is_random_access_char_sequence<T> exports a static const boolean member value...
bool is_start_char(char ch)
Say whether a character can be the first of an identifier.
std::string find_any_in(chewer< CharSeq > &chew, size_t &off)
Search a terminal portion of a CharSeq for any identifier.
size_t find_first_in(std::string const &id, chewer< CharSeq > &chew)
Find the first occurrence of an identifier within a terminal segment a CharSeq
sequence_type & buf()
Get a [const] reference to the associated sequence_type
std::string read(chewer< CharSeq > &chew)
Read an identifier from an chewer<CharSeq>
chew_mode::name const name
An exemplar chew_mode::name
The tag class is inserted in a diagnostic_base to tell it to emit itself.
bool is_valid_char(char ch)
Say whether a character can occur in an identifier.
`template struct chewer<CharSeq> is a cursor-like type that is associated with a character-sequence t...
error_msg< 13 > error_not_identifier
Report that a valid preprocessor identifier was not found where required.
template class canonical<What> encapsulates the canonical representation of values of type What...
chew_mode::literal_space const literal_space
An exemplar chew_mode::literal_space