免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7667 | 回复: 5
打印 上一主题 下一主题

bison 生成.tab.h头文件YYSTYPE类型都是int的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-12 10:54 |只看该作者 |倒序浏览
在bison文件中已经定义了YYSTYPE
  1. %{
  2. #include <stdio.h>

  3. #define   YYSTYPE   double

  4. %}
复制代码
但是生成的头文件中,还是定义的int

  1. #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
  2. typedef int YYSTYPE;
  3. # define yystype YYSTYPE /* obsolescent; will be withdrawn */
  4. # define YYSTYPE_IS_DECLARED 1
  5. # define YYSTYPE_IS_TRIVIAL 1
  6. #endif
复制代码
有什么办法能使头文件自动为double类型吗

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2012-01-12 11:08 |只看该作者
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED

论坛徽章:
0
3 [报告]
发表于 2012-01-12 11:11 |只看该作者
本帖最后由 zhongyj 于 2012-01-12 11:12 编辑
cjaizss 发表于 2012-01-12 11:08
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED


bison默认是int类型,编译的时候,这个条件为真
不知道bison有什么机制能把TTSTYPE的define自动放到生成的.h头文件中

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2012-01-12 12:35 |只看该作者
不会吧
%{
...
%}
会出现在之前啊

  1. /* Copy the first part of user declarations.  */
  2. #line 1 "1.y"

  3. #include <string.h>
  4. #include <math.h>
  5. #include "symbol.h"
  6. #define YYSTYPE double
  7.         int mytest;


  8. /* Enabling traces.  */
  9. #ifndef YYDEBUG
  10. # define YYDEBUG 0
  11. #endif

  12. /* Enabling verbose error messages.  */
  13. #ifdef YYERROR_VERBOSE
  14. # undef YYERROR_VERBOSE
  15. # define YYERROR_VERBOSE 1
  16. #else
  17. # define YYERROR_VERBOSE 0
  18. #endif

  19. /* Enabling the token table.  */
  20. #ifndef YYTOKEN_TABLE
  21. # define YYTOKEN_TABLE 0
  22. #endif

  23. #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
  24. #line 9 "1.y"
  25. typedef union YYSTYPE {
  26.     double dval;
  27.     struct symtab *symp;
  28. } YYSTYPE;

复制代码

论坛徽章:
0
5 [报告]
发表于 2012-01-12 12:57 |只看该作者
回复 4# cjaizss


    这个是生成的.c文件吧,.c是没有问题的,是double类型,我的意思是.h文件
flex词法解析程序中include生成的头文件。但是现在头文件中声明的yylval是int类型的,和bison的c文件中定义的yylval变量不一致了。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2012-01-12 13:00 |只看该作者
zhongyj 发表于 2012-01-12 12:57
回复 4# cjaizss

哦,这个似乎没办法直接放在代码里的,yacc程序不检查你%{}%里的东西.
你只好在使用这个头文件的时候,前面再申明一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP