问题很简单,我使用boost :: spirit写了一个词法分析器,但我似乎无法找到一种方法来生成EOF
令牌。 - 那怎么会这样做呢?
答案 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 | ';');
我是否错过了一些未解决的问题?