【发布时间】:2015-02-12 07:50:32
【问题描述】:
我看过一些与 qi 语法中关键字/标识符使用的细微差别有关的帖子,但我不太明白 boost 示例中演示的方法应该如何工作...
关键字声明:
qi::symbols<char> keywords;
示例关键字集:
keywords.add
("foo")
("bar")
;
标识符规则声明:
qi::rule<std::string::const_iterator, std::string(), ascii::space_type> identifier;
以下是 qi calc 和编译器示例中定义标识符规则的方式:
identifier = !keywords >> qi::raw[ qi::lexeme[ ( qi::alpha | '_' ) >> *( qi::alnum | '_' ) ] ];
也许我读错了 qi 语法,但在我看来,这不会接受任何匹配或 以关键字开头的文字。拒绝完整的关键字匹配是期望的行为。但是,我想接受“食物”作为标识符,即使它以关键字“foo”开头。这似乎是一个非常标准的用例,但很难找到真正确定这一点的文档。
谁能提供只拒绝与关键字完全匹配的标识符规则?
谢谢!
【问题讨论】:
-
其实这个问题值得一票。它应该更多地被意识到,并且可能在 Spirit 教程中得到解决,因为它经常被忽视(显然 the compiler samples 是可以的)
标签: c++ boost boost-spirit boost-spirit-qi