4

我有一个 C 库,我想在不修改库的情况下与 C++ 代码交互。它有一个 yacc 生成的前端,从 读取yyin,这是一个FILE *. 我想设置yyin某种从内存中读取的模拟。FILE *是否有希望以可移植(Linux、Mac、Windows)的方式执行此操作 - 或者是否有其他技巧可以让这样的解析器从内存中读取而不是从内存中读取FILE *

4

2 回答 2

5

你可以fmemopen()在 Linux 上使用。不幸的是,不仅没有便携的方法可以做到这一点,而且再一次,fopen()它甚至不是真正的便携(它在 Windows 上已经被破坏了很长时间)。

但是,如果您的标记器是 Flex,您可以使用yy_scan_buffer(). 请参阅flex lexer 的字符串输入

于 2013-06-10T04:16:39.383 回答
2

yacc 扫描器通常会通过词法分析器获取令牌,调用名为yylex.

词法分析器通常从输入文件(或缓冲区,在您的情况下)读取字符。假设您使用 Flex 生成词法分析器,通常用于修改输入读取方式的“钩子”是重新定义YY_INPUT宏。

然而,正如@dietrich Epp 提到的,还有 yy_scan_string、yy_scan_buffer 和 yy_scan_bytes。这些是否比定义您自己的 YY_INPUT 更适合您的目的可能会有一些问题。虽然我不记得任何细节,但我记得有时由于(至少感知到)效率低下(或者可能只是在我看来定义 YY_INPUT 更容易——可以)而避免它们不记得了)。

于 2013-06-10T04:19:27.687 回答