yacc中规则的类型错误
我编写了以下代码作为yacc文件的一部分yacc中规则的类型错误,yacc,lex,Yacc,Lex,我编写了以下代码作为yacc文件的一部分 %{ #include <stdio.h> #include <stdlib.h> #include <math.h> FILE *fp; %} %token LINE CIRCLE POLYGON %token CENTRE RADIUS WITHIN %token END %union { char *string; int number; } %t
%{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
FILE *fp;
%}
%token LINE CIRCLE POLYGON
%token CENTRE RADIUS WITHIN
%token END
%union
{
char *string;
int number;
}
%token <number> NUM
%token <string> CORDINATE
%start Input
%%
Input:
| Input Statement
;
Statement :
END
| LINE CORDINATE CORDINATE END {fprintf(fp,"\n\\newline\n\\psline%s%s\n",$2,$3,$2,$3);}
| SCirc END
| POLYGON Mcords {fprintf(fp,"\n\\newline\n\\pspolygon%s",$2);}
;
SCirc :
CIRCLE RADIUS NUM CENTRE CORDINATE {fprintf(fp,"\n\\newline\n\\pscircle%s{%d}\n",3*$3,3*$3,$5,$3);}
| CIRCLE CENTRE CORDINATE RADIUS NUM {fprintf(fp,"\n\\newline\n\\pscircle%s{%d}\n",-2*$5,-2*$5,2*$5,2*$5,$3,$5);}
;
Mcord :
CORDINATE CORDINATE CORDINATE {$$ = strcat(strcat($1,$2),$3);}
| Mcord CODINATE {$$ = strcat($1,$2); }
;
%%
int yyerror(char *s) {
printf("%s\n",s);
}
int main(void) {
/* some stuff */
yyparse();
fprintf(fp,"\\end{pspicture}\n\\end{document}");
fclose(fp);
}
我想让麦考德成为许多科迪纳人的结晶。
我该怎么做?
还有什么方法可以定义规则的类型吗 是的,必须声明非终端符号具有使用
%type
而不是%token
的类型。你没有很好的Yacc参考手册吗?GNU Bison手册相当不错,即使您使用的是其他Yacc。我找到了另一种解决方法。好的,谢谢你,卡兹。@PulkitJain对不起,我把你对这个问题的编辑退回了。你基本上用一个完全不同的问题替换了这个问题。请开始新问题,而不是替换现有问题。谢谢!您可以通过查看版本历史记录来检索输入的文本。找到“编辑”图标,点击最后一位编辑名字上方的时间。
Expression :
Number {$$ = $1;}
| Expression '+' Expression {$$ = $1+$2;}