为什么ubuntu在运行lex程序时显示错误

为什么ubuntu在运行lex程序时显示错误,ubuntu,flex-lexer,yacc,lex,Ubuntu,Flex Lexer,Yacc,Lex,我试图在UBUNTU中运行一个扩展名为.l的词法程序,我已经安装了flex和bison,并且我能够获得lex.yy.c文件,但是当我发出命令cc lex.yy.c-lfd或cc lex.yy.c时,终端显示了一个错误: first.l:2:10: fatal error: iostream: No such file or directory #include <iostream> ^~~~~~~~~~ first.l:2:10:致命错误:iostream:没

我试图在UBUNTU中运行一个扩展名为
.l
的词法程序,我已经安装了flex和bison,并且我能够获得lex.yy.c文件,但是当我发出命令
cc lex.yy.c-lfd
cc lex.yy.c
时,终端显示了一个错误:

first.l:2:10: fatal error: iostream: No such file or directory
 #include <iostream>
          ^~~~~~~~~~
first.l:2:10:致命错误:iostream:没有这样的文件或目录
#包括
^~~~~~~~~~
我的代码是:

%{
#include <iostream>
using namespace std;
#define YY_DECL extern "C" int yylex()
%}
%%
[ \t\n]         ;
[0-9]+\.[0-9]+  { cout << "Found a floating-point number:" << yytext                         << endl;   }
[0-9]+          { cout << "Found an integer:" << yytext << endl; }
[a-zA-Z0-9]+    { cout << "Found a string: " << yytext << endl; }
%%
 int main(int, char**) {
    // lex through the input:
    yylex();
}
%{
#包括
使用名称空间std;
#定义YY_DECL外部“C”int yylex()
%}
%%
[\t\n];

[09] +[-09] +{cOUT

你试图用C编译器编译C++代码。用<代码> g++< />代码>

这里是运行它的正确代码:

%%
[0-9]+\.[0-9]*  { printf("Found a floating-point number:"); }
[0-9]*          { printf("Found an integer:"); }
[a-zA-Z0-9]*    { printf("Found a string: "); }
%%
main(int argc, char** argv) 
{
 yylex();
} 

/tmp/ccTKLswl.o:In function
yylex:lex.yy.c:(.text+0x545):未定义对
yywrap'/tmp/ccTKLswl.o:In function
yyinport()':lex.yy.c:(.text+0x1187):未定义对
yywrap'集合的引用2:错误:ld返回了1个退出状态我尝试了“gcc lex.yy.c-lfd”,得到了相同的第一个错误:“first.l:2:10:致命错误:iostream:没有这样的文件或目录#include^~~~~~~~~~”@HasibulKabir您需要链接到
libfl
(使用
-lfl
-与gcc相同),定义自己的
yywrap
或使用
%option noyywrap
或等效的命令行选项来
flex
。我找到了解决方案:我修改了代码,并成功运行了!代码在这里:%%[0-9]+\.[0-9]*{printf(“找到了一个浮点数”);}[0-9]*{printf(“找到了一个整数”);}[a-zA Z0-9]*{printf(“找到一个字符串:”;}%%main(int-argc,char**argv){yylex();}