gpt4 book ai didi

c++ - 带有 flex++ 的多个词法分析器

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

我试图在同一可执行文件中链接各种 Flex++ 词法分析器。但是,由于符号重新定义,我得到了编译错误。我尝试设置不同的前缀,但没用:这些是我的选择:

词法分析器 1:

%option c++
%option noyywrap
%option yyclass="SendmailScanner"
%option prefix="zz"

词法分析器 2:

%option c++
%option noyywrap
%option yyclass="SSHDFailureScanner"
%option prefix="xx"

根据手册,我应该只取消设置变量 yyFlexLexer 并将其更改为 zzFlexLexer(在使用该词法分析器的源文件中)或 xxFlexerLexer。不幸的是,我遇到了以下错误:

/usr/include/FlexLexer.h:103: error: redefinition of ‘class zzFlexLexer’
/usr/include/FlexLexer.h:103: error: previous definition of ‘class zzFlexLexer’

即使我只有一个 Lexer 也会出现此错误...我不知道该怎么做。

提前谢谢你,

最佳答案

虽然我没有仔细测试,但是重定义错误并没有出现用简单的文件测试。我的 flex 版本是 2.5.35。供您引用,我的测试文件配置如下:

词法分析器1.h:

struct SendmailScanner : yyFlexLexer {
int yylex();
};

词法分析器2.h:

struct SSHDFailureScanner : yyFlexLexer {
int yylex();
};

词法分析器1.l:

%{
#include "Lexer1.h"
%}

%option c++
%option noyywrap
%option yyclass="SendmailScanner"
%option prefix="zz"

%%
...

词法分析器2.l:

%{
#include "Lexer2.h"
%}

%option c++
%option noyywrap
%option yyclass="SSHDFailureScanner"
%option prefix="xx"

%%
...

以上文件不包括#undef yyFlexLexer#define yyFlexLexer ...指令。编译 flex 生成的文件时,可能不需要这些指令。

希望对你有帮助

关于c++ - 带有 flex++ 的多个词法分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5191213/

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