我想解析特殊的结构,把剩下的扔掉。但我不想使用skipper。我想获得这些构造的vector,所以我使用KleeneStar解析器作为主要规则。但是,每当有东西被丢弃时,一个默认构造的元素就会被插入到vector中。这是一个虚构的例子。它只查找字符串Test并丢弃其余部分,至少这是计划。但是每次规则garbage成功时,它都会将默认构造的项目添加到规则all中的vector,输出7insteat1。我如何告诉Spirit如果规则item成功,就添加到vector中?#defineBOOST_SPIRIT_USE_PHOENIX_V3#include#include#include#in
在其他线程中,我已经阅读了如何在语义操作中将符号添加到符号表,但我不知道如何删除它。我的问题背后的想法是,我想允许重命名已解析文本中的关键字。因此,给出了几个具有值的关键字,但用户可以重新分配它们:reassign(keyword)(mykeyword)我有一个语义Action规则usingnamespaceboost::spirit::qi;...qi::symbolskeywords;...key_replace=(lit("reassign")>>lit("(")>>keywords>>lit(")")>>lit("(")>>lexeme[raw[(alpha>>*(alnum|
我遇到了SpiritQi的编译问题,它提示value_type不是identifier的成员。由于某些原因,Qi的属性系统将标识符视为容器类型,并尝试枚举它的值类型。这与thisquestion中的问题类似,但是,我认为原因是单个成员结构,可能与此有关bug.#include#include#includeusingnamespaceboost::spirit::qi;structidentifier{std::wstringname;};structproblem{identifier_1;identifier_2;identifier_3;};BOOST_FUSION_ADAPT_
我想写一个可以使用的解析器(作为qi扩展)通过my_parser(p1,p2,...)其中p1,p2,...是qi解析器表达式。实际上,我想实现一个best_match解析器,它的工作方式类似于qi替代方案,但不选择第一个匹配规则,而是选择“解释”大部分输入的规则。给定两个规则simple_id=+(qi::alpha)和complex_id=simple_id>>*(qi::string("::")>simple_id)它会在输入willy::anton上选择complex_id。并且这样做不会产生中间属性。因为需要先行解析,所以这些好处会在运行时得到返回。在我看来,这种解析器构造有