gpt4 book ai didi

c++ - 在没有文件 i/o 的情况下检索可重入词法分析的结果

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:34 24 4
gpt4 key购买 nike

我在 C++ 项目中有一个 flex 模块,我想从多个线程调用它。我的 .lex 文件的选项包括堆栈和可重入。假设可以同时从不同线程对不同扫描器对象调用 yylex,并且没有一个词法分析序列阻塞另一个(我认为是这种情况,但我不完全确定),该怎么做我恢复每一个的输出?我看到的唯一工具是 yyset_out(FILE* handle, yyscan_t scanner),但我不想必须使用文件,因为我只想要词法分析的结果而不必进行文件写入。

我设置输入:

void scanProcedure(...threadInfo...) {
yyscan_t tscanner;

yylex_init(tscanner);
yy_scan_string(threadInfo->lexMe, tscanner);
yylex(tscanner);

/* how to retrieve results of lexing in a
reentrant manner ( no global state info )
without having to do any file i/o */

/* threadInfo-> ?? */

yylex_destroy(tscanner);
}

...

pthread_create( ... scanProcedure ... threadInfoA ... );
pthread_create( ... scanProcedure ... threadInfoB ... );
pthread_create( ... scanProcedure ... threadInfoC ... );

pthread_join( ... );

此外,我意识到我可以在临时文件上调用 yyset_out 然后访问文件缓冲区,但在我看来应该有比这更漂亮(不那么骇人听闻)的解决方案。

最佳答案

好吧,如果您使用的是默认输出,它会进入一个文件,但没有必要这样做——您只需编写您的操作以将输出发送到您想要的任何地方。您可以定义自己的 YY_EXTRA_TYPE 数据结构并使用 yyget_extra/yyset_extra 来操作它,如果您需要一些额外的每个扫描器状态来跟踪输出的去向。

关于c++ - 在没有文件 i/o 的情况下检索可重入词法分析的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7744508/

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