首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译lex的输出

无法编译lex的输出
EN

Stack Overflow用户
提问于 2010-04-10 13:40:05
回答 2查看 6.8K关注 0票数 6

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

代码语言:javascript
复制
# lex.l
integer   printf("found keyword INT");

使用:

代码语言:javascript
复制
$ gcc lex.yy.c

我得到了:

代码语言:javascript
复制
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 --版本告诉我实际上使用的是'flex 2.5.35‘,尽管ls -fla which lex不是符号链接。你知道为什么输出不能编译吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-10 14:11:46

来自the Flex manual

我得到了一个关于未定义的yywrap()的错误。

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

%option noyywrap

在源代码中声明您不需要yywrap()函数。

Also:

当扫描程序收到来自YY_INPUT的文件结束指示时,它会检查

()函数。如果yywrap()返回false (零),则假定函数已经前进,并将yyin设置为指向另一个输入文件,然后继续扫描。如果返回true (非零),则扫描器终止,向调用者返回0。请注意,在这两种情况下,启动条件都保持不变;它不会恢复为初始状态。

票数 20
EN

Stack Overflow用户

发布于 2010-04-10 14:05:22

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2612394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档