为什么程序没有运行flex和bison编译的C程序的主要功能

为什么程序没有运行flex和bison编译的C程序的主要功能,c,bison,flex-lexer,C,Bison,Flex Lexer,我已经使用flex和c编写了一个bison解析器。解析器编译时没有错误,但是当我运行可执行文件时,main函数没有被执行(它不会打印出主声明后面的第一行,这实际上是一条打印指令) 我使用了以下命令进行编译: bison -d c_def.y flex c_def.l gcc c_def.tab.h lex.yy.c -o c2p -lfl 这是错误的: gcc c_def.tab.h lex.yy.c -o c2p -lfl bison解析器位于文件c_def.tab.c中c_def.tab

我已经使用flex和c编写了一个bison解析器。解析器编译时没有错误,但是当我运行可执行文件时,main函数没有被执行(它不会打印出主声明后面的第一行,这实际上是一条打印指令)

我使用了以下命令进行编译:

bison -d c_def.y
flex c_def.l
gcc c_def.tab.h lex.yy.c -o c2p -lfl
这是错误的:

gcc c_def.tab.h lex.yy.c -o c2p -lfl
bison解析器位于文件
c_def.tab.c
c_def.tab.h
只是包含令牌定义的头文件

因此,如果没有flex库(
-lfl
),在
c2p
中根本就不会有
main()
。该库包括一个
main
函数,该函数调用lexer,直到返回文件结束指示符。(它不调用解析器,这就是不调用解析器的原因。)

您可能不应该使用
-lfl
。除了您不需要的
main()
函数之外,它还包含一个
yywrap
的伪实现,它总是返回1;与其依赖于此,不如将选项包括在内

%option noyywrap

在您的flex定义中,然后您的lexer将完全不依赖于
yywrap

谢谢!现在它起作用了。此外,您对-lfl的评论非常有用。
%option noyywrap