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

读龙书学编译原理 语法分析(5)...

时间:2016-05-13 09:15:22      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

然后就是, 递归下降分析算法(也算是自顶向下分析算法的一个子类(也算是改进))...

技术分享

 

然后给出伪代码 ...

技术分享

 

然而想象是美好的, 现实是残酷的 :

技术分享

 

如上图, 真正要实现的时候却又遇到了问题, 那就是, 当读入第一个token时(此处显然是num), 发现无论是 E + T 和 T 都是可行的, 所以这边又遇到了问题...但是这种情况有时可以利用文法的特殊性来避免 :

技术分享

在 这个例子中 E最终无非是 T + T + T + ... 的格式, 而T 则是 F * F * F * ... 的格式, 那么完全可以在读入3之后先调用parse_T(), 再读入一个token, 若是 +, 则调用 parse_T(), 若不是, 则停止调用...

接下来是一个小作业 :

递归下降分析算法

给定如下的文法G:

A -> a B

      | a

B -> b

      | c

假定你正在给这个文法写一个递归下降分析算法,请给出该算法的递归下降分析算法。你遇到了什么困难?你如何解决这些困难?

这个很简单, 依葫芦画瓢, 伪代码如下

 

 1 parse_A(){
 2     token = tokens[i++];
 3     if(token == a){
 4         token = tokens[i++];
 5         if(token == EOF){
 6             return;
 7         }else{
 8             parse_B()
 9         }
10     }else{
11         error(...);
12     }
13 }
14 
15 parse_B(){
16     token = tokens[i++];
17     if(token == b){
18         ...
19     }else if(token == c){
20         ...
21     }else{
22         error(...);
23     }
24 }

 

 

读龙书学编译原理 语法分析(5)...

标签:

原文地址:http://www.cnblogs.com/nzhl/p/5485410.html

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