У меня есть довольно стандартный файл .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:
Задача ещё не решена.
Других решений пока нет …