我试图在同一个可执行文件中链接各种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(在使用该lexer的源文件中)或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。
供您参考,我的测试文件的配置如下:
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生成的文件时,可能不需要这些指令。
希望这可以帮助
关于c++ - Flex++的多个词法分析器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5191213/