+ -
当前位置:首页 → 问答吧 → yacc里的问题

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)?

作者: kallytin   发布时间: 2010-09-20

回复 kallytin

顶一下

作者: kallytin   发布时间: 2010-09-20