J'ai une question sur les actions sémantiques sur l'esprit de boost avec l'opérateurBoost actions sémantiques avec « > » opérateur
Je suis cette règle « > » qui fonctionne parfaitement ..
ifelse = (iter_pos >>
nocaselit(L"if") >> expression >> nocaselit(L"then") >>
block_statements_eol >> -ifelse_ifelse >> nocaselit(L"end") >> nocaselit(L"if") >>
iter_pos)
[_val = construct<common_node>(type_cmd_ifelse,LOCATION(_1,_5), key_cond, _2, key_seq, _3, key_else, phoenix::bind(&makeOptNode, _4))];
Pour ajouter un peu gestion des erreurs J'ajoute aussi les trucs on_error à mon analyseur. Pour autant que je l'ai compris, je dois aussi ajouter des "points d'attente" pour que l'erreur soit correcte.
Donc je change la grammaire à celle-ci (remplacez le >> par>) pour donner des informations sur le retour arrière et signaler les erreurs.
ifelse = (iter_pos >>
nocaselit(L"if") > expression > nocaselit(L"then") >>
block_statements_eol > -ifelse_ifelse > nocaselit(L"end") > nocaselit(L"if") >>
iter_pos)
[_val = construct<common_node>(type_cmd_ifelse,LOCATION(_1,_5), key_cond, _2, key_seq, _3, key_else, phoenix::bind(&makeOptNode, _4))];
A ce stade, je reçois le C++ erreur du compilateur index non valide pour _3 et _4 .. il semble donc que l'action sémantique doit être changé en quelque sorte, mais je ne sais pas comment.