gpt4 book ai didi

c++ - 用 spirit x3 解析字符串列表后跟字符串列表

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:49 24 4
gpt4 key购买 nike

我正在尝试使用 boost spirit x3 将字符串解析为结构:

struct identifier {
std::vector<std::string> namespaces;
std::vector<std::string> classes;
std::string identifier;

};

现在我有一个解析器规则来匹配这样的字符串:

foo::bar::baz.bla.blub
foo.bar
boo::bar
foo

我的解析器规则是这样的。

auto const nested_identifier_def =
x3::lexeme[
-(id_string % "::")
>> -(id_string % ".")
>> id_string
];

其中 id_string 解析 alphanum 的组合。我知道这条规则无法按照我的意愿进行解析,因为在解析 foo.bar 例如规则的这一部分时 -(id_string % ".") 消耗了整个字符串。如何更改规则以在结构中正确解析?

最佳答案

假设您的 id_string 是这样的:

auto const id_string = x3::rule<struct id_string_tag, std::string>{} =
x3::lexeme[
(x3::alpha | '_')
>> *(x3::alnum | '_')
];

那么我认为这就是您所追求的:

auto const nested_identifier_def =
*(id_string >> "::")
>> *(id_string >> '.')
>> id_string;

Online Demo

问题是 p % delimitp >> *(delimit >> p) 的简写,即它总是消耗一个 p 分隔符之后。但是,您想要的是 *(p >> delimit),这样在分隔符之后就不会消耗 p,而是留给下一个规则。

关于c++ - 用 spirit x3 解析字符串列表后跟字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com