json.l:21:7: error: subscripted value is neither array nor pointer nor vector yylval[strlen(yylval)-1]=0;修改后出现以下错误
时间: 2024-03-17 08:47:39 浏览: 159
这个错误是因为 yylval 是一个 YYSTYPE 类型的变量,而不是一个字符串类型的数组,所以不能使用字符串的下标操作。正确的做法是将 yylval 强制转换为字符串类型,然后再使用字符串函数。修改代码如下:
```c
desc : %%
{str} {
yylval.str = strdup(yytext+1);
yylval.str[strlen(yylval.str)-1]=0;
return STR;
}
{def} {
if(strcmp(yytext,"true")==0){
return TRUE;
}else if(strcmp(yytext,"false")==0){
return FALSE;
}else if(strcmp(yytext,"null")==0){
return NIL;
}else{
yylval.str = strdup(yytext);
return STR;
}
}
{num} {
yylval.str = strdup(yytext);
return NUM;
}
{arrs} { return ARRS; }
{arre} { return ARRE; }
{objs} { return OBJS; }
{obje} { return OBJE; }
{desc} { return DESC; }
{split} { return SPLIT; }
{space} {}
%%
```
同时,记得在 json.y 中将 YYSTYPE 定义为:
```c
%union {
char *str;
}
%token<str> STR
%token<str> NUM
```
这样就可以正确地读取字符串并将其保存到 YYSTYPE 类型的变量中了。
阅读全文