我是否需要词法分析器来消除关键字的歧义?(boost::精神)



我正在为一种类似于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

最新更新