Ho visto alcuni post relativi alle sfumature dell'uso di parole chiave/identificatore nelle grammatiche qi, ma non riesco a dare un senso a come l'approccio dimostrato negli esempi di boost dovrebbe funzionare ...boost :: spirit :: qi parole chiave e identificatori
Parole dichiarazione:
qi::symbols<char> keywords;
Esempio set di parole chiave:
keywords.add
("foo")
("bar")
;
Identifier dichiarazione regola:
qi::rule<std::string::const_iterator, std::string(), ascii::space_type> identifier;
Ecco come la regola identificatore è definito nelle Calc e compilatore esempi qi:
identifier = !keywords >> qi::raw[ qi::lexeme[ (qi::alpha | '_') >> *(qi::alnum | '_') ] ];
Forse sto leggendo la sintassi qi sbagliato, ma mi sembra che questo non avrebbe accettato alcun letterale che corrisponde o inizia con una parola chiave. Rifiutare una corrispondenza di parola chiave completa è il comportamento desiderato. Ma, voglio accettare "cibo" come identificatore, anche se inizia con la parola chiave "pippo". Questo mi sembra un caso d'uso piuttosto comune, ma ho difficoltà a trovare la documentazione che la inchioda davvero.
Qualcuno può offrire una regola di identificazione che rifiuta solo corrispondenze esatte per parole chiave?
Grazie!
In realtà questa domanda merita alcuni voti.Dovrebbe essere molto più spesso realizzato e probabilmente indirizzato negli Spirit Tutorials, poiché viene spesso trascurato (ovviamente ** [i campioni del compilatore] (http://www.boost.org/doc/libs/1_57_0/libs/spirit/example/qi/compiler_tutorial /) ** sono ok) – sehe