yacc里的问题
时间:2010-09-20
来源:互联网
//语法定义
struct_or_union_spec : struct_or_union ID LBRACE struct_declaration_list RBRACE pos
{printf("1) id = %s \n", yylval_sval}
direct_dec : ID pos
{printf("2) id = %s \n", yylval_sval}
//语法关联过程
struct_or_union_spec -> struct_declaration -> dec ->direct_dec
例子:
struct xyz
{
int a;
double b;
}g;
当执行后的结果如下:
struct xyz
{
int a;2) id = a
double b;2) id = b
}1) id = b(正确的应该是 1) id = xyz)
g;
发现,对于 direct_dec的2个变量(结构体里的a和b)是对的,但对于 strcut_or_union_spec 里的ID(结构体里的xyz)是错的,正确的应该是: 1) id = xyz
我感觉是yacc在展开公式(语法定义)时,在最开始时 yylval_sval 的值是 xyz 的。但 yacc 先展开 struct_declaration_list 并将里面的变量 a 和 b 打印出来(先执行 printf("2) id = %s \n", yylval_sval)。在打印完 struct_declaration_list 里面的变量后,yylval_sval 的值为 b(原来的xyz早就被覆盖了),因此再打印 xyz 时就变为 b(最后才执行 printf("1) id = %s \n", yylval_sval)。
现在的问题是,怎样才可以提取出结构体的ID(即 xyz)?
struct_or_union_spec : struct_or_union ID LBRACE struct_declaration_list RBRACE pos
{printf("1) id = %s \n", yylval_sval}
direct_dec : ID pos
{printf("2) id = %s \n", yylval_sval}
//语法关联过程
struct_or_union_spec -> struct_declaration -> dec ->direct_dec
例子:
struct xyz
{
int a;
double b;
}g;
当执行后的结果如下:
struct xyz
{
int a;2) id = a
double b;2) id = b
}1) id = b(正确的应该是 1) id = xyz)
g;
发现,对于 direct_dec的2个变量(结构体里的a和b)是对的,但对于 strcut_or_union_spec 里的ID(结构体里的xyz)是错的,正确的应该是: 1) id = xyz
我感觉是yacc在展开公式(语法定义)时,在最开始时 yylval_sval 的值是 xyz 的。但 yacc 先展开 struct_declaration_list 并将里面的变量 a 和 b 打印出来(先执行 printf("2) id = %s \n", yylval_sval)。在打印完 struct_declaration_list 里面的变量后,yylval_sval 的值为 b(原来的xyz早就被覆盖了),因此再打印 xyz 时就变为 b(最后才执行 printf("1) id = %s \n", yylval_sval)。
现在的问题是,怎样才可以提取出结构体的ID(即 xyz)?
作者: kallytin 发布时间: 2010-09-20
回复 kallytin
顶一下
顶一下
作者: kallytin 发布时间: 2010-09-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28