叶子节点算法求短语

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

http://blog.sina.com.cn/s/blog_7f5ad8c20101cnna.html#commonComment相关推荐

  1. http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html

    http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html 转载于:https://www.cnblogs.com/longshiyVip/p/59333 ...

  2. http://blog.sina.com.cn/s/blog_6145ed810102vr8k.html

    http://blog.sina.com.cn/s/blog_6145ed810102vr8k.html 转载于:https://www.cnblogs.com/toSeeMyDream/p/5801 ...

  3. http://blog.sina.com.cn/s/blog_4aae007d0100inxi.html

    http://blog.sina.com.cn/s/blog_4aae007d0100inxi.html 转载于:https://www.cnblogs.com/qxql2016/p/4693885. ...

  4. http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html

    http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html

  5. http://blog.sina.com.cn/s/blog_6364150101018hby.html

    http://blog.sina.com.cn/s/blog_6364150101018hby.html

  6. http://blog.sina.com.cn/s/blog_5da93c8f0102w86x.html

    转至:http://blog.sina.com.cn/s/blog_5da93c8f0102w86x.html 参考:http://droidyue.com/blog/2015/04/12/avoid ...

  7. http://blog.sina.com.cn/s/blog_49867dc00100zj7t.html

    http://blog.sina.com.cn/s/blog_49867dc00100zj7t.html JSON-lib框架,转换JSON.XML不再困难 Json-lib可以将Java对象转成js ...

  8. 我在新浪的微博: http://blog.sina.com.cn/wenxy1

    我在新浪的微博: http://blog.sina.com.cn/wenxy1 从今以后, 技术性文章在CSDN发布, 生活见闻在sina微博发布,不知道CSDN和sina的微博可不可以同步?

  9. Get more...go to my another blog...http://blog.sina.com.cn/qqlove163

    Get more...go to my another blog...http://blog.sina.com.cn/qqlove163

最新文章

  1. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)
  2. 移动端适配之二:visual viewport、layout viewport和ideal viewport介绍
  3. asp.net初学习实现简单的增删改查功能
  4. jupyter Nodebook如何查看函数帮助
  5. Mac下修改ZOC中文乱码
  6. ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记...
  7. leetcode991. 坏了的计算器(贪心)
  8. Vue基础之Vue模板语法
  9. 判断非负整数是否是3的倍数_五年级数学因数与倍数知识点汇总与解题方法技巧...
  10. C语言不调用库函数画直线
  11. AE学习笔记——第一章:AE的界面布局和基本操作
  12. 译文 | 与TensorFlow的第一次接触(一)
  13. mysql 获取select结果_php如何操作mysql获取select 结果
  14. java 可变 不可变_java中的不可变类型的探究
  15. orangepi获取cpu温度
  16. Vista下调整硬盘分区大小的方法
  17. 我的 2020 年终总结
  18. 蔡颖-《APS走向实践》书解读之二:需求驱动-预测、掌握、满足需求
  19. 海思Hi3136芯片怎么样?Hi3136处理器参数介绍
  20. Lync Server 2010拓扑图规划详解

热门文章

  1. java开发用allman风格_缩进风格
  2. 我们都需要时间,成为更好的人(转载)
  3. Linux无法删除只读文件的解决方案
  4. one-stage two-stage 的区别
  5. 互联网大厂的黑话困局
  6. 使用计算机正确坐姿,一种计算机正确使用坐姿纠正装置的制作方法
  7. 美国次贷危机的演变过程
  8. ILSpy反编译C#web程序
  9. HR人力资源系统管理源码
  10. 摩羯男喜欢你的一些表现