我看到了一些关于qi语法中关键字/标识符使用细节的帖子,但我无法理解在boost示例中演示的方法应该如何工作...
关键字声明:
示例关键词集:
标识符规则声明:
这是在qi calc和编译器示例中定义标识符规则的方式:
也许我对qi语法的理解有误,但在我看来,它似乎不会接受与关键字匹配或以关键字开头的任何文字。拒绝完全匹配关键字是期望的行为。但是,我想接受“food”作为标识符,即使它以关键字“foo”开头。这似乎是一个非常标准的用例,但我很难找到真正解决这个问题的文档。
有人可以提供一个仅拒绝关键字精确匹配的标识符规则吗?
谢谢!
关键字声明:
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语法的理解有误,但在我看来,它似乎不会接受与关键字匹配或以关键字开头的任何文字。拒绝完全匹配关键字是期望的行为。但是,我想接受“food”作为标识符,即使它以关键字“foo”开头。这似乎是一个非常标准的用例,但我很难找到真正解决这个问题的文档。
有人可以提供一个仅拒绝关键字精确匹配的标识符规则吗?
谢谢!