|
用Lex(flex)和yacc(bison)写的简单计算器(6) $$ = $1 / (double)$3; else { $$ = $1; printf (stderr, "%d.%d-%d.%d: division by zero", @3.first_line, @3.first_column, @3.last_line, @3.last_column); } } rexpr POWER iexpr { $$ = pow($1,(double)$3); } ; %% void main() { yyparse(); } int yyerror(char* msg) { printf("Error: %s encountered \n", msg); } 这样一个支持+,-,×,/,^,以及括号运算的计算器就做成了。所用时间不会超过半个小时,如果用c,或c++写个算符优先文法的话可是一个不小的工程。由此可见lex和yacc的魅力了! 编译命令是:fLex cal.l bison -d -v cal.y pause
任何建议,问题,欢迎:buaa_chenx@hotmail.com
|