我试图将re2c用于使用迭代器对而不是以空终止字符串定义的输入。
来自手册:
YYCURSOR
[...]
On entry, YYCURSOR is assumed to point to the first character of the current token.
On exit, YYCURSOR will point to the first character of the following token.
这最后一点意味着它正在尝试迭代结束。
有没有让re2c与迭代器一起工作的技巧? (不使用已检查的迭代器。)
答案 0 :(得分:3)
您是在拉模型中使用re2c调用YYFILL(n)还是通过传递-f推送模型?
在pull模型中,声明YYFILL(n)在迭代器耗尽时调用return。
在push模型中,你的迭代器循环将决定输入何时完成,你不会再次调用解析器。
答案 1 :(得分:2)
查看re2c网站上的示例:http://re2c.org/examples/examples.html(他们详细解释了如何正确使用YYFILL或在没有YYFILL的情况下使词法分析器停止)。
如果要覆盖默认输入模型(例如,使用带有STL迭代器和流的re2c),请查看通用输入API:http://re2c.org/manual/features/generic_api/generic_api.html
答案 2 :(得分:1)
AFAICT,您需要做的就是将YYLIMIT
设置为在结束时指向一个字符,如果不存在其他数据(在您的情况下可能总是如此),则返回YYFILL()
。
您可能希望查看re2c示例,特别是strip_comments示例,它从文件而不是以空终止的字符串读取。