2011-03-04 58 views
1

我试图在同一个可执行文件中链接各种Flex ++词库。但是,由于符号重新定义,导致编译错误。我试着设置不同的前缀,但它是没有用的:这是我的选择:Flex ++的多个词法分析器

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’ 

的时候我只有一个词法此错误也出现连...我不知道该怎么办。

谢谢你在前进,

回答

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生成的文件时,可能不需要这些指令。

希望这会有所帮助