|
关于Basic程序解释器及编译原理的简单化(1)--词法分析和代数式求值(2) extern char token_type; /* contains type of token */ extern char tok; /* holds the internal representation of token */ void get_exp(),level2(),level3(),level4(),level5(); void level6(),primitive(),arith(),unary(); void serror(),putback(); /* entry point into parser */ void get_exp(int *result) { get_token(); if (!*token) { serror(2); return; } level2(result); putback(); /*return last token read to input stream */ }
/* add or subtract two terms */ void level2(int *result) { register char op; int hold; level3(result); while ((op = *token) =='+' op == '-') { get_token(); level3(&hold); arith(op,result,&hold); } }
/* multiply or divide two factors */ void level3(int *result) { register char op; int hold;
level4(result); while ((op = *token) == '*' op == '/' op == '%') { get_token(); level3(&hold); arith(op,result,&hold); } } /* process integer exponent */ void level4(int *result) { register char op; int hold;
level5(result); if (*token == '^') { get_token(); level4(&hold);
|