【问题标题】:Using Flex (the lexical analizer) on OS X在 OS X 上使用 Flex(词法分析器)
【发布时间】:2014-11-21 17:34:57
【问题描述】:

我有一个文件 test.lex,我运行它

$ flex test.lex

这给了我 lex.yy.c,我尝试用它来编译:

$ gcc lex.yy.c -lfl

这给了我错误 ld: library not found for -lfl。我知道 Flex 规范是正确的,并且 lex.yy.c 在 Linux 机器上编译得很好。有什么建议吗?

编辑:我使用的是 Apple 提供的 flex。

【问题讨论】:

    标签: macos flex-lexer


    【解决方案1】:

    一些系统将 libfl 与 flex 分开,因为它很少需要。 libfl 库只包含两个函数:

    int main() {
        while (yylex());
        return 0;
    }
    
    int yywrap() {
        return 1;
    }
    

    通常,您需要自己的 main 函数而不是来自 libfl 的函数,并且自己定义 yywrap 是微不足道的。或者,您可以使用 %option noyywrap 并且根本不需要它。

    在您的情况下,请尝试摆脱 -lfl 选项。如果您收到关于 yywrap 的错误,请将
    %option noyywrap 添加到您的 test.lex 文件的第一部分。

    【讨论】:

    • 有趣。我不得不将 %option noyywrap 添加到 test.lex 并按预期离开 -lfl,但我想知道为什么 OS X 找不到 libfl?
    • 可能是因为你没有安装它。
    • 我假设因为我有 flex 二进制文件,所以我有 libfl。我所拥有的是 libl.a,它似乎提供了相同的功能。我使用的是 Apple 提供的 flex。
    【解决方案2】:

    旧主题但已接受的答案对我没有帮助。
    所以我要添加这个答案。

    在 macos 上使用 -ll(如“library lex”)。
    适用于 macOS 10.14 mojave。

    正如@Chris Dodd 所说,您可以通过在.l 文件中指定%option noyywrap 并提供自己的main 例程.y 文件来摆脱这种依赖关系。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多