编译原理中:短语,直接短语,句柄

这几天邻近期末,感觉上了快一学期的编译原理的许多方面还是难以理解,今天早上就突然遇到了一道题,求短语,直接短语和句柄的题,突然才发现自己连这些词的定义都不清楚,于是仔细查了以下,下面分享出来:

短语

书上的定义如下:
这里写图片描述

书上写的比较抽象,我这里简单解释一下,有两个文法,分别是:

S=*=>aAp (由于部分字符难以输入,在此用a,b,p代替)
A=+=>b

我们由此可以画出他的抽象语法树,如下:

这里写图片描述

那么,abp为此句型的短语
总结来说:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语,由这概念,那么我们自然可以想到,b也应该是该句型的一个短语。

直接短语

书中的定义:

这里写图片描述

书中的意思总结来说,指的是如果子树中不再包含其他的子树,即A只能推导出b,而b不能再推出其他的式子,则b为此句型的直接短语

句柄

先来看一下书中的定义:

这里写图片描述

书中的意思就是:直接短语中的最左直接短语为该句型的句柄

小练习

这里写图片描述

如何证明E+T*F是句型呢?最简单的方法就是画抽象语法树,如果能画出对应的抽象语法树,则就表明此表达式是文法的一个句型。

抽象语法树如下:

这里写图片描述

按如上的语法树可知,E=T*F为此文法的一个句型:

  • 短语: T*F, E+T*F

  • 直接短语:T*F

  • 句柄:T*F

简析:对于子树T来说,其所有叶子节点为:T*F,对于E来说,其所有叶子节点为:E+T*F故短语为 T*F 和 E+T*F

这个比较简单,我们来个比较复杂的题目:

S -> a|b|(T) 
T -> TdS|S
证明(Sd(T)db)是S的一个句型,并求出短语,直接短语,句柄

此文法的抽象语法树为:

这里写图片描述

由此可得S=(Sd(T)db)为此文法的一个句型:

  • 短语:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)

  • 直接短语:S,(T),b

  • 句柄:S

本文固定链接:http://blog.dreamchasinger.cn/?p=635
欢迎访问我的自建博客:http://blog.dreamchasinger.cn/
参考:http://blog.sina.com.cn/s/blog_733bf6e00100v1b2.html

  • 292
    点赞
  • 445
    收藏
    觉得还不错? 一键收藏
  • 45
    评论
第1章 引论  1.1 翻译程序  1.2 为什么需要编译程序  1.3 编译程序的工作过程  1.4 编译程序的结构  1.5 编译程序的组织方式  1.6 编译程序的其他有关技术  1.7 翻译程序编写系统  1.8 并行编译程序  1.9 小结  习题一 第2章 形式语言概论  2.1 语言成分  2.2 产生式文法和语言  2.3 文法的分类  2.4 语言和语法  2.5 文法和语言的一些特性  2.6 分析方法简介  2.7 小结  习题二 第3章有穷自动机  3.1 概述  3.2 有穷自动机的形式定义  3.3 NDFSA到DFSA的转换  3.4 正规文法和有穷自动机  3.5 正规表达式与FSA  3.6 DFSA在计算机的表示  3.7 小结  习题三 第4章词法分析  4.1 词法分析概述  4.2 单词符号  4.3 扫描程序的设计  4.4 标识符的处理  4.5 设计词法分析程序的直接方法  4.6 与设计扫描程序相关的几个问题  4.7 小结  习题四 第5章 自上而下语法分析  5.1 非确定的下推自动机  5.2 消除左递归方法  5.3 LL(k)文法  5.4 确定的LL(1)分析器的构造  5.5 LL(k)文法的几个结论  5.6 递归下降分析程序及其设计  5.7 带回溯的自上而下分析法  5.8 小结   习题五 第6章 自下而上分析和优先分析方法  6.1 短语句柄  6.2 移进-归约方法  6.3 非确定的自下而上分析器  6.4 有关文法的一些关系  6.5 简单优先分析方法  6.6 算符优先分析方法  6.7 优先函数及其构造  6.8 两种优先分析方法的比较  6.9 小结   习题六 第7章 自下而上的LR(k)分析方法  7.1 LR(k)文法和LR(k)分析器  7.2 LR(0)分析表的构造  7.3 SLR分析表的构造  7.4 规范LR(1)分析表的构造  7.5 LALR分析表的构造  7.6 无二义性规则的使用  7.7 小结  习题七 第8章 语法制导翻译法  8.1 一般原理和树变换  8.2 简单SDTS和自上而下翻译器  8.3 简单后缀SDTS和自下而上翻译器  8.4 抽象语法树的构造  8.5 属性文法  8.6 间代码形式  8.7 属性翻译文法的应用  8.8 小结  习题八 第9章 运行时的存储组织与管理  9.1 数据区和属性字  9.2 基本数据类型的存储分配  9.3 数组的存储分配  9.4 记录结构的存储分配  9.5 参数传递方式及其实现  9.6 栈式存储分配方法  9.7 堆式存储分配方法  9.8 临时工作单元的存储分配  9.9 小结  习题九 第10章 符号表的组织和查找  10.1 符号表的一般组织形式  10.2 符号表的数据  10.3 符号表的构造与查找  10.4 分程序结构的符号表  10.5 小结  习题十 第11章 优化  11.1 基本块及其求法  11.2 优化举例  11.3 利用变量的定义点进行优化  11.4 循环优化  11.5 借助DAG进行优化  11.6 并行分支的优化  11.7 窥孔优化  11.8 小结  习题十一 第12章 代码生成  12.1 假想的计算机模型  12.2 从四元式生成代码  12.3 从三元式生成代码  12.4 从树形表示生成代码  12.5 从逆波兰表示生成代码  12.6 寄存器的分配  12.7 小结  习题十二 第13章 词法分析器生成工具LEX 第14章 语法分析器生成工具YACC 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值