C++ 我需要一个词法分析器来消除关键词的歧义吗?(精神)

C++ 我需要一个词法分析器来消除关键词的歧义吗?(精神),c++,boost,boost-spirit,C++,Boost,Boost Spirit,我正在为一种类似于GLSL的语言编写解析器。我正在解析“in”和“out”变量,注意到我的规则破坏了对“intx”的解析;大概是因为“int”以“in”开头。“float x;”解析得很好。有关规则如下: decl = -(lexeme["in"] | lexeme["out"]) >> type >> var >> (('(' >> arglist >> ')' >> block)

我正在为一种类似于GLSL的语言编写解析器。我正在解析“in”和“out”变量,注意到我的规则破坏了对“intx”的解析;大概是因为“int”以“in”开头。“float x;”解析得很好。有关规则如下:

decl = -(lexeme["in"] | lexeme["out"]) >> type >> var >> (('(' >> arglist >> ')' >> block)
                                                          | ('=' >> expr >> ';')
                                                          | ';');
那么我需要首先使用lex标记化吗?或者我可以不使用气吗?

你没有

您可以手动断言关键字边界:

 in_kw = "in" >> !char_("A-Za-z_");

但那太乏味了。您还可以使用Spirit存储库中的
distinct[]

Ah,derp。我碰到了一个回答这个问题的老答案。我很难让它正常工作(不解析“in float x;”)。可能是因为我不能再使用ascii::space作为跳过解析器了吗?@Taylor您没有显示足够的代码让我假设为跳过者。当然,你需要根据需要修改词素。另见