4

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

4

3 回答 3

4

您是在调用 YYFILL(n) 的拉模型中使用 re2c,还是通过传递 -f 推模型?

在拉取模型中,声明 YYFILL(n) 以在迭代器耗尽时调用 return。

在推送模型中,您的迭代器循环将指示输入何时完成,并且您不会再次调用解析器。

于 2014-11-26T21:56:10.330 回答
2

查看 re2c 网站上的示例:http : //re2c.org/examples/examples.html(他们非常详细地解释了如何正确使用 YYFILL 或在没有 YYFILL 的情况下使词法分析器停止)。

如果您想覆盖默认输入模型(例如,将 re2c 与 STL 迭代器和流一起使用),请查看通用输入 API:http ://re2c.org/manual/features/generic_api/generic_api.html

于 2015-11-26T12:17:35.943 回答
1

AFAICT,您需要做的就是将YYLIMIT一个字符指向末尾,YYFILL()如果不存在更多数据则返回(在您的情况下可能总是如此)。

您可能想查看 re2c 示例,特别是 strip_comments 示例,它从文件中读取,而不是从以空字符结尾的字符串中读取。

于 2013-08-20T13:04:47.380 回答