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

时间:2014-09-26 16:24:16

标签: macos flex-lexer

我有一个文件test.lex,我将其作为

运行
$ flex test.lex

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

$ gcc lex.yy.c -lfl

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

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

2 个答案:

答案 0 :(得分:5)

有些系统使libfl成为独立的flex包,因为它很少需要。 libfl库只包含两个函数:

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

int yywrap() {
    return 1;
}

通常,您需要自己的main功能,而不是libfl中的功能,而定义yywrap本身就是微不足道的。或者,您可以使用%option noyywrap而根本不需要它。

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

答案 1 :(得分:0)

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

在macOS上,请使用-ll(如“库lex”中所述)。
适用于macOS 10.14莫哈韦沙漠。

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