当我尝试编译这个简单的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`不是符号链接。任何想法为什么输出不会编译?
答案 0 :(得分:20)
我收到有关未定义的yywrap()的错误。
您必须提供自己的yywrap()函数,或链接到libfl.a(提供一个),或使用
%option noyywrap
在你的来源中说你不想要yywrap()函数。
扫描仪收到时 来自的文件结束指示 YY_INPUT,然后检查yywrap()函数。如果 yywrap()返回false(零),然后假设为 功能已经开始,并设置yyin指向 另一个输入文件,继续扫描。如果它返回 为真(非零),然后扫描仪终止,返回0 给它的来电者。请注意,在任何一种情况下,启动条件 保持不变;它没有恢复到INITIAL。
答案 1 :(得分:0)
正如Eli的回答所暗示的那样,这不是一个微不足道的lex计划。这是一个简单的lex 文件,因此是程序的一部分,但它(像任何lex文件一样)需要与一些C代码组合才能构成一个完整的程序。特别是,你仍然需要一个main
函数(你用C或C ++或其他东西在一个单独的文件中编写),你还需要编写一个yywrap
函数来提供它之间的接口。 lex代码和C代码的其余部分。