使用g ++进行Flex编译错误

时间:2015-10-04 03:03:32

标签: c++ 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文件。

我转向我信赖的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:

0 个答案:

没有答案