我试图使用boost spirit框架定义我自己的语法,我定义了这样一个匹配规则:
value = (
char_('"') >>
(*qi::lexeme[
char_('\\') >> char_('\\') |
char_('\\') >> char_('"') |
graph - char_('"') |
char_(' ')
])[some_func] >>
char_('"')
);
我想将一个动作some_func分配给它的一部分,并将整个匹配字符串作为参数传递。但不幸的是,我会得到类似vector<boost::variant<boost::fusion::vector2 ..a lot of stuff...)...>
的东西。我能以char*、std::string或void* 的形式获取整个数据吗?
1条答案
按热度按时间izj3ouym1#
查看qi::as_string:
演示程序输出:
老实说,看起来你真的是在尝试解析可能带有转义字符的“逐字”字符串。在这方面,
lexeme
的使用似乎是错误的(空格被吃掉了)。如果您想查看转义字符串解析的示例,请参见例如_2023更新
由于www.example.com的链接中断,重新查看了这个答案,在2023年,我会这样写:liveworkspace.org, and in 2023 I'd write this like so:
我认为可以做一个简单的重排,至少看起来像:
请注意,我们只是声明了没有skipper的规则,并删除了
lexeme
(请参阅Boost spirit skipper issues)Live On Coliru
指纹