我正在为一种类似于GLSL的小语言编写解析器。我只是在分析"in"one_answers"out"变量,并注意到我的规则破坏了对"int x;"的解析,大概是因为"int"以"in"开头。"float x;"解析得很好。相关规则是:
decl = -(lexeme["in"] | lexeme["out"]) >> type >> var >> (('(' >> arglist >> ')' >> block)
| ('=' >> expr >> ';')
| ';');
那么我需要先使用lex标记化吗?或者我可以不受惩罚地使用Qi ?
你没有。
您可以手动断言关键字边界:
in_kw = "in" >> !char_("A-Za-z_");
但是那很乏味。您也可以使用Spirit Repository中的distinct[]
: http://www.boost.org/doc/libs/1_55_0/libs/spirit/repository/example/qi/distinct.cpp