要求会员'不是结构或工会

时间:2011-12-26 22:42:08

标签: bison flex-lexer

这是我的.lex文件:

"Sphere"        {return SPHERE;}
"("         {return LBRACKET;}
")"         {return RBRACKET;}
"."         {return DOT;}
[a-zA-Z][a-zA-Z0-9]*    {yylval.s = yytext; return NAME;}

[ \t\n]+    /* ignore */
.   return yytext[0];

这是我的野牛.y文件:

%union {
  char* s;
  double d;
  int i;
} 

/* Operators */

/* Tokens */
%token ALPHANUM
%token SPHERE
%token LBRACKET
%token RBRACKET
%token DOT
%token NAME

/* type declarations */
%type<s> NAME

%%

sentence: SPHERE LBRACKET NAME RBRACKET DOT
{
    printf("%i\n", $3);
}
 ;

我得到的错误是:

“在非结构或联合的事物中请求成员'

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果我没弄错的话,NAME就是终点。因此,声明其类型的正确方法是:

%token <s> NAME

%type仅用于非终结。