Я получаю эту ошибку tema4.y: 13.19-26: синтаксическая ошибка, непредвиденный тип в следующем коде, пожалуйста, помогите мне!
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
%}
%union {
int intval;
char* strval;
char* charval;
}
%token <charval>SHR <intval>NR
%token CMP
%type <strval>str <intval>expr
%nonassoc CMP '|'
%left '+' '-'
%left '*' '`' '#'
%start s
%%
s:str {printf("%s \n",$<strval>$);}
| expr {printf("%s \n",$<intval>$)}
;
str : str '+' str {
char* s=malloc(strlen($1)+strlen($3)+1);
strcpy(s,$1);
strcat(s,$3);
$$=s;
}
| str '-' str {
char *s=malloc(strlen($1));
char *sir=malloc(strlen($1)-strlen($3));
char *pt,*ps;
int i;
strcpy(s,$1);
pt=strstr(s,$3);
if(pt) {
ps=pt+strlen($3);
strncpy(pt,ps,strlen(ps));
ps+=strlen(ps);
strncpy(sir,s,strlen($1)-strlen($3));
}
$$=sir;
}
| str '*' NR {
int i;
char* s=malloc(strlen($1)*NR+1);
for(i=0;i<$3;i++)
{
strcat(s,$1);
}
$$=s;
}
| str '#' NR {
char *s=malloc($3+1);
strcpy(s,$1);
if($3>strlen($1)) {printf("Nr prea mare\n");exit(1);}
else {s=s+strlen(s)-$3;
$$=s;}
}
| NR '`' str {
char *s=malloc($1+1);
strncpy(s,$3,$1);
$$=s;
}
| '(' str ')' {
$$=$2;
}
| SHR {
char* s=malloc(strlen($1));
strcpy(s,$1);
$$=s;
}
| expr
;
expr : str CMP str {
if(strcmp($1,$3)) $$=0;
else $$=1;
}
| '|' str '|' {
$$=strlen($2);
}
;
%%
int main(){
yyparse();
}