继承属性inh和综合属性syn的作用

因为文法不是为了翻译而定义的,而是以语法分析为目的进行定义的,因此可能会产生语法分析树的结构和源代码的抽象语法不"匹配”.

例如,下面的文法便是按照人类的算术习惯定义的.比如加法就定义为E=E+TE=E+TE=E+T,乘法就定义为T=T×FT=T\times FT=T×F.但如果要进行语法分析,这两个文法就存在左递归的问题,需要消除左递归,

例如,对于乘法T=T×FT=T\times FT=T×F,消除左递归后的文法如下.

可见,由于T′T'T′的引入,导致语法分析树的结构与人们的乘法习惯不匹配.这时候就需要继承属性inh和综合属性syn解决这种不匹配.

例如,对于本例子,运算符∗*∗分量是通过继承得到的。更淮确地说, 产生式T′→∗FT1′T^{\prime} \rightarrow* F T_{1}^{\prime}T′→∗FT1′​的头T′T^{\prime}T′继承了产生式体中*的左运算分量。给定一个项x∗y∗zx * y * zx∗y∗z, 对应于∗y∗z* y * z∗y∗z的子树的根结点䉻继承了xxx的值。对应于∗z* z∗z的子树的根结点继承了x∗yx * yx∗y的 值 。 如 果 项 中 还 有 更 茤 的 因 子 , ~我 们 可 以 继续这样的处理过程。当所有的因子都处理完毕后, 这个结果就通过综合属性上传到树的根部.

上面是龙书的原话,其实挺难以理解的,我们用例子帮助理解.例如上图,F.valF.valF.val和F×T′F\times T'F×T′的值通过inh从左到右,从上往下传递(蓝色箭头),直到叶节点T′→ϵT'\to \epsilonT′→ϵ,此时计算结束,结果通过syn从下往上(绿色节点)传递到根节点T.valT.valT.val.最终结果如下.

继承属性inh和综合属性syn的作用相关推荐

  1. 【编译原理笔记08】语法制导翻译:语法制导定义,SSD的求值顺序,S属性定义与L属性定义

    本次笔记内容: 5-1 语法制导翻译概述 5-2 语法制导定义 5-3 SSD的求值顺序 5-4 S属性定义与L属性定义 本节课幻灯片,见于我的 GitHub 仓库:第8讲 语法制导翻译_1 文章目录 ...

  2. Vivado使用:综合篇(三)综合属性

    Vivado 开发套件中,Vivado综合能够综合多种类型的属性,大多数情况下,这些属性的使用语法和行为都一样.当使用综合属性时,假如Vivado能够识别该属性,那么就使用这个属性并创建反映已经使用该 ...

  3. 为什么终结符只有综合属性?

    书本上关于综合属性与继承属性的定义是: 对关联产生式A->α\alphaα的语义动作b:=f(c1,c2,c3,-,ck),如果b是A的某个属性,则称b是A的一个综合属性.从分析树的角度来看,计 ...

  4. 【轻松学】Python面向对象编程——类的设计、基础语法、继承、多态、类属性和类方法、单例设计

    文章目录 1. 类的设计 大驼峰命名法 1.1 类名的确定 1.2 属性和方法的确定 练习 1.1 练习 1.2 2. 面相对象基础语法 2.1 定义简单的类(只包含方法) 2.1.1 定义只包含方法 ...

  5. Vivado 随笔(3) 其他综合属性 dont_touch、fsm_encoding?

    目录 dont_touch fsm_encoding dont_touch 可以参考: Vivado中如何避免信号被优化掉? fsm_encoding 我们在RTL设计中,在状态机的设计中,会给状态变 ...

  6. Vivado 随笔(2) 综合属性之use_dsp48?

    目录 背景 正文 测试 放置在Module前 放置在变量声明前 附加测试 放置在某个变量声明前 放置在Module前 相关链接 背景 在做一些FPGA算法的时候,我们不可避免的使用到大量的算术运算,例 ...

  7. Vivado 随笔(1) 综合属性之 ram_style rom_style?

    目录 背景 正文 相关文献 背景 在很多情况下,我们会定义一个二维数组来作为RAM或者ROM来使用,例如我们在设计一个异步FIFO时,我们需要例化一个双端口RAM来作为FIFO的存储空间,当然我们可以 ...

  8. Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表

    Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表 <?xml version="1.0"?> <!DOCTYPE hibernate-m ...

  9. Python OOP:面向对象三大特性(封装、继承、多态)、类属性和实例属性、类方法@classmethod、静态方法@staticmethod、函数和类callable、__call__

    一.面向对象三大特性 二.多态 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果. 一个父类,可以继承给多个子类,每个不同的子类可以创建多个对象 ...

最新文章

  1. iphone开发 NSURL中fileURLWithPath和URLWithString的区别
  2. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...
  3. vs2005 智能感知不正常的解决办法
  4. XML配置文件中的Spring配置文件
  5. 紧跟潮流的背景设计,赶紧尝试用新的背景改变旧的设计。
  6. 配置映射文件中使用的类的类型别名typeAliases
  7. CCF201609-1 最大波动(100分)
  8. 计算机基础(十):git仓库管理命令小结
  9. 配置mysql复制基本步骤
  10. 孙鑫VC学习笔记:第十一讲 (五) 如何使窗口具有滚动条
  11. 资源嗅探php,PHP安全-密码嗅探
  12. win10 安装MASM32 遇到的问题DELETE operation of EXE file has failed
  13. weblogic部署静态资源文件html,Tomcat和Weblogic部署纯html文件过程解析
  14. 使用IDEA开发Android程序(二)第一个简单的程序并运行
  15. kindle买书建议
  16. 物联网应用技术和计算机应用技术,物联网应用技术专业介绍
  17. ubuntu下公式编辑器EqualX的安装和使用
  18. could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#20007] 使用jbpm流程结束时出现异常
  19. auto.js朋友圈克隆 截图 上传数据
  20. OpenCV:直方图均衡

热门文章

  1. 郭德纲恶心别人的台词大全
  2. Java8获取年、月、周数据和某一天的开始结束时间
  3. 推荐5个程序员专属的开源APP
  4. redis 用scan 代替keys,hgetAll
  5. JavaScript之DOM学习笔记
  6. 谷歌SEO优化八步走
  7. Linux学习(十四)——scp远程拷贝
  8. 软件构造LAB2心得
  9. 使用Java生成带有下划线字体的文字
  10. 摄像头和麦克风的使用日志管控方案