标签:
然后就是, 递归下降分析算法(也算是自顶向下分析算法的一个子类(也算是改进))...
然后给出伪代码 ...
然而想象是美好的, 现实是残酷的 :
如上图, 真正要实现的时候却又遇到了问题, 那就是, 当读入第一个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 }
标签:
原文地址:http://www.cnblogs.com/nzhl/p/5485410.html