1
我寫了下面的代碼作爲我的yacc文件的一部分。在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;
}
%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);
}
,我最終得到一個錯誤
parser.y:41.42-43:$$ Mcord的'」沒有聲明的類型
我的意思是,以下示例正常工作,其中$$以數字結尾
Expression :
Number {$$ = $1;}
| Expression '+' Expression {$$ = $1+$2;}
我希望麥克道爾能夠成爲許多CORDINATE的聯絡員。 我該怎麼做? 有沒有什麼方法可以爲規則定義類型?
@PulkitJain對不起,我回滾了你對這個問題所做的修改。你基本上用完全不同的問題來替換問題。請開始一個新的問題,而不是替換現有的問題。非常感謝!您可以通過查看版本歷史記錄來檢索您輸入的文本。找到「已編輯」圖標,然後點擊最後一位編輯姓名上方的時間。 – Kaz 2012-04-09 06:48:58