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