Ошибка компиляции Flex с g ++

У меня есть довольно стандартный файл .l для flex чтобы обрабатывать.

scanner.l

%{
#include "sFile.h"%}

%%
"BEGIN"         return BG;
"END"           return END;
"And so on...."%%

int yywrap()
{
return 1
}

Так что я ударил это с flex -+ scanner.l и как магия lex.yy.cc файл обнаруживается.

Я обращаюсь к своему верному компилятору с ++ и g++ lex.yy.cc просто чтобы попробовать, и я получаю

lex.yy.cc: In member function 'virtual int yyFlexLexer::yylex()':
lex.yy.cc:868: error: 'yywrap' was not declared in this scope
lex.yy.cc: In member function 'int yyFlexLexer::yyinput()':
lex.yy.cc:1271: error: 'yywrap' was not declared in this scope

Я также попытался изменить scanner.l использовать %option c++ и несколько других вещей, но я не могу понять, как заставить эту вещь скомпилировать.

Конечным результатом является использование этого с внешним файлом .cpp для выполнения некоторой другой работы для назначения.

редактировать:
Версии
g ++ 4.1.1
гибкий 2.5.33

отредактировать для уточнения:
Я не использую бизона, мы должны написать шаг разбора самостоятельно без генератора (как бизон). У каждого из других связанных вопросов есть эта проблема, запутанная с другим инструментом. Я ужасно слаб в этой области как студент, поэтому у меня возникают проблемы с переводом того, что нужно зубрам и что нужно моему файлу cpp.

тем не мение %option noyywrap действительно прояснил / решил эту проблему, но на самом деле просто открыл совершенно другую банку с червями.

Возможно, было бы лучше, если бы я только что изложил намерение.

Мне нужно запустить гибкий сканер для входного файла. Мне нужно проанализировать этот вывод в моем собственном файле .cpp. Мой c очень слабый, и в проекте недостаточно времени для нашей группы, чтобы сделать это в c.

Важно, чтобы у меня был доступ к

extern int yylex();
extern int yylineno;
extern char* yytext;
extern FILE* yyin;

В моем парсере .cpp. Все из которых кажутся ошибочными при компиляции. -lfl дает мне ошибку

g++ lex.yy.cc program.cpp -lfl
ld: fatal: library -lfl: not found
ld: fatal: File processing errors. No output written to a.out

ниндзя редактировать: Я нашел гибкие библиотеки

$ g++ lex.yy.cc -L /usr/local/lib -lfl с помощью
этот вопрос но я все еще получаю ту же ошибку. error: 'yywrap' was not declared in this scope

Я также пытался скомпилировать lex.yy.cc сам по себе с той же ошибкой.

Пытаясь добраться до более простого состояния, я также удалил yywrap определение от scanner.l

и заменить на

int main()
{
yylex();
}

Где я получил следующую ошибку.

Undefined                       first referenced
symbol                             in file
yylex()                             /var/tmp//ccjy7kng.o

Итак, я взял весь этот шум и просто вставил int main(){return 1;} и это скомпилировано. Но когда я попытался скомпилировать мой парсер .cpp

ld: fatal: symbol `main' is multiply-defined:

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]