免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2313 | 回复: 1

[C++] 如何把lex文件中需要定义的main函数,放到一个独立的cpp文件里面? [复制链接]

论坛徽章:
0
发表于 2013-05-24 17:41 |显示全部楼层
10可用积分
本帖最后由 weichuang02 于 2013-05-24 17:43 编辑

如题,我们可以写一个很简单的lex文件,用flex和g++来编译(RHEL6.3),像下面这样


  1. linux-ume5:~ # cat my.lex
  2. %{
  3. %}
  4. num ([0-9])+
  5. %%
  6. {num} {printf("num");}
  7. %%
  8. int main(void)
  9. {
  10.         yylex();
  11.         return 0;
  12. }
  13. int yywrap()
  14. {
  15.         return 1;
  16. }
  17. linux-ume5:~ # flex my.lex
  18. linux-ume5:~ # g++ lex.yy.c
  19. linux-ume5:~ # ./a.out
  20. 。。。
复制代码
但是,对于一个实际的项目来说,肯定希望main函数在一个单独定义的地方而不是写到lex函数里面。

  1. linux-ume5:~ # cat my2.lex
  2. %{
  3. %}
  4. num ([0-9])+
  5. %%
  6. {num} {printf("num");}
  7. %%

  8. linux-ume5:~ # flex my2.lex                         #产生lex.yy.c
  9. linux-ume5:~ # g++ -c lex.yy.c -o my2.o       #问题是没有产生一个可以让main.cpp包含的头文件

  10. linux-ume5:~ # cat main.cpp
  11. int main(void)
  12. {
  13.         yylex();
  14.         return 0;
  15. }
  16. int yywrap()
  17. {
  18.         return 1;
  19. }
  20. linux-ume5:~ # g++ -c main.cpp -o main.o
  21. main.cpp: In function ‘int main()’:
  22. main.cpp:3: error: ‘yylex’ was not declared in this scope
复制代码
如果我让main.cpp去#include "lex.yy.c"那么可以解决。但我的问题是,包含一个.c文件实在太丑陋了。
----------------------------------
[问题]有没有比较好的方法,能用一个独立的main.cpp文件来包含某个头文件,然后链接my2.o和main.o来生成可执行文件?
我希望是g++ -o myprogram my2.o main.o 这样来生成。

希望我的问题描述是清楚的。
谢谢。

最佳答案

查看完整内容

自己加入声明 extern int yylex(void);这个就是lex的接口,随用随声明,连接的时候把生成的lexer带上就OK。

论坛徽章:
0
发表于 2013-05-24 17:41 |显示全部楼层
自己加入声明 extern int yylex(void);

这个就是lex的接口,随用随声明,连接的时候把生成的lexer带上就OK。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP