加油、努力、我也可以◎DYY◎操作系统博客http://blog.yesky.com/Blog/dongyangyang/复制地址

I can do it!

公告栏
欢迎大家光临,还请多多留言啊,呵呵熊猫拜拜。
控制面板
日历
<2008年9月>
SuMoTuWeThFrSa
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
留言簿(4)
文章分类
文章档案
日记分类
日记档案
友情连接
知识源泉
杂七杂八

在消除LL(1)文法的回溯时,要用到两个与文法有关的函数:
符号串α的开始符号集合FIRST(α)
非终结符A的后继符号集合FOLLOW(A)
计算FIRST和FOLLOW集合的算法是非常简单的,我实现了一下FIRST集合,FOLLOW集合懒得实现了,因为算法虽然简单,但相关数据结构的存储和操作比较繁琐,如果利用事先封装好的集合数据类型则比较容易.

约定用法:
α: 字符串
a :终结符
A,B,P:非终结符
ε :空串
$:输入结束标记
... :任意字符串

FIRST集合算法:
先计算所有非终结符的FIRST集合,再求任意串的FIRST集合就非常容易了.
一般形式:
对于产生式A->αx...(α为满足α=>*ε的右部最长子串,α可以不存在)
若x=a    : a加入到FIRST(A)
若x=B    : FIRST(B)加入到FIRST(A)
若x不存在: ε(空串)加入到FIRST(A)

Follow集合算法:
注意:α包括α不存在的情况.(α=>*ε),而且此处的α不必像FIRST集合算法的α一样,满足最长子串
对于产生式P->...A       : A为句型最右符号,$(输入结束标记)加入到FOLLOW(A)
对于产生式P->...Aα     : FOLLOW(P)加入到FOLLOW(A)
对于产生式P->...Aαa... : a加入到FOLLOW(A)
对于产生式P->...AαB... : FIRST(B)加入到FOLLOW(A)

可以看到:
(1)FOLLOW集合的计算要依赖于FIRST集合
(2)FIRST集合的计算:清除产生式右部左端的"空串"α,再一步处理即可
   FOLLOW集合的计算:要对产生式右部的每一个非终结符A进行处理,需要多次执行相同的算法过程.
(3)需要事先计算每个非终结符A,A=>*ε是否成立,这个也很容易,略.


作者:欢迎光临DYY的博客 阅读() 评论()  编辑 发表于:2007-06-11 21:27
相关内容
文章评论

  • # re: FIRST集合与FOLLOW集合算法
  • 如此股市,你找到规律了吗?教你一手……
    Q=-=Q:  489 617 628 你或许在为自己的N次跌停而悔恨不已,或许在为自己空仓是否已经踏空而感到不开心,或许为没有抢到反弹而怪自己做的不够果断.其实这都是新股民常犯的毛病.甚至有些老股民也一样!不要相信自己可以什么事都可以做好,也许你可以做好,但是要付出血的代价.现在给你提供一个简单的方法,让你直接借鉴别人的经验!尤其临渊羡鱼,不如退而织网.让你享受现成的成果!短线价值投资,让你超值收益.让你先赚后付.相信有些朋友不会介意! 
    合作方式:提供一般3-5个交易日涨幅在10%左右的短线股票,保证股票买得到,卖得出!让你收益在先,赚钱在先的合作方式! 
    1.资金及股票帐号由你自己掌控;
    2.本处负责通知你股票进出的数量时机和价格; 
    3.不用先付费用等你盈利后再结算。
    4.你是上班的可以电话及时通知你买入和卖出。
    付不付,由你定,是不是高手赚说了算!
    天极博友 | 2007-06-12 15:47

    发表评论
    标题 *  
    姓名 *  
    内容 *  
       验证码: *       
           
    版权声明:天极是本Blog托管服务提供商。如本文牵涉版权问题,天极不承担相关责任,请版权拥有者直接与文章作者联系解决。
    Powered by:

    Copyright © 欢迎光临DYY的博客