Несколько лексеров с flex ++ - PullRequest
1 голос
/ 04 марта 2011

Я пытаюсь связать различные лексеры 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’

Эта ошибка также появляется, даже если у меня только один Lexer ... Я не знаю, что делать.

Заранее спасибо,

1 Ответ

1 голос
/ 05 марта 2011

Хотя я не провёл тщательного тестирования, ошибка переопределения не возникала при тестировании с простыми файлами.Моя 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 ....Вероятно, эти директивы не нужны при компиляции сгенерированных файлов.

Надеюсь, это поможет

...