关于C ++迭代器源的re2c扫描程序

时间:2013-08-20 09:48:22

标签: c++ lexer re2c

我试图将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与迭代器一起工作的技巧? (不使用已检查的迭代器。)

3 个答案:

答案 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示例,它从文件而不是以空终止的字符串读取。