我需要词法分析器来消除关键词的歧义吗? (::提振精神)

时间:2014-08-06 22:16:59

标签: c++ boost boost-spirit

我正在为一种类似于GLSL的小语言编写解析器。我正在努力解析"在"和" out"变量,并注意到我的规则破坏了" int x;"大概是因为" int"以"开始于#34;。 "浮动x;"解析得很好。相关规则是:

decl = -(lexeme["in"] | lexeme["out"]) >> type >> var >> (('(' >> arglist >> ')' >> block)
                                                          | ('=' >> expr >> ';')
                                                          | ';');

所以我需要首先使用lex进行标记化吗?或者我可以以某种方式使用Qi来逃避?

1 个答案:

答案 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