boost :: spirit :: lex,如何生成文件令牌的结尾?

时间:2013-09-03 20:51:13

标签: token boost-spirit eof boost-spirit-lex

问题很简单,我使用boost :: spirit写了一个词法分析器,但我似乎无法找到一种方法来生成EOF令牌。 - 那怎么会这样做呢?

1 个答案:

答案 0 :(得分:5)

什么是EOF代币?

  

历史上,某些平台将特殊的'EOF'(例如)字符与文本文件相关联。与use of 0x15 as newline character一样,此类用途现在基本上已不复存在。文件的结尾更好地定义为缺少进一步输入,换句话说:它是流状态,而不是字符。

令牌迭代器Spirit Lex通过返回结束迭代器来发出'EOF'信号。

令牌化程序API(lex::tokenize(...))以及Spirit Qi都了解此行为(通过退出标记化循环(lex)和/或使qi::eoi解析器成功匹配)。

E.g。如果你需要声明解析到达输入的结尾,你只需要说

 myrule = subrule1 >> subrule2 > qi::eoi;

或者,如果您想断言某事物的存在(例如,结束;,除非在输入结束时

 myrule = subrule1 >> subrule2 >> (qi::eoi | ';');

我是否错过了一些未解决的问题?