3

问题很简单,我编写了一个词法分析器,使用 boost::spirit,但是我似乎找不到生成EOF令牌的方法。- 那么如何去做呢?

4

1 回答 1

5

什么是 EOF 令牌?

从历史上看,一些平台将特殊的“EOF”(例如 ascii 26)字符与文本文件相关联。就像使用 0x15 作为换行符一样,这​​种用法现在基本上已经不复存在了。文件的结尾最好定义为没有进一步的输入,换句话说:它是一个流状态,而不是一个字符。

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

分词器 API ( lex::tokenize(...)) 和 Spirit Qi 都理解这种行为(通过退出分词循环 (lex) 和/或通过使qi::eoi解析器成功匹配)。

例如,如果您需要断言解析已到达输入的末尾,您只需说

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

或者,如果您想断言某些东西的存在(例如,关闭;,除非在输入结束时:

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

我是否错过了一些没有像这样解决的问题?

于 2013-09-04T07:54:31.133 回答