【原始文法】 EàE and E |E or E |not E |true |false |(E) 【消除二义性】 Eà E or T |T TàT and F Fànot F 【消除左递归】 EàTE’ E’à or TE’ | e TàFT’ T’àand FT’ |e Fànot F EàTE’ E’à +TE’ | e TàFT’ T’à*FT’ |e Fà!F Fà(E) Fà1 Fà0 【例句】 1*!0+1 【求非终结符的首符号集】 First(F)={0,1,(,!} First(T’)={*,e} First(T)=First(F)={0,1,(,!} First(E’)={+,e} First(E)=First(T)={0,1,(,!} Follow(E)={$,)} Follow(E’)={$,)} Follow(T)={+,$,)} Follow(T’)={+,$,)} Follow(F)={*,+,$,)} 【总结】
(1)
(2)
a)
b)
(3)
(4)
(5)
(6) 【实现Recursive Descent算法】 #include
using namespace std;
char input[100];
char *lookhead=NULL;
//declare functions corresponding with nonterminal
symbols
void E();
void E1();
void T();
void T1();
void F();
void error(){
void match(char c){
void E(){
void E1(){
void T(){
void T1(){
void F(){
int main(void){
} |
|