【實驗目的】 數據結構
(1)掌握自上而下語法分析的要求與特色。 ide
(2)掌握遞歸降低語法分析的基本原理和方法。 spa
(3)掌握相應數據結構的設計方法。 設計
【實驗內容】 code
用遞歸降低法編寫一個語法分析程序,使之與詞法分析器結合,可以根據語言的上下文無關文法,識別輸入的單詞序列是否文法的句子。blog
【實驗要求】 遞歸
對下列文法,用遞歸降低分析法對任意輸入的符號串進行分析:event
E->TG G->+TG|-TG G->εclass
T->FS S->*FS|/FS S->ε原理
F->(E) F->i
代碼精髓:
根據上述分析法進行創建
void E();
1 void E() 2 { 3 cout << "S->TG\t\t"; 4 Fen(); 5 Sheng(); 6 T(); 7 G(); 8 9 }
void T();
1 void T() 2 { 3 cout << "T->FS\t\t"; 4 Fen(); 5 Sheng(); 6 F(); 7 S(); 8 Leaf = 0; 9 }
void G();
1 void G() 2 { 3 if (str[lookahead] == '+') 4 { 5 cout << "G->+TG\t"; 6 match('+'); 7 T(); 8 G(); 9 Leaf = 1; 10 } 11 else if (str[lookahead] == '-') 12 { 13 cout << "G->-TG\t"; 14 match('-'); 15 T(); 16 G(); 17 Leaf = 1; 18 } 19 cout << "G->ε\t\t"; 20 Fen(); 21 Sheng(); 22 Leaf = 1; 23 24 }
void F();
1 void F() 2 { 3 4 if (str[lookahead] == 'i') 5 { 6 cout << "F->i\t"; 7 match('i'); 8 Leaf = 1; 9 } 10 11 else if (str[lookahead] == '(') 12 { 13 cout << "F->(E)\t"; 14 match('('); 15 E(); 16 if (str[lookahead] == ')') 17 match(')'); 18 else Error(); 19 Leaf = 0; 20 } 21 else 22 { 23 Leaf = 0; 24 Error(); 25 26 } 27 28 }
void S();
運行結果: