无法编译lex的输出

dst*_*rkr 5 gcc lex lexer

当我尝试编译这个简单的lex程序的输出时:

# lex.l
integer   printf("found keyword INT");
Run Code Online (Sandbox Code Playgroud)

使用:

$ gcc lex.yy.c
Run Code Online (Sandbox Code Playgroud)

我明白了:

Undefined symbols:
  "_yywrap", referenced from:
      _yylex in ccMsRtp7.o
      _input in ccMsRtp7.o
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

lex --version告诉我,我实际上正在使用'flex 2.5.35',尽管ls -fla`其中lex`不是符号链接.任何想法为什么输出不会编译?

小智 20

Flex手册:

我收到一个关于undefined yywrap()的错误.

你必须提供自己的yywrap()函数,或链接到libfl.a(提供一个),或使用

%option noyywrap
Run Code Online (Sandbox Code Playgroud)

在你的来源中说你不想要一个yywrap()函数.

也:

当扫描仪从YY_INPUT接收到文件结束指示时,它会检查yywrap()函数.如果yywrap()返回false(零),则假定该函数已经完成并设置yyin指向另一个输入文件,并继续扫描.如果它返回true(非零),则扫描程序终止,向其调用者返回0.请注意,在任何一种情况下,启动条件都保持不变; 它没有恢复到INITIAL.

  • 在Mac中,有libl.a,它提供与libfl.a相同的功能,因此使用-ll进行编译 (5认同)
  • +1提及与libfl.a的链接,它提供了一个简单的`main()`以及`yywrap()`:只使用`$ gcc lex.yy.c -lfl`构建. (2认同)