为什么ubuntu在运行lex程序时显示错误
我试图在UBUNTU中运行一个扩展名为为什么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:没
.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 functionyylex:lex.yy.c:(.text+0x545):未定义对
yywrap'/tmp/ccTKLswl.o:In functionyyinport()':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();}