1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
struct IRCParser : public grammar<IRCParser>
{
template<typename ScannerT>
struct definition
{
definition( IRCParser const& self)
{
message
= ch_p(':')
>> nick
>> host
>> space_p
>> type
>> space_p
>> !argument
>> ch_p(':')
>> info
;
nick
=
(+alnum_p)[&this->nick_f] <==== Erreur
>> ch_p('!')
;
host
=
(
+alnum_p
>> ch_p('@')
>> +alnum_p
>> ch_p('.')
>> +alnum_p
)[&this->host_f] <==== Erreur
;
type
=
(+upper_p)[&this->type_f] <==== Erreur
;
argument
=
(+(anychar_p - ':'))[&this->arg_f] <==== Erreur
;
info
= (*anychar_p)[&this->info_f] <==== Erreur
;
}
rule<ScannerT> message, nick, host, type, argument, info;
rule<ScannerT> const& start() const
{
return message;
}
string snick;
string shost;
string stype;
string sarg;
string sinfo;
void nick_f( char const * first, char const * last ) { snick = string(first, last); }
void host_f( char const * first, char const * last ) { shost = string(first, last); }
void type_f( char const * first, char const * last ) { stype = string(first, last); }
void arg_f ( char const * first, char const * last ) { sarg = string(first, last); }
void info_f( char const * first, char const * last ) { sinfo = string(first, last); }
};
};
int main()
{
IRCParser r;
string str = ":Nick!Host@name.here JOIN :#channel";
parse( str.c_str(), r );
return 0;
} |
Partager