我正在为一种类似于GLSL的小语言编写解析器。我正在努力解析"在"和" out"变量,并注意到我的规则破坏了" int x;"大概是因为" int"以"开始于#34;。 "浮动x;"解析得很好。相关规则是:
decl = -(lexeme["in"] | lexeme["out"]) >> type >> var >> (('(' >> arglist >> ')' >> block)
| ('=' >> expr >> ';')
| ';');
所以我需要首先使用lex进行标记化吗?或者我可以以某种方式使用Qi来逃避?
答案 0 :(得分:1)
你没有。
您可以手动断言关键字边界:
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