http://blog.sina.com.cn/s/blog_7f5ad8c20101cnna.html#commonComment
2016-12-05 18:48
267 查看
叶子节点算法求短语
2016-12-05转载▼
标签: | 分类: 编译原理 |
算法内容如下:
(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
相关文章推荐
- php substr中文乱码最有效到解决办法 转:http://blog.sina.com.cn/s/blog_49b531af0100esah.html
- activity生命周期---starting an activity 特别好 强烈推荐(http://blog.sina.com.cn/s/blog_8191005601019pp5.html)
- Android入门(9)AudioRecord和AudioTrack类的使用【转】http://blog.sina.com.cn/s/blog_6309e1ed0100j1rw.html
- PDP 上下文 (2011-03-31 17:40:27) http://blog.sina.com.cn/s/blog_798a531d0100qe9q.html
- vc程序大小优化最佳方案(转)http://blog.sina.com.cn/s/blog_4c50333c0100gjs3.html
- noip2009靶形数独题解 转自middlesch_nce24的微博http://blog.sina.com.cn/s/blog_5d0d0f450100jm6u.html#
- Kosaraju算法的分析和证明 转自http://blog.sina.com.cn/s/blog_4dff87120100r58c.html
- PyHeapTypeObject http://blog.sina.com.cn/s/blog_72d1932a0101gcg3.html
- JSON.stringify (转载http://blog.sina.com.cn/s/blog_6a22555a010161tx.html)
- Android中Uri的使用转自http://blog.sina.com.cn/s/blog_821e2bb10100spxv.html
- static class 静态类(Java)http://blog.sina.com.cn/s/blog_605f5b4f0100zbps.html
- SetWindowLong和SetWindowPos函数详解(转自http://blog.sina.com.cn/s/blog_4ac0a0d30100cp9d.html)
- C语言 随机数 (2012-08-20 19:15:38) http://blog.sina.com.cn/s/blog_8b745a5f01014ec7.html
- http://blog.sina.com.cn/s/blog_493a84550102wq50.html
- ASP.net 配置--http://blog.sina.com.cn/s/blog_4a93ccea0100cx9v.html
- http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html
- 刚刚在看52单片机和GPS通信程序的时候,看到了一个函数,absacc.h,貌似从来没有遇到过,百度了一下,结合自己的理解,整理如下: http://blog.sina.com.cn/s/blog_4
- Java的基本I/O(输入/输出)系统copy from (http://blog.sina.com.cn/s/blog_5ec67df20100d6ao.html)
- 对于linux下system()函数的深度理解(整理) (http://blog.sina.com.cn/s/blog_8043547601017qk0.html
- android 屏幕适配问题 http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html