无法编译lex的输出

时间:2010-04-10 05:40:05

标签: gcc lex lexer

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

# lex.l
integer   printf("found keyword INT");

使用:

$ gcc lex.yy.c

我明白了:

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

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

2 个答案:

答案 0 :(得分:20)

来自the Flex manual

  

我收到有关未定义的yywrap()的错误。

     

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

%option noyywrap
     

在你的来源中说你不想要yywrap()函数。

Also:

  

扫描仪收到时   来自的文件结束指示          YY_INPUT,然后检查yywrap()函数。如果          yywrap()返回false(零),然后假设为          功能已经开始,并设置yyin指向          另一个输入文件,继续扫描。如果它返回          为真(非零),然后扫描仪终止,返回0          给它的来电者。请注意,在任何一种情况下,启动条件          保持不变;它没有恢复到INITIAL。

答案 1 :(得分:0)

正如Eli的回答所暗示的那样,这不是一个微不足道的lex计划。这是一个简单的lex 文件,因此是程序的一部分,但它(像任何lex文件一样)需要与一些C代码组合才能构成一个完整的程序。特别是,你仍然需要一个main函数(你用C或C ++或其他东西在一个单独的文件中编写),你还需要编写一个yywrap函数来提供它之间的接口。 lex代码和C代码的其余部分。