gpt4 book ai didi

c - 有什么方法可以替换 yywrap 定义?争论等

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:50 26 4
gpt4 key购买 nike

你可以替换 yylex 并传递你自己的参数,有没有简单的方法可以用 yywrap 做到这一点?

最佳答案

如果你正在构建一个普通的不可重入扫描器,你可以将yywrap定义为一个宏。该宏可以扩展为使用任意参数调用任意函数。 (在这种情况下,您可以合理地传递给 wrap 函数的大多数东西都是全局变量,但传递传递给 yylex 的参数可能很有用。)

但是,由于生成代码中yywrap的前向声明,需要将宏定义放在yylex顶部的插入代码中。

因此您的文件可能包括:

%{
#define YY_DECL int yylex(Frobber* data)
/* Forward declaration of mywrap
int mywrap(Frobber* data);
%}
%option ...

%%
/* Indented lines before the first rule are inserted at the top of yylex
#define yywrap() mywrap(data)

flex 文档和 Posix 均未明确允许将 yywrap 定义为宏。所以它可能至少应该附有评论,以防某些更高版本以某种方式阻止它工作。将定义放在 yylex 的顶部有点 hack,对于旧的 lex 版本可能没有必要。

如果您准备构建一个 re-entrant scanner,则有一个更简洁的解决方案.在可重入扫描器中,yywrap 将使用与调用 yylex 相同的扫描器参数自动调用。扫描仪上下文对象 scanner_t scanner 可以扩展为包含您自己的 extra data ,这通常是一个更好的地方来保存可能被传递给 yywrap 的数据。选择构建可重入扫描仪还有其他充分的理由。

关于c - 有什么方法可以替换 yywrap 定义?争论等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com