您的位置:首页 > 理论基础 > 计算机网络

http://blog.sina.com.cn/s/blog_7f5ad8c20101cnna.html#commonComment

2016-12-05 18:48 387 查看


叶子节点算法求短语

   2016-12-05


转载▼

标签: 


短语

 


直接短语

 


句柄

 


lr分析

 


编译原理

 
分类: 编译原理
  关于自下而上语法分析中怎样求短语 上自习时想了个算法。"叶子节点算法"

算法内容如下:

(1).根据文法、句型构造相应的语法树

(2)从根节点开始,遍历语法树每个节点,执行下面(3)(4),遍历结束后,执行(5)

(3)如果以此节点为根节点的子树只含有一个节点,即根节点,返回(2)遍历下一个节点;否则,执行(4)

(4)以此节点为根节点的子树的所有叶子节点即为一个短语,返回(2)遍历下一个节点

(5)删除重复短语

ok,整个算法结束得到的即是所有短语。

那么,怎么找直接短语呢?

对于得到的短语,执行下面一步:

如果一个短语拥有共同父节点,则其为直接短语。

对于句柄,更好找了,按照定义,最左直接短语就是。

在算符优先算法中,涉及到找素短语。同理,按照上面“叶子节点算法”找出短语,然后按照定义,此素短语不含其他素短语(也就是,如果几个短语有公共部分,而此公共部分也是短语,则此公共部分便是一个素短语),找出素短语,最左素短语也就出来了。这里,还要注意一个问题,对于素短语,是一定包含终结符的,而直接短语,是相对于某一个句型而言,而句型可以是由非终结符组成,也就是说,直接短语、句柄不一定非要含有终结符。

下面,我把“叶子节点算法”稍微解释下: 

我们知道,自下而上语法分析, 就是一个不断“归约”的过程,直至归约出开始符号,什么是归约?对于一个产生式:A->aBc ,我们把aBc用A代替, 而叶子节点正是用来归约的,如果无语法错误,对于一颗子树的所有叶子节点,必然可以归约到根节点,直至归约到语法树的根节点。对于直接短语,也好理解啊,直接直接~就是说直接推导出,一步推导,这不正符合父节点和子节点的对应关系么:)

举个例子吧:




我任意构造的一棵语法树,找短语过程如下:

对于A点,叶子节点为:HJOPMQFGCUS

对于B点,叶子节点为:HJOPMQFG

对于E点,叶子节点为:HJOPMQ

对于F点,子树只有一个根节点,无

对于G点,子树只有一个根节点,无

对于H点,子树只有一个根节点,无

对于I点,叶子节点为:JOPMQ

对于J点,子树只有一个根节点,无

对于K点,叶子节点为:OPMQ

对于L点,叶子节点为:OP

对于O、P、M点,子树只有根节点,无

对于N点,叶子节点为:Q

对于Q、C点,子树只有一个根节点,无

对于D点,叶子节点为:US

对于R点,叶子节点为:U

对于T点,叶子节点为:U

对于U、S点,子树只有一个根节点,无

然后 删掉重复短语,得到短语:HJOPMQFGCUS、HJOPMQFG、HJOPMQ、JOPMQ、OPMQ、OP、Q、US、U

其中,OP、Q、U分别有共同父节点,即为直接短语

句柄为OP
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐