其递归子程序为 void EO ITO: EO void EO f(下一个符号==+) 取下一个符号0 TO: E0
其递归子程序为: void E() {T();E’(); } void E’() {if(下一个符号==’+’) {取下一个符号(); T();E’(); } }
void TO IFO; TO; voidTo f(下一个符号==” 取下一个符号0 F0;T0;
void T(); { F();T’(); } void T’() {if(下一个符号==’*’) {取下一个符号(); F();T’(); } }
void Fo if(下一个符号=i) 取下一个符号0 else f(下一个符号= 取下一个符号0;E0 f(下一个符号=) 取下一个符号0 else出错0 else出错0;
void F() { if(下一个符号==‘i’) 取下一个符号(); else if(下一个符号==‘(’) {取下一个符号();E(); if(下一个符号==‘)’) 取下一个符号(); else 出错(); } else 出错(); }
在具体实现中,可以将写成拓广的BNF,如下: E→T{+TT→F{*)F→(E 其递归子程序如下 void Eo TO Whil(下一个符号=2+) 取下一个符号0 T0; void TO F0; Whil(下一个符号=”*) 取下一个符号0 F0);
在具体实现中,可以将写成拓广的BNF,如下: E→T{+T} T→F{*F) F→(E)|i 其递归子程序如下: void E() {T(); while(下一个符号==’+’) {取下一个符号(); T(); } } void T() {F(); while(下一个符号==’*’) {取下一个符号(); F(); } }
void Fo if(下一个符号=i) 取下一个符号0 else f(下一个符号= 取下一个符号0;E0 f(下一个符号=) 取下一个符号0 else出错0 else出错0;
void F() { if(下一个符号==‘i’) 取下一个符号(); else if(下一个符号==‘(’) {取下一个符号();E(); if(下一个符号==‘)’) 取下一个符号(); else 出错(); } else 出错(); }