在OS X上使用Flex(词法分析器)

9

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

$ flex test.lex

那给了我lex.yy.c文件,我尝试编译它:
$ gcc lex.yy.c -lfl

这让我产生了错误信息:ld: 找不到库-lfl。我知道Flex规范是正确的,lex.yy.c在Linux机器上也可以编译通过。有任何建议吗?
编辑:我正在使用由Apple提供的Flex。
2个回答

10

有些系统把libfl从flex中分离出来,因为它很少被使用。libfl库只包含两个函数:

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

int yywrap() {
    return 1;
}

通常情况下,你会想要自己的main函数而不是来自libfl的那个,并且自己定义yywrap也很简单。或者,您可以使用%option noyywrap并完全不需要它。

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


1
有趣。我不得不在test.lex中添加%option noyywrap并省略-lfl,这是人所料的,但我想知道为什么OS X找不到libfl? - Haden Pike
可能是因为您没有安装它。 - Chris Dodd
我假设由于我有flex二进制文件,我也有libfl。但实际上我拥有的是libl.a,它似乎提供了相同的功能。我正在使用Apple提供的flex。 - Haden Pike

4

虽然这是一个老话题,但接受的答案并没有帮助到我。
因此,我要添加这个答案。

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

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

最初的回答:

对于MacOS用户,可以使用-ll选项,也就是“library lex”。适用于MacOS 10.14 Mojave。同时,您还可以通过在.l文件中指定%option noyywrap并在.y文件中提供自己的main例程来避免这种依赖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接