軟件構造實驗三-遞歸降低分析分析法

【實驗目的】 數據結構

(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 E()

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 T()

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 G()

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 F()

void S();

 

void S()

 運行結果:

 

相關文章
相關標籤/搜索