【问题标题】:why ubuntu showing error while running lex program为什么ubuntu在运行lex程序时显示错误
【发布时间】:2019-04-25 08:22:57
【问题描述】:

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

first.l:2:10: fatal error: iostream: No such file or directory
 #include <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();
}

我重新安装了 flex 和 bison ans 也卸载并安装了 gcc,但没有任何变化!任何帮助将不胜感激,

【问题讨论】:

    标签: ubuntu flex-lexer yacc lex


    【解决方案1】:

    您正在尝试使用 C 编译器编译 C++ 代码。请改用g++。

    【讨论】:

    • /tmp/ccTKLswl.o:在函数yylex': lex.yy.c:(.text+0x545): undefined reference to yywrap'/tmp/ccTKLswl.o:在函数yyinput()': lex.yy.c:(.text+0x1187): undefined reference to yywrap'collect2:错误:ld返回1退出状态
    • 我尝试使用“gcc lex.yy.c -lfd”,我得到了同样的第一个错误:“first.l:2:10: fatal error: iostream: No such file or directory #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(); }
    【解决方案2】:

    这是运行它的正确代码:

    %%
    [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();
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多