我试图在同一个可执行文件中链接各种Flex ++ Lexers。但是,由于符号重新定义,我得到了编译错误。我尝试设置不同的前缀,但没有用:这些是我的选择:
Lexer1:
%option c++
%option noyywrap
%option yyclass="SendmailScanner"
%option prefix="zz"
Lexer2:
%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,也会出现此错误...我不知道该怎么做。
提前谢谢你,
答案 0 :(得分:1)
虽然我没有彻底测试,但是当我没有发生重新定义错误时
用简单的文件测试。
我flex
的版本是2.5.35。
为了您的信息,我的测试文件配置如下:
Lexer1.h:
struct SendmailScanner : yyFlexLexer {
int yylex();
};
Lexer2.h:
struct SSHDFailureScanner : yyFlexLexer {
int yylex();
};
Lexer1.l:
%{
#include "Lexer1.h"
%}
%option c++
%option noyywrap
%option yyclass="SendmailScanner"
%option prefix="zz"
%%
...
Lexer2.l:
%{
#include "Lexer2.h"
%}
%option c++
%option noyywrap
%option yyclass="SSHDFailureScanner"
%option prefix="xx"
%%
...
上述文件不包含#undef yyFlexLexer
和#define yyFlexLexer ...
指令。
编译flex生成的文件时,可能不需要这些指令。
希望这有帮助