2011-12-26 49 views
0

这是我.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

如果我没有弄错,NAME是一个终端。因此,声明其类型的正确方法是这样的:

%token <s> NAME 

%type仅用于非终结符。

相关问题