这是我的.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);
}
;
我得到的错误是:
“在非结构或联合的事物中请求成员'
感谢您的帮助
答案 0 :(得分:1)
如果我没弄错的话,NAME
就是终点。因此,声明其类型的正确方法是:
%token <s> NAME
%type
仅用于非终结。