编译原理陈火旺第三版第六章课后题答案

news2024/11/16 11:41:10

下面的答案仅供参考!

1.按照表6.1所示的属性文法,构造表达式(4*7+1) *2的附注语法树。

答:

首先考虑最底最左边的内部结点,它对应于产生式F→digit,相应的语义规则为F. val: = digit.lexval,由于这个结点的子结点digit的属性digit . lexval的值为4,所以决定了结点F的属性F.val的值也为4。同样,在F.结点的父结点处,属性T.val的值也算得为4。
再考虑关于产生式T→T1*F的结点。这个结点的属性T.val的值由下面的语义规则确定:

当在这个结点应用语义规则时,根据规则T→T1*F得到左子结点,val的值为4,从右子结点得到F.val值为7。因此,在这个结点中算得T.val的值为28。再由E→T知E.val的值为28。

 再考虑关于产生式E→E1+T的结点。这个结点的属性T.val的值由下面的语义规则确定:

根据规则E→E+T得到左子结点,val的值为28,从右子结点得到T.val值为1。因此,在这个结点中算得E.val的值为29。再由F→(E)知F.val的值为29。再由T→F知T.val的值为29。

 再考虑关于产生式T→T1*F的结点。这个结点的属性T.val的值由下面的语义规则确定:

当在这个结点应用语义规则时,根据规则T→T1*F得到左子结点,val的值为29,从右子结点得到F.val值为2。因此,在这个结点中算得T.val的值为58。再由E→T知E.val的值为58。

最后,包含开始符号L的产生式L→En对应的语义规则打印出通过E得到的表达式的值。

2. 对表达式((a) + (b)):

① 按照表6.4所示的属性文法构造该表达式的抽象语法树;

表6.4是一个为包含运算符号+和-的表达式建立抽象语法树的S-属性文法。它利用文法的基本产生式来安排函数mknode和 mkleaf 的调用以建立语法树。E和T的综合属性nptr是函数调用返回的指针。

按表6.4所列的属性文法,表达式((a) +(b))带注释的语法分析树如图5.7所示。其中,构造出的抽象语法树用实线表示,语法分析树用虚线表示,语法分析树之中的E和T标识的结点中用综合属性nptr来保存指向抽象语法 树中该非终结符号对应的结点的指针(图中用带箭头的虚线表示)。

标识符和一个数的新的叶结点的指针。属性id.entry和 num.val是词法值,假设这些值是由词法分析器提供的。

② 按照图6.17所示的翻译模式,构造该表达式的抽象语法树。

按如图6.17所示的翻译模式,表达式((a)+(b))带注释的语法分析树如图5.8所示。为了使图清晰,省略了部分节点的nptr、s和i属性在图中的表示。

3.设+运算具有左结合性,试画出下列表达式的DAG图:

a+a+(a+a+a+a(a+a+a+a))

不知道是不是多打了一个a? 贴另外一个题的解法。

设+运算具有左结合性,试画出下列表达式的DAG图:

a+a+(a+a+a+(a+a+a+a))

1ida
2+11
3+21
4+31
5+34
6+25

4.设+、-、*、/运算都具有左结合性,试设计一个属性文法,删除算术表达式中冗余的括弧。例如,若已知表达式为((a* (b+c))* (d))应改写成a * (b+c)* d。

5.下列文法对整形常数和实型常数施用加法运算符+生成表达式;当两个整型数相加时,结果仍为整型数,否则 ,结果为实型数:

E →E+T|T

T → num.num |num

① 试给出确定每个子表达式结果类型的属性文法;

答:确定每个子表达式结果类型的属性文法是比较容易定义的。关键是如何扩充此属性文法,使之把表达式翻译成后缀形式。我们将不在name或num.num向T归约的时候输出该运算对象,而是把运算对象的输出放在T或E+T向E归约的时候。这是因为考虑输出类型转换算符inttoreal的动作可能在E+T向E归约的时候进行,如果这时两个运算对象都在前面name或num.num向T归约的时候已输出,需要为第1个运算对象输出类型转换算符时就已经为时太晚。
还要注意的是,在E+T向E归约时,该加法运算的第1个运算对象已经输出。所以E→E+T的语义规则不需要有输出E运算对象的动作。
(1)为文法符号E和T配以综合属性type,用来表示它们的类型。类型值分别用int和real来表示。确定每个子表达式结果类型的属性文法如下:

② 扩充(1)的属性文法,使之把表达式翻译成后缀形式 ,同时也能确定结果的类型。应该注意施用一元运算符inttoreal把整型数转换成实型数,以便使后缀形如加法运算符的两个操作数具有相同的类型。

下面属性文法将表达式的后缀表示打印输出,其中lexeme属性表示单词的拼写。

6.扩充表6.8属性文法,除跟踪方块的高度之外,还要跟踪方块的宽度。假定终结符号text具有综合属性w,给出字形的常规宽度。

答:

7.下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值:

S→L.L∣L
L→LB∣B
B→0∣1

试设计求S.val的属性文法,其中,已知B的综合属性c, 给出由B产生的二进位的结果值。例如,输入101.101时,S.val=5.625,其中第一个二进位的值是4,最后一个二进位的值是0.125。

8.分别修改习题5之(1)、(2)得到的属性文法,消除其中的左递归。
解题思路:

对文法:
E→E+TIT
T一num. num|num

消除左递归:
E→TE'
E'→+ TE'l e
T→num.num|num

9.由下列文法
S→E
E→E:=EIE+EI(E)l id
产生的表达式,其语义如C语言,包含赋值运算。就是说,b: = c是一个表达式,把c的值赋给b;该表达式的右值为e的右值。进而, a: =(b: = c)先把c的值赋给b,然后再赋给a。
(1)试建立一个属性文法,用非终结符E的继承属性side表示由E生成的表达式出现在赋值运算的左边还是右边,检查表达式的左部是一个左值。
(2)扩充(1)中的属性文法,产生某种形式的中间代码。

 

10.试设计一个翻译模式,检查同一个标识符在标识符表中是否重复出现。

11.设下列文法生成变量的类型说明:

L→ id L
L→, id L∣:T
T→ integer∣real

(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例6.2。

(2)由(1)得到的翻译模式,构造一个预测翻译器。

解题思路:
这是一个对说明语句进行语义分析的题目,不需要产生代码,但要求把每个标识符的类型填入符号表中。
对给定的适合于自顶向下翻译的翻译模式,书中给出了设计预测翻译器(或称递归下降翻译器)的方法。按照此方法,不难构造所求的预测翻译器。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文彻底理解Java 17中的新特性密封类

密封类的作用 在面向对象语言中,我们可以通过继承(extend)来实现类的能力复用、扩展与增强。但有的时候,有些能力我们不希望被继承了去做一些不可预知的扩展。所以,我们需要对继承关系有一些限制的控制手段。而密封类…

android framework-ActivityManagerService(AMS)上

一、SystemServer android-10.0.0_r41\frameworks\base\services\java\com\android\server\SystemServer.java 1.1、startOtherService AMS初始化完成后,会调用systemReady方法。 mActivityManagerService.systemReady(() -> {Slog.i(TAG, "Making service…

springboot +flowable,简单实现工作流基础功能的demo例子

一.简介 对于flowable是什么以及关于此框架的具体信息可以参看此项目的官方文档:https://www.flowable.org/docs/userguide/index.html Flowable is a light-weight business process engine written in Java.这是官网文档对此框架的完美解释:Flowable…

NetApp AFF C 系列全闪存存储解决方案

NetApp AFF C 系列: “C”代表“酷炫”(Cool) 采用最新的容量闪存技术,辅以若干一流的智能技术,您将获得一个经济实惠的闪存解决方案,它重新定义了安全性、可扩展性和可持续性。 为什么选择 AFF C 系列的容量闪存解决方案? 实现…

jmeter获取图片验证码-解密图片并识别

说明: 关于图片验证码的处理方式有三种方法:一是让开发屏蔽验证码,二是让开发后端指定一个万能验证码,三是使用OCR工具进行图片验证码的解密及识别,推荐使用前两种方法最省事; OCRServer工具识别图片验证码…

Netty核心源码分析(二),Netty的Server端接收请求过程源码分析

文章目录 系列文章目录一、连接请求接受过程源码分析1、事件的值2、processSelectedKeys获取事件(1)doReadMessages方法(2)pipeline的fireChannelRead方法(3)ServerBootstrapAcceptor的channelRead方法 3、…

关于数据挖掘和数据集成?

按照数据的生命周期,我们通常将大数据技术分为数据集成、数据存储、批流处理、数据查询与分析、数据调度与编排、数据开发、BI 7 个部分。 可以看到数据集成在数据生命周期最前面的位置,它负责将多个来自不同数据源的数据聚合存放在一个数据存储中&…

分布式任务调度框架Power-Job

分布式任务调度框架的由来及对比 在大型业务业务系统中,不可避免会出现一些需要定时执行需求的场景,例如定时同步数据,定时清洗数据,定时生成报表,大量机器一同执行某个任务,甚至有些需要分布式处理的任务…

中继器+js组件化GIS地图

虽然可以使用JavaScript注入的方式将GIS地图嵌入Axure,但每次使用地图都需要重复嵌入并修改代码,不太方便。那么,能不能实现组件化呢?我们可以使用中继器(repeater)将常用的地图参数提取出来,通…

力扣题库刷题笔记406-根据身高重建队列

1、题目如下: 2、个人Python代码实现 这里需要单独备注一下截图中第21行代码: 上图可以看到,已经对[5, 2]等元素进行了遍历循环,且[5, 2]左侧确实只存在[7, 0][6, 1]两个元素身高高于他,但是继续[5,0]循环完成后&#…

@Async异步线程:Spring 自带的异步解决方案

前言 在项目应用中,使用MQ异步调用来实现系统性能优化,完成服务间数据同步是常用的技术手段。如果是在同一台服务器内部,不涉及到分布式系统,单纯的想实现部分业务的异步执行,这里介绍一个更简单的异步方法调用。 对于…

FreeRTOS - 计数信号量

一.任务功能 1、修改按键功能,模拟停车位出入功能 2、当按键按下 获取车位 3、当按键抬起 释放车位 二.API接口 函数原型SemaphoreHandle_t xSemaphoreCreateCounting( ①UBaseType_t uxMaxCount,②UBaseType_t uxInitialCount );功能概述创建计数信号量&#xff0c…

详解空气质量API 使用

引言 空气污染是当今世界面临的一大环境问题,而空气质量监测数据是制定环境政策和公众健康计划的重要依据。通过提供空气质量查询 API,开发人员可以方便地获取中国境内多个城市的空气质量数据,从而更好地监测和管理空气质量。 本文将介绍的…

Redis入门学习笔记【一】

目录 一、redis是什么 二、Redis数据结构 2.1 Redis 的五种基本数据类型 2.1.1String(字符串) 2.1.2字符串列表(lists) 2.1.3字符串集合(sets) 2.1.5哈希(hashes) 2.2 Red…

设计模式详解-软件设计(五十六)

原创 真题详解(UML图)-软件设计(五十五)https://blog.csdn.net/ke1ying/article/details/130311994 创建型、结构型、行为型 抽象工厂(Abstruct Factory) 提供一个创建系列相关或相互依赖的接口,无须指定他们具体的类。 适用于&…

07-Node.js—包管理工具

目录 1、概念介绍1.1 包是什么1.2 包管理工具1.3 常用的包管理工具 2、npm2.1 npm 的安装2.2 npm 基本使用2.2.1 初始化2.2.2 搜索包2.2.3 下载安装包2.2.4 require 导入 npm 包基本流程 2.3 生产环境与开发环境2.4 生产依赖与开发依赖2.5 全局安装2.5.1 修改 windows 执行策略…

CorelDRAW 2023版本更新内容及安装详细教程

这里是CorelDRAW 2023版本更新内容及安装详细教程: CorelDRAW 2023是最新更新版本,在界面和功能上做了较大提升与优化: 1. 简洁界面:采用全新设计界面,简约而不简单。菜单和工具栏进行了整合与重组,更加直观。拥有自动标记和提示,易于上手使用。 2. 全新工作空间:提供“轻量…

Qt — Graphics/View框架

文章目录 前言一、Qt图形系统介绍二、Graphics/View框架 前言 Qt的Graphics/View框架被用来存放、显示二维图形元素,处理那些对图形元素进行操作的交互命令。 一、Qt图形系统介绍 Qt 应用程序的图形界面包含各种控件,比如窗口、按钮、滚动条等。所有这…

三谈ChatGPT(ChatGPT可以解决问题的90%)

这是我第三次谈ChatGPT,前两篇主要谈了ChatGPT的概念,之所以火的原因和对人们的影响,以及ChatGPT可能存在的安全风险和将面临的监管问题。这一篇主要讲讲ChatGPT的场景和处理问题的逻辑。 这一次我特意使用了ChatGPT中文网页版体验了一番。并…

3个月,从功能测试进阶到自动化测试涨薪10k,我悟了....

因为我最近在分享自动化测试技术,经常被问到: 功能测试想转自动化,请问应该怎么入手?有没有好的资源推荐? 那么,接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。(学习路线和…