2011-03-04 2 views
1

さまざまなFlex ++レクサーを同じ実行可能ファイルにリンクしようとしています。しかし、シンボルの再定義のためにコンパイルエラーが発生します。私は別のプレフィックスを設定しようとしたが、それは全く使用しなかっ:フレックス付きの複数のレクサー++

Lexer1:

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

Lexer2:これらは私のオプションです

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

マニュアルによると、私がすべき唯一の未設定の変数yyFlexLexerを開き、zxFlexLexer(そのレクサーを使用するソースファイル内)または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 ... のディレクティブは含まれていません。 フレックス生成ファイルをコンパイルするときに、おそらくそれらの指令は不要です。

希望すると便利です。

関連する問題