我有一个非常标准的.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
文件。
我转向我信赖的c ++编译器和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 flex 2.5.33
编辑欺骗声明: 我没有使用野牛,我们必须在没有发电机的情况下自己编写解析步骤(就像野牛一样)。每个其他相关问题都有这个问题与另一个工具纠缠在一起。作为一名学生,我在这方面非常弱,所以我在翻译野牛的需求和我的cpp文件需要的时候遇到了麻烦。
然而%option noyywrap
确实澄清/解决了这个问题,但实际上只是打开了一整套不同的蠕虫。
如果我只重述意图,也许最好。
我需要在输入文件上运行flex扫描程序。我需要在我自己的.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
ninja编辑:我找到了flex libs
$ g++ lex.yy.cc -L /usr/local/lib -lfl
正在使用
this question但我仍然遇到同样的错误。 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: