为什么程序不是运行一个flex和bison编译的C程序的main函数
Why is the program not running the main function of a flex and bison compiled C program
我使用 flex 和 c 编写了 bison 解析器。解析器编译没有错误,但是当我 运行 可执行文件时, main 函数没有执行(它没有打印出 main 声明后的第一行实际上是打印指令)
main( int argc, char *argv[] )
{
printf("*** C2P version 1.0 @2015***\n");
extern FILE *yyin;
++argv; --argc;
printf("Open C file %s...",argv[0]);
yyin = fopen( argv[0], "r" );
if (yyin==NULL) {
printf("ERROR file not found %s", argv[0]);
exit(1);
}
yydebug = 1; //enable debug
yyparse();
exit(0);
}
我使用了以下命令进行编译:
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
函数,该函数调用词法分析器直到它 returns 一个文件结束指示器。 (它不调用解析器,这就是你的解析器没有被调用的原因。)
您可能不应该使用 -lfl
。除了您不需要的 main()
函数之外,它唯一包含的其他内容是 yywrap
的伪实现,它始终是 returns 1;不要依赖它,只需包含选项
%option noyywrap
在您的 flex 定义中,然后您的词法分析器将完全不依赖于 yywrap
。
我使用 flex 和 c 编写了 bison 解析器。解析器编译没有错误,但是当我 运行 可执行文件时, main 函数没有执行(它没有打印出 main 声明后的第一行实际上是打印指令)
main( int argc, char *argv[] )
{
printf("*** C2P version 1.0 @2015***\n");
extern FILE *yyin;
++argv; --argc;
printf("Open C file %s...",argv[0]);
yyin = fopen( argv[0], "r" );
if (yyin==NULL) {
printf("ERROR file not found %s", argv[0]);
exit(1);
}
yydebug = 1; //enable debug
yyparse();
exit(0);
}
我使用了以下命令进行编译:
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
函数,该函数调用词法分析器直到它 returns 一个文件结束指示器。 (它不调用解析器,这就是你的解析器没有被调用的原因。)
您可能不应该使用 -lfl
。除了您不需要的 main()
函数之外,它唯一包含的其他内容是 yywrap
的伪实现,它始终是 returns 1;不要依赖它,只需包含选项
%option noyywrap
在您的 flex 定义中,然后您的词法分析器将完全不依赖于 yywrap
。