###前提・実現したいこと
(変数の追加)
例えば、変数A,B,C,Dに、さらに"X", "Y"を加えるようにするためにはどう書けばいいのでしょうか?教えていただければ幸いです。
###理想結果
A=3*4-4; XX=A*A; YY=XX+A; print XX; 64 print YY; 72
###実際の結果
A=3*4-4; XX=A*A; YY=XX+A; print XX; print YY; xx
###flex
%% "\n" {;} /* 改行を無視 */ " " {;} /* スペースを無視 */ "\t" {;} /* タブを無視 */ print return(PRT); "=" return(EQU); "+" return(ADD); "-" return(SUB); "*" return(MUL); "/" return(DIV); "(" return(LPA); ")" return(RPA); ";" return(SEM); "A" { yylval.val=0.0; return (ID);} "B" { yylval.val=1.0; return (ID);} "C" { yylval.val=2.0; return (ID);} "D" { yylval.val=3.0; return (ID);} "X"{yylval.val=4.0; return(ID);} "Y"{yylval.val=4.0; return(ID);} [0-9]+ {yylval.val=atof(yytext); return (NUM);} %% int yywrap(){ /* 定義要 */ return 1;}
###bison
%{ #include <stdio.h> double Symtbl[6]; %} %union{ double val; } %token <val> NUM ID %type <val> Expr %token LPA RPA EQU PRT SEM %left ADD SUB %left DIV MUL %start Program %% Program: Statement | Program Statement ; Statement: Assign | Print ; Assign: ID EQU Expr SEM { Symtbl[(int)($1)]=$3; } ; Print: PRT ID SEM { printf("%f\n", Symtbl[(int)($2)]); } ; Expr: Expr ADD Expr {$$=$1+$3;} | Expr SUB Expr {$$=$1-$3;} | Expr MUL Expr {$$=$1*$3;} | Expr DIV Expr {$$=$1/$3;} | LPA Expr RPA {$$=$2;} | NUM {$$=$1;} | ID {$$=Symtbl[(int)($1)];} ; %% int main(){ yyparse(); } int yyerror(char *s) { /* 定義要 */ }
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。