无法编译 lex 的输出

发布于 2024-08-28 12:27:07 字数 508 浏览 9 评论 0原文

当我尝试编译这个简单的 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 `which lex` 不是符号链接。有什么想法为什么输出无法编译吗?

When I attempt to compile the output of this trivial lex program:

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

using:

$ gcc lex.yy.c

I get:

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 tells me I'm actually using 'flex 2.5.35' although ls -fla `which lex` isn't a symlink. Any ideas why the output won't compile?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

为你拒绝所有暧昧 2024-09-04 12:27:07

来自Flex 手册

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

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

%选项 noyywrap

在您的源代码中表示您不需要 yywrap() 函数。

另外:

当扫描仪收到
文件结束指示
YY_INPUT,然后检查 yywrap() 函数。如果
yywrap() 返回 false(零),则假设
函数已继续并设置 yyin 指向
另一个输入文件,扫描继续。如果返回的话
true(非零),则扫描器终止,返回 0
给它的调用者。请注意,无论哪种情况,启动条件
化保持不变;它不会恢复为初始状态。

From the Flex manual:

I get an error about undefined yywrap().

You must supply a yywrap() function of your own, or link to libfl.a (which provides one), or use

%option noyywrap

in your source to say you don't want a yywrap() function.

Also:

When the scanner receives an
end-of-file indication from
YY_INPUT, it then checks the yywrap() function. If
yywrap() returns false (zero), then it is assumed that the
function has gone ahead and set up yyin to point to
another input file, and scanning continues. If it returns
true (non-zero), then the scanner terminates, returning 0
to its caller. Note that in either case, the start condi-
tion remains unchanged; it does not revert to INITIAL.

迎风吟唱 2024-09-04 12:27:07

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

As Eli's answer implies, that's not a trivial lex program. It's a trivial lex file, and thus a portion of a program, but it (like any lex file) needs to be combined with some C code to make a complete program. In particular, you still need a main function (which you write in C or C++ or something, in a separate file), and you will also need to write a yywrap function that provides the interface between the lex code and the rest of your C code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文