编译原理(龙书)习题答案------第一章

  声明:参考开源项目dragon-book-exercise-answers,如有纰漏,欢迎指正。

1.1练习:

  1.1.1编译器和解释器之间的区别是什么?

  编译器是一个程序,它能将某一语言编写的源程序翻译成与之等价的有目标语言编写的程序,并在翻译过程中报告所发现的错误;解释器直接利用用户提供的输入执行源程序中指定的操作。

  1.1.2编译器相对于解释器的优点是什么?解释器相对于编译器的优点是什么?

  一个编译器产生的目标程序通常比一个解释器快很多;解释器逐个语句执行源程序,诊断错误的效果通常比编译器更好。

  1.1.3在一个语言处理系统中,编译器产生汇编语言而不是机器码的好处是什么?

  因为汇编语言比较容易输出和调试。

  1.1.4把一种高级语言翻译成另一种高级语言的编译器称为源到源(source-to-source)的翻译器,编译器用C语言作为目标语言有什么好处?

  因为C语言在各硬件平台都有相应的编译器进行二次编译,产生可执行的机器码。

  1.1.5描述一下汇编器所要完成的一些任务。

  生成可重定位(relocatable)的机器代码。

1.3练习:

  1.3.1指出下面术语:1)强制式的;2)声明式的;3)冯·诺依曼式的; 4)面向对象的;5)函数式的;6)第三代;7)第四代;8)脚本语言。可被用于描述下列哪些语言:  

 1)C;

  2)C++;

  3)Cobol;

  4)Fortran;

  5)Java;

  6)Lisp;

  7)ML;

  8)Perl;

  9)Python;

  10)VB

  强制式的:C、C++

  面向对象的:C++、Java

  函数式的:ML

  脚本语言:Perl、Python

1.6练习

  1.6.1对下面块结构的C代码,指出赋给w、x、y和z的值。

int w, x, y, z;
int i = 4;
int j = 5;
{
    int j = 7;
    i = 6;
    w = i + j;
}
x = i + j;
{
    int i = 8;
    y = i + j;
}
z = i + j;

    w = 13;x = 11;y=13;z=11

  1.6.2对下面块结构的C代码,指出赋给w、x、y和z的值。

int w, x, y, z;
int i = 3;
int j = 4;
{
    int i = 5;
    w = i + j;
}
x = i + j;
{
    int j = 6;
    i = 7;
    y = i + j;
}
z = i + j;

  w=9;x=7;y=13;z=11

  1.6.3对下面的块结构代码,假设使用常见的静态作用域规则,给出其中12个声明中的每一个的作用域。

{//块B1
    int w, x, y, z;
    {//块B2
        int x, z;
        {//块B3
            int w, x;
        }
    }
    {//块B4
        int w, x;
        {//块B5
            int y, z;
        }
    }
}

  从上到下,从左到右:

  w:B1-B3-B4

  x:B1-B2-B4

  y:B1-B5

  z:B1-B2-B5

  x:B2-B3

  z:B2

  w:B3

  x:B3

  w:B4

  x:B4

  y:B5

  z:B5  

  1.6.4下面C代码打印的结果是什么?

#define a (x+1)
int x = 2;
void b(){x=a; printf("%d\n", x);}
void c(){int x=1; printf("%d\n", a);}
void main(){b(); c();}

  3

  2

  

时间: 2024-08-24 14:02:19

编译原理(龙书)习题答案------第一章的相关文章

编译原理 龙书 第二章 一个简单的算术式(+,-)翻译器实现

昨天晚上决定正面硬刚神课<编译原理>.硬上龙书. 下面是 一个简单的算术式中缀变后缀的翻译器. 这个也是 龙书中 一个C实现源码 .部分用c++改写. #include <iostream> #include <ctype.h> #include <stdlib.h> #include <stdio.h> using namespace std; int lookahead; void error()//错误处理 { cout<<&q

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由  ValRay 发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用.B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架.下面分别介绍这两

C++Primer第五版习题解答---第一章

C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #include<iostream> int main() { std::cout << "hello, world" << std::endl; return 0; } 练习1.4: #include<iostream> int main() { int

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM

OSGi原理与最佳实践:第一章 OSGi框架简介(5)Spring-DM 由  ValRay 发布 已被浏览8409次 共有3条评论 已被2个人收藏 2013-08-16 21:29 顶(1) 踩(0) osgi原理与最佳实践 1.3 Spring-DM 1.3.1 简介 Spring-DM 指的是 Spring Dynamic Modules.Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环

《机器学习》 西瓜书习题 第 2 章

习题 \(2.1\) 数据集包含 \(1000\) 个样本, 其中 \(500\) 个正例.\(500\) 个反例, 将其划分为包含 \(70\%\) 样本的训练集和 \(30\%\) 样本的测试集用于留出法评估, 试估算共有多少种划分方式. 如果划分要保证正例和反例一样多的话, 那么划分方式数量 \(n\) 有 \[\begin{aligned} n &= C^{500\times35\%}_{500}\times C_{500}^{500\times 35\%}\&=(C^{175}_

【网络原理】期末复习笔记 第一章 概述

第一章 概述 1.1 网络在现代的作用 21世纪三化:数字化(声音信号数字化处理,为了电脑处理和传输).网络化.信息化 三网:电信网络(电话).有线电视网络(同轴电缆.从有线电视公司到用户).计算机网络(因特                 网.其他网络) 1.2 计算机网络的重要功能       连通性:彼此联通.交换信息     ·远程桌面客户端:mstsc(Microsoft terminal services client) Win10.win7是单用户操作系统,只允许一个用户同时操作.

读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化

写在前面 从开始写代码到现在,已经做了好几个项目了,BS和CS的都有,一直都以一个码农自居.但,作为一个进步的程序员,都有一个成为架构师的理想.于是,在平时的工作中,也积极的去看各种书籍,看园子里面的精品文章.希望,在这条追逐梦想的道路上,能够留下点点滴滴,也算是对知识的一种巩固,一些分享. 读书感受   快下班的时候,看了该书的第一章.算是对网站的架构演化有了一些认识. (1)初始网站的架构:一台服务器,应用程序,数据库,文件都在一台服务器上面.LMAP足矣. (2) 二级网站的架构:应用服务

曼昆《经济学原理》(第五版)习题解答 第一章 导 言 经济学十大原理

复习题1 .列举三个你在生活中面临的重要权衡取舍的例子.答: 1大学毕业后,面临着是否继续深造的选择,选择继续上学攻读研究生学位,就意味着在今后三年中放弃参加工作.赚工资和积累社会经验的机会; 2在学习内容上也面临着很重要的权衡取舍,如果学习<经济学>就要减少学习英语或其他专业课的时间; 3对于不多的生活费的分配同样面临权衡取舍,要多买书,就要减少在吃饭.买衣服等其他方面的开支. 随便举例子就好2 .看一场电影的机会成本是什么?答:看一场电影的机会成本是在看电影的时间里做其他事情所能获得的最大

快学Scala习题解答—第一章 基础

1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on the Java Virtual Machine>好很多. 是本不错的入门书.而且每个章节都设置了难度级别,每章有习题,可以巩固Scala语法. 本文的目的就是针对这些习题进行解答 2 基础 2.1 在Scala REPL中键入3,然后按Tab键.有哪些方法可以被应用? 这个....直接操作一遍就有结果了.