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

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

时间:2016-05-22 15:08:35      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

之前一节讲完了ll(1)分析算法的主要框架, 现在我们来看看冲突的处理...冲突处理的方式有很多种, 这里讲的这种叫做消除左递归...

技术分享

右上文法是左递归文法, 你会发现任何一个左递归文法都不是ll(1)的, 为什么呢 ? 比如你看文法的第0条和第1条, 分别可以写成 :

E = T + T + T + ...

E = T

不难发现, 他们的first集合肯定是有重合的, 所以左递归文法显然不是ll(1)的... 消除左递归的方式就是右递归, 如右下方所示..

 

另外一个比较常用的技术叫做提取左公因子...这个也很简单...

技术分享

 那么总结一下ll(1)分析算法就是这样的 :

 

技术分享

 

也就是说目前某些文法已经超出了ll(1)分析算法的分析范围, 其次就算是可以分析的文法中, 可能也需要进行改写来化解冲突, 但是往往化解之后的文法会变得的难以理解.

比如这个

E -> E + T

  |  T

T -> ....

 

改写之后 :

E -> T + E‘

E-> E‘ ....

显然不然改写前通俗易懂...

总结就差不多是这样.

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

标签:

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

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