如何修复Boost::Spirit::X3解析器丢失下划线的问题?
修复方案
问题出在你的commandName_parser规则上:当前规则仅允许下划线出现在命令名的开头连续段,后续字符只能是字母/数字。虽然理论上Pause_ms能被正确匹配,但更合理且通用的写法是允许下划线出现在命令名的任意位置,同时保证命令名以字母或下划线开头(符合常见标识符规范)。
修改后的commandName_parser规则如下:
auto commandName_parser = as<std::string>(x3::lexeme[(x3::alpha | '_') >> *(x3::alnum | '_')]);
规则解释
(x3::alpha | '_'):确保命令名以字母或下划线开头,符合标识符的常见定义;*(x3::alnum | '_'):允许后续字符是字母、数字或下划线,覆盖命令名中任意位置出现下划线的场景;x3::lexeme:保证整个命令名的匹配结果被完整保留,不会被skipper干扰。
替换原规则后,解析Pause_ms 400时,cmd.name会正确存储为"Pause_ms"。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

