基于YACC&LEX的IF/ELSE计算器开发:条件分支执行难题
问题描述
我要开发一款支持IF/ELSE分支的计算器,已在YACC中添加对应TOKEN,其中expr用于表达式求值,stmt与stmtlist支持嵌套结构。但当前在检测条件表达式并根据结果执行对应代码块时遇到技术困难,相关YACC语法规则代码如下:
%% // US : liste de ... (commande, assignation, expression) liste : | liste error RC { yyerrok; yyclearin; code (STOP); return 1;} | liste stmtList RC { printf("stmtList\n"); code((instr_t)printExprCode); code (STOP); return 3;} | liste cmd RC { code (STOP); return 6;} ; // US : Commande cmd : opCmd { code ((instr_t)*($1->U.pFct));} | DBG sym { dbgSymbol($2); } ; // US : Expression algébrique expr : ENTIER { code2((instr_t)intPush, (instr_t)$1); } | REEL { code2((instr_t)floPush, (instr_t)$1);} | IVAR { code3((instr_t)varPush, (instr_t)$1, (instr_t)varEval);} | FVAR { code3((instr_t)varPush, (instr_t)$1, (instr_t)varEval);} | UNDEF | PO expr PF { printf("test&\n, $$=%f"); $$=$2; } | expr opAlg expr { code ((instr_t)*($2->U.pFct)); } | SUB expr { code((instr_t)negate); } %prec UNARY_MINUS | PREDEF PO expr PF { code2((instr_t)predef, (instr_t)$1); } | PO ENTIER LT ENTIER PF { code3((instr_t)intPush, (instr_t)$1, (instr_t)intPush);} | expr opCOMP expr { code ((instr_t)*($2->U.pFct)); } ; assgn : IVAR AFF expr { code3((instr_t)varPush, (instr_t)$1, (instr_t)varAssign); } | FVAR AFF expr { code3((instr_t)varPush, (instr_t)$1, (instr_t)varAssign); } | UNDEF AFF expr { code3((instr_t)varPush, (instr_t)$1, (instr_t)varAssign); } ; // US : Statement cond : PO expr PF { printf("Condition");} ; //cond : PO ENTIER LT ENTIER PF { printf("ok"); if($1<$3){$$=1;}else{$$=0;}}; stmt : expr | assgn | IF expr stmt {$$ = code(IF,)} ; // US : Statement List stmtList : {data_t d; d.value = 0; push(d);} | stmt | stmtList DEL stmtList | AO stmtList AF ; // US : Statement List block : AO stmtList AF ; // US : sym, nbr, var, opAlg, opCmc sym : nbr | var | PREDEF | opAlg | opCmd | opCOMP ; nbr : ENTIER | REEL ; var : UNDEF | IVAR | FVAR ; opAlg : ADD | SUB | MUL | DIV ; opCmd : PR_TS | PR_TS2 | DBG_TS | DBG_TS2 ; opCOMP : LT | GT | EQ | NE ; %%
内容的提问来源于stack exchange,提问作者Gautier Essam
相关产品推荐
相关产品推荐

