在boost :: spirit :: qi语法规则中,如何匹配由提供的队长定义的下一个空白字符的字符串?
例如,如果语法是一组定义为:
的属性attributeList = '(' >> *attribute >> ')';
attribute = (name : value) | (name : value units);
我如何匹配任何字符的名称,直到第一个队长字符?
例如,对于名称,我想预先跳过,然后匹配所有字符,除了':'或船长角色。我是否必须在语法类中实例化一个队长,以便我可以执行以下操作:
name = +qi::char_ !(skipper | ':');
或者我可以以某种方式访问现有提供的skipper对象并直接引用它吗?另外,我不相信这需要包含在qi :: lexeme [] ...
提前感谢您纠正我的方式错误
答案 0 :(得分:3)
为了做到这一点,您需要禁止跳过,因此qi::lexeme
必须参与(或至少qi::no_skip
,但您只能使用它来重新实现qi::lexeme
),并准确地做你写的你也需要跳过解析器。然后你可以写
qi::lexeme[ +(qi::char_ - ':' - skipper) ]
但要求似乎相当宽松。在标识符中甚至允许使用不可打印的字符(例如钟形符号(ASCII 7))是不常见的。我不知道你到底想要做什么,所以我无法为你回答这些设计问题,但对我来说似乎很有可能你有机会对更加标准的规则更加满意,例如
qi::lexeme[ qi::alpha >> *qi::alnum ]
(一个非常简单的例子。你的里程数可能因下划线而异。)