我正在寻找能够创建自动机的词法分析器和解析器生成器,这些自动机在“推”模式下工作以进行输入,也就是说它们不会自己读取输入但希望我能更多地输入它们。优选的界面类似于:
Lexer l;
Parser p;
while (read_more_input(buffer) != EOF) {
l.feed(buffer);
while (p.has_token() != false) { // so more input needed
p.feed(l.get_token());
if (p.has_partial_result() == true) {
do_something(p.get_result());
}
}
}
我需要这样的生成器的原因很简单 - 我正在使用异步网络服务器(使用boost :: asio),这意味着我在部分中使用输入,并且我必须逐个解析它。