码迷,mamicode.com
首页 > 其他好文 > 详细

软件构造实验三-递归下降分析分析法

时间:2019-11-01 11:11:48      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:内容   isp   实验目的   词法分析   info   spl   设计   lse   目的   

【实验目的】 

(1)掌握自上而下语法分析的要求与特点。 

(2)掌握递归下降语法分析的基本原理和方法。 

(3)掌握相应数据结构的设计方法。  

【实验内容】 

用递归下降法编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。

【实验要求】 

对下列文法,用递归下降分析法对任意输入的符号串进行分析:

E->TG    G->+TG|-TG   G->ε

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

 运行结果:

技术图片

 

技术图片

 

软件构造实验三-递归下降分析分析法

标签:内容   isp   实验目的   词法分析   info   spl   设计   lse   目的   

原文地址:https://www.cnblogs.com/smartisn/p/11775773.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!