程序设计语言与编译课后答案
‘壹’ C 语言程序设计教程陈波,吉根林主编习题答案
您好,与其他高级语言相比,c语言之所以发展迅速,成为最受欢迎的语言之一,主要原因是它具有强大的功能。归纳起来,C语言具有以下一些特点:1.C语言是中级语言c语言通常被称为中级语言。因为c语言既具有高级语言的基本结构和语句,又具有低级语言的实用性,所以人们称为“高级语言中的低级语言”或“中级语言”。例如,c语言允许直接访问物理地址,可以像汇编语言一样对位、字节和地址进行操作。2.C语言是结构化程序设计语言结构化语言的特点是代码与数据分隔,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。作为一种结构化程序设计语言,其逻辑结构由顺序、选择(分支)和循环3种基本结构组成,以函数作为模块,实现程序的模块化设计,符合现代编程风格。3.语言简洁、紧凑,使用方便、灵活C89’标准定义的C语言只有32个关键字、9种控制语句。和IBM-PC的BASIC相比,BASIC包含的关键字多达159个。C程序主要由小写字母组成,书写格式自由。C程序比较简练,源程序短,输入程序时工作量少。4.运算符和数据结构丰富,表达式多样C语言共有34种运算符。在C语言中把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。表达式类型多样,既提高了编译效率和目标代码的质量,又提高了程序的可读性。c语言提供了各种各样的数据类型,如整型、实型、字符型、数组类型、指针类型、结构体类型等,能够实现各种数据结构,如线性表、链表、栈、队列、树、图等。尤其是指针类型数据,使用起来灵活、多样,程序运行效率更高。5.语法限制不太严格,程序设计自由度大C语言编译系统的语法检查不太严格。例如,在C语言中对数组下标越界不进行检查,由编程者自己保证程序的正确;变量类型使用灵活,整型和字符型变量都可以通用等。其优点是允许编程者有较大的自由度。但明显的缺点是增加了程序的不安全因素。这就要求编程者在编程时自我约束,养成良好的、严谨的编程习惯,程序编好后要仔细检查。
要是想学好C我倒是有很不错的视频教程,比看书要效率高多了。
‘贰’ c语言程序设计教程课后习题答案 黄复贤的
大学学习资料免费下载网 有
在 其他公共课程 版块
标题:
C语言程序设计第三版谭浩强课后习题答案完整版txt
谭浩强C语言程序设计习题参考解答
C程序设计题解与上机指导 答案
还有很多相关资料:
谭浩强编《C语言程序设计》视频教程(曾怡讲解) 在线 下载
谭浩强编《C语言程序设计》(电子书+纸质书)
......
下载不用积分
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
‘叁’ C语言程序设计教程(第二版) 周宇 课后答案
二、 1. I love China! printf("we are students.\n") 2. 6 项目实训题参考答案 1.编写一个C程序,输出以下信息: * * * * * * * * * * * * * * * * * * * * I am a student! * * * * * * * * * * * * * * * * * * * * main() { printf("********************\n"); printf(" I am a student!\n "); printf("********************\n"); } 2222....已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。 解: main() { int a,b,c,v; a=10; b=20; c=15; v=a*b*c; printf("v=%d",v); } 本程序运行结果为: v=3000 第第第第2章章章章 编制编制编制编制C程序的基础知识程序的基础知识程序的基础知识程序的基础知识 一 选择题 C B A B A C C 二 操作题 2 21. 3,2,-8,2 3.000000,2.500000,-8.000000 2. ABC DE FGH why is 21+35 equal 52 3. 3 1 4 3 2 3 1 2 4. aa bb cc abc A N 项目实训题 1.定义一个符号常量M为5和一个变量n值为2,把它们的乘积输出。 #define M 5 main() { int n,c; n=2; c=M*n; printf("%d\n",c); } 2.编程求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4,设x=2.5,a=7,y=4.7; (2)(float)(a+b)/2+(int)x%(int)y,设a=2,b=3,x=3.5,y=2.5。 (1)main() { int a=7; float x=2.5,y=4.7; printf("%f\n",x+a%3*(int)(x+y)%2/4); } (2)main() { int a=2,b=3; float x=3.5,y=2.5; printf("%f\n",(float)(a+b)/2+(int)x%(int)y); 第三章第三章第三章第三章 顺序结构程序设计顺序结构程序设计顺序结构程序设计顺序结构程序设计 一 选择题 A C D C C 二 操作题 1. x=3,a=2,b=3 2. z=12.700000 3. 1 2 1 a 2 1 2 三三三三....编程题 编程题编程题编程题编程题 1. 某工种按小时计算工资,每月劳动时间(小时)×每小时工资=总工资,总工资中扣除10%公积金,剩余的为应发工资。编写一个程序从键盘输入劳动时间和每小时工资,打印出应发工资。 解: #include <stdio.h> main() { float sj,gz,yfgz; printf("time,salary:"); scanf("%f,%f",&sj,&gz); yfgz=sj*gz*0.9; printf("total salary:%f\n",yfgz); } 本程序运行结果为: time,salary:4,3<CR> total salary:10.800000 2.编写一个程序求出任意一个输入字符的ASCII码 解: #include <stdio.h> main() { char c; printf("Input a string:"); scanf("%c",&c); printf("%c ASCII is %d\n",c,c); } 本程序运行结果为: Input a string:a<CR> a ASCII is 97 3、编写一个程序用于水果店售货员算帐:已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,橘子每斤1.6元,要求输入各类水果的重量,打印出应付第四章第四章第四章第四章 选择结构程序设计选择结构程序设计选择结构程序设计选择结构程序设计 一、略 二、B B A B C B A 三、1. 1 0 2. 2 3 2 2 3. 10 20 0 4. ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’ ch>=’0’&&ch<=’9’ ch==’ ’ 5. -1 四、上机操作 1. 从键盘输入一个英文字母,如果是大写字母,则将它变为小写字母输出;如果是小写字母,则将其变为大写字母输出。 #include<stdio.h> main() {char ch; ch=getchar(); if(ch>='A'&&ch<='Z') ch+=32; else if(ch>='a'&&ch<='z') ch-=32; putchar(ch); putchar('\n'); } 2. 根据输入的x值依据下列表达式,计算y的值。 2x (x>-1) y = 3 (x=-1) 4+x (x<-1) 解: main() { float x,y; scanf("%f",&x); if(x>-1) y=2*x; else if(x==1) y=3; else y=4+x; printf("y=%f",y); } 本程序运行结果为: -2<CR> y=2.000000 3.编写程序,输入一个整数,判断它是奇数还是偶数,若是奇数,输出“Is Odd“;若是偶数,输出“Is Even“。 main() { int x; scanf("%d",&x); if(x%2==0) printf("Is Even\n"); else printf("Is Odd\n"); } 4.设计应用程序,求二次方程ax2+bx+c=0的解。 #include<math.h> main() { float a,b,c,disc,x1,x2,p,q; scanf("%f,%f,%f",&a,&b,&c); if(fabs(a)<=1e-6) printf(" The equation is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)< 1e-6) printf("x1=x2=%8.4f\n",-b/(2*a)); else if(disc>1e-6) {x1=(-b+sqrt(disc)/(2*a)); x2=(-b-sqrt(disc)/(2*a)); printf("x1=%8.4f,x2=%8.4f\n",x1,x2); } else { p=-b/(2*a); q=sqrt(-disc/(2*a)); printf("%8.4f+%x8.4fi\n",p,q); printf("%8.4f-%8.4fi\n",p,q);} } } 5555....按托运规则,行李不超过50公斤时,运费为0.15元/公斤,如超过50公斤,超过部分的运费为0.22元/公斤,现有行李w公斤,编写一个程序计算运费。 解: #include <stdio.h> main() { float w,f,x; printf("weight:"); scanf("%f",&w); if(w<=50) x=0.15*w; else x=0.15*50+0.22*(w-50); printf("money:%6.2f yuan\n",x); } 本程序运行结果为: weight:20<CR> money:3.00 yuan weight:60<CR> money:9.70 yuan 6. 某商场给与顾客购物的折扣率如下: 购物金额<200元 不打折 500元>购物金额>=200元 9折 1000元>购物金额>=500元 8折 购物金额>=1000元 7.5折 输入一个购物金额,输出打折率、购物实际付款金额。 #include<stdio.h> main() { float x,y,realx; scanf("%f",&x); if(x<=0) { printf("Error! You input a worry number!\n"); y=0;} else { if(x<200) y=1.0; else if(x<500) y=0.9; else if(x<1000) y=0.8; else y=0.75;} if(y!=0) {realx=x*y; printf("y=%f, the realx=%5.2f\n", y,realx);} } 第五章第五章第五章第五章 循环结构程序设计循环结构程序设计循环结构程序设计循环结构程序设计 一、选择题 C C A A D D第六章第六章第六章第六章 数组数组数组数组 、选择题 D A D A A C C A D 二、程序阅读题 13 13 13 13 13 13第七章第七章第七章第七章 函数函数函数函数 一、选择题 B D C B B D A A D第第第第8888章章章章 指针指针指针指针 一、选择题 D A C C(D) D C D 二、填空题 1. m 2. 指针数组名 3. ABCDCD 4.49 5. 25
‘肆’ 求《C语言程序设计基础》的课后习题答案
大学学习资料免费下载网 有类似资料
在 其他公共课程 版块
标题:陈东方 C语言程序设计基础实验与题解(答案)
中国物联网校企联盟技术部
‘伍’ c语言程序设计课后习题答案(高等教育出版社何钦铭 颜晖 主编)
大学学习资料免费下载网 有
在 其他公共课程 版块
标题:
C语言程序设计第三版谭浩强课后习题答案完整版txt
谭浩强C语言程序设计习题参考解答
C程序设计题解与上机指导 答案
还有很多相关资料:
谭浩强编《C语言程序设计》视频教程(曾怡讲解) 在线 下载
谭浩强编《C语言程序设计》(电子书+纸质书)
......
下载不用积分
‘陆’ c++程序设计基础教程课后答案(清华大学出版社郑莉 董渊着)
第 一 章 概述
1-1 简述计算机程序设计语言的发展历程。
解:
迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。
1-2 面向对象的编程语言有哪些特点?
解:
面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。C++语言是目前应用最广的面向对象的编程语言。
1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?
解:
结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。
1-4 什么是对象?什么是面向对象方法?这种方法有哪些特点?
解:
从一般意义上讲,对象是现实世界中一个实际存在的事物,它可以是有形的,也可以是无形的。对象是构成世界的一个独立单位,它具有自己的静态特征和动态特征。面向对象方法中的对象,是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位,由一组属性和一组行为构成。
面向对象的方法将数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体--对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口,与外界发生关系,对象与对象之间通过消息进行通讯。这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。通过实现继承与多态性,还可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。
面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。
1-5 什么叫做封装?
解:
封装是面向对象方法的一个重要原则,就是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。
1-6 面向对象的软件工程包括哪些主要内容?
解:
面向对象的软件工程是面向对象方法在软件工程领域的全面应用,它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容。
1-7 简述计算机内部的信息可分为几类?
解:
计算机内部的信息可以分成控制信息和数据信息二大类;控制信息可分为指令和控制字两类;数据信息可分为数值信息和非数值信息两类。
1-8 什么叫二进制?使用二进制有何优点和缺点?
解:
二进制是基数为2,每位的权是以2 为底的幂的进制,遵循逢二进一原则,基本符号为0和1。采用二进制码表示信息,有如下几个优点:1.易于物理实现;2.二进制数运算简单;3.机器可靠性高;4.通用性强。其缺点是它表示数的容量较小,表示同一个数,二进制较其他进制需要更多的位数。
1-9 请将以下十进制数值转换为二进制和十六进制补码:
(1)2 (2)9 (3)93
(4)-32 (5)65535 (6)-1
解:
(1) (2)10 = (10)2 = (2)16
(2) (9)10 = (1001)2 = (9)16
(3) (93)10 = (1011101)2 = (5D)16
(4) (-32)10 = (11100000)2 = (E0)16
(5) (65535)10 = (11111111 11111111)2 = (FFFF)16
(6) (-1)10 = (11111111 11111111)2 = (FFFF)16
1-10 请将以下数值转换为十进制:
(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2
(4)(7F)16 (5)(2D3E)16 (6)(F10E)16
解:
(1)(1010)2 = (10)10
(2)(10001111)2 = (143)10
(3)(01011111 11000011)2 = (24515)10
(4)(7F)16 = (127)10
(5)(2D3E)16 = (11582)10
(6)(F10E)16 = (61710)10
1-11 简要比较原码、反码、补码等几种编码方法。
解:
原码:将符号位数字化为 0 或 1,数的绝对值与符号一起编码,即所谓"符号——绝对值表示"的编码。
正数的反码和补码与原码表示相同。
负数的反码与原码有如下关系:
符号位相同(仍用1表示),其余各位取反(0变1,1变0)。
补码由该数反码的最末位加1求得。
第 二 章 C++简单程序设计
2-1 C++语言有那些主要特点和优点?
解:
C++语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。 C++语言最重要的特点是支持面向对象。
2-2 下列标识符哪些是合法的?
Program, -page, _lock, test2, 3in1, @mail, A_B_C_D
解:
Program, _lock, test2, A_B_C_D是合法的标识符,其它的不是。
2-3 例2.1中每条语句的作用是什么?
#include <iostream.h>
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}
解:
#include <iostream.h> //指示编译器将文件iostream.h中的代码
//嵌入到该程序中该指令所在的地方
void main() //主函数名,void 表示函数没有返回值
{ //函数体标志
cout<<"Hello!\n"; //输出字符串Hello!到标准输出设备(显示器)上。
cout<<"Welcome to c++!\n"; //输出字符串Welcome to c++!
}
在屏幕输出如下:
Hello!
Welcome to c++!
2-4 使用关键字const而不是#define语句的好处有哪些?
解:
const定义的常量是有类型的,所以在使用它们时编译器可以查错;而且,这些变量在调试时仍然是可见的。
2-5 请写出C++语句声明一个常量PI,值为3.1416;再声明一个浮点型变量a,把PI的值赋给a。
解:
const float PI = 3.1416;
float a = PI;
2-6 在下面的枚举类型中,Blue的值是多少?
enum COLOR ;
解:
Blue = 102
2-7 注释有什么作用?C++中有哪几种注释的方法?他们之间有什么区别?
解:
注释在程序中的作用是对程序进行注解和说明,以便于阅读。编译系统在对源程序进行编译时不理会注释部分,因此注释对于程序的功能实现不起任何作用。而且由于编译时忽略注释部分,所以注释内容不会增加最终产生的可执行程序的大小。适当地使用注释,能够提高程序的可读性。在C++中,有两种给出注释的方法:一种是延用C语言方法,使用"/*"和"*/"括起注释文字。另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。
2-8 什么叫做表达式?x = 5 + 7是一个表达式吗?它的值是多少?
解:
任何一个用于计算值的公式都可称为表达式。x = 5 + 7是一个表达式,它的值为12。
2-9 下列表达式的值是多少?
1. 201 / 4
2. 201 % 4
3. 201 / 4.0
解:
1. 50
2. 1
3. 50.25
2-10 执行完下列语句后,a、b、c三个变量的值为多少?
a = 30;
b = a++;
c = ++a;
解:
a:32 ; b:30 ; c:32;
2-11 在一个for循环中,可以初始化多个变量吗?如何实现?
解:
在for循环设置条件的第一个";"前,用,分隔不同的赋值表达式。
例如:
for (x = 0, y = 10; x < 100; x++, y++)
2-12 执行完下列语句后,n的值为多少?
int n;
for (n = 0; n < 100; n++)
‘柒’ 把编译程序设计原理(第二版)高等教育出版社的课后答案给我发一份 可以吗
目录
第1章编译器概述
1.1为什么要学习编译技术
1.2编译器和解释器
1.3编译器的功能分解和组织结构
1.4编译器的伙伴
1.5编译器的复杂性
1.6编译器的设计与实现
1.7编译器的测试与维护
第2章一个微型编译器
2.1基础知识
2.2ToyL语言
2.3ToyL语言词法分析器
2.4ToyL语言语法分析器
2.5ToyL语言解释器
2.6ToyL语言编译器
第3章有穷自动机与词法分析
3.1词法分析基础
3.1.1词法分析器的功能
3.1.2单词识别
3.1.3词法分析的复杂性
3.1.4字符串
3.1.5保留字处理
3.1.6空格符、回车符、换行符
3.1.7括号类配对预检
3.1.8词法错误修正
3.1.9词法分析独立化的意义
3.2有穷自动机
3.2.1确定有穷自动机的定义
3.2.2确定有穷自动机的实现
3.2.3非确定有穷自动机
3.2.4NFA到DFA的转换
3.2.5确定有穷自动机的极小化
3.2.6自动机状态转换表的实现
3.3正则表达式
3.3.1正则符号串集
3.3.2正则表达式的定义
3.3.3正则表达式的局限性
3.3.4正则定义
3.3.5正则表达式到有穷自动机的转换
3.4词法分析器的构造
3.4.1用DFA人工构造词法分析器
3.4.2词法分析器的生成器Lex
练习
第4章文法与语法分析
4.1语法分析
4.1.1语法分析器的输入
4.1.2语法分析的任务
4.1.3语法分析方法分类
4.2文法和文法分析
4.2.1上下文无关文法和语言
4.2.2最左推导和最右推导
4.2.3语法分析树与二义性
4.2.4文法分析算法
4.2.5自顶向下方法概述
4.2.6自底向上方法概述
4.3递归下降法——自顶向下分析
4.3.1递归下降法原理
4.3.2消除公共前缀
4.3.3代入
4.3.4消除左递归
4.4LL分析方法——自顶向下分析
4.4.1LL(1)文法
4.4.2LL(1)分析表
4.4.3LL(1)分析的驱动器
4.4.4LL(1)中的If-Then-Else问题
4.4.5LL(1)分析器的自动生成器LLGen
4.4.6LL(1)分析法与递归下降法的比较
4.4.7正则文法
4.5LR方法——自底向上分析
4.5.1句柄
4.5.2活前缀
4.5.3归约活前缀识别器——LR(0)自动机
4.5.4LR(0)文法及其分析算法
4.5.5SLR(1)文法及其分析算法
4.5.6LR(1)文法
4.5.7LALR(1)文法
4.5.8二义性文法的处理
4.5.9另一种Shift-Rece分析技术:简单优先法
4.5.10LL(1)和LALR(1)方法比较
4.6LR分析器的生成器
4.6.1LALR分析器的生成器YACC
4.6.2LALR分析器的生成器LALRGen
4.7语法错误处理
4.7.1错误恢复和修复
4.7.2递归下降分析的错误恢复
4.7.3LL分析的错误恢复
4.7.4LR分析的错误恢复
练习
第5章语义分析
5.1语义分析基础
5.1.1语义分析内容
5.1.2标识符信息的内部表示
5.1.3类型信息的内部表示
5.1.4运行时值的表示
5.2符号表
5.2.1符号表查找技术
5.2.2符号表的局部化
5.2.3二叉式局部符号表
5.2.4散列式全局符号表
5.2.5嵌套式全局符号表
5.2.6符号表界面函数
5.3类型分析
5.3.1类型的等价性和相容性
5.3.2类型分析的总控算法
5.3.3类型名分析
5.3.4枚举类型分析
5.3.5数组类型分析
5.3.6记录类型分析
5.3.7联合类型分析
5.3.8指针类型分析
5.3.9递归类型分析
5.4声明的语义分析
5.4.1声明的语法结构
5.4.2标号声明部分的语义分析
5.4.3常量声明部分的语义分析
5.4.4类型声明部分的语义分析
5.4.5变量声明部分的语义分析
5.4.6过程、函数声明的语义分析
5.5执行体的语义分析
5.5.1执行体的语义分析
5.5.2带标号语句和转向语句的语义分析
5.5.3赋值语句的语义分析
5.5.4条件语句的语义分析
5.5.5while循环语句的语义分析
5.5.6for循环语句的语义分析
5.5.7过程调用语句的语义分析
5.5.8表达式的语义分析
5.5.9变量的语义分析
练习
第6章运行时的存储环境
6.1运行时的存储空间结构与分配
6.1.1运行时的存储空间基本结构
6.1.2静态区的存储分配
6.1.3栈区的存储分配
6.1.4堆区的存储分配
6.1.5堆区空间管理
6.2过程活动记录与栈区组织结构
6.2.1过程活动记录
6.2.2活动记录的填写
6.2.3栈区组织结构——AR链
6.3运行时的变量访问环境
6.3.1可访问活动记录
6.3.2局部Display表方法
6.3.3静态链方法
6.3.4全局Display表方法和寄存器方法
6.3.5无嵌套时的AR及访问环境
6.4分程序和动态数组空间
6.4.1无动态数组时的分程序空间
6.4.2动态数组空间
练习
第7章面向语法的语义描述
7.1动作文法
7.1.1动作文法定义
7.1.2动作文法的递归实现
7.1.3动作文法的LL实现
7.1.4动作文法的LR实现
7.2动作文法应用
7.2.1用动作文法描述表达式计算
7.2.2用动作文法描述表达式抽象树的构造
7.2.3用动作文法描述语句抽象树的构造
7.3抽象动作文法及其应用
7.3.1抽象变量
7.3.2抽象动作文法
7.3.3栈式LL动作文法驱动器
7.3.4抽象动作文法到栈式LL动作文法的转换
7.3.5栈式LR动作文法驱动器
7.3.6抽象动作文法到栈式LR动作文法的转换
7.4属性文法
7.4.1属性文法定义
7.4.2属性语法树和属性依赖图
7.4.3计算顺序
7.4.4属性值的计算方法
7.4.5拷贝型属性文法
7.5属性文法在编译器设计中的应用
7.5.1类型树的属性文法描述
7.5.2表达式中间代码的属性文法描述
7.5.3变量中间代码的属性文法描述
7.5.4语句中间代码的属性文法描述
7.5.5正则表达式到自动机转换的属性文法描述
7.6S-属性文法及其属性计算
7.6.1S-属性文法
7.6.2S-属性文法的递归实现
7.6.3S-属性文法的LR实现
7.7L-属性文法及其属性计算
7.7.1L-属性文法
7.7.2L-属性文法的递归实现
7.7.3L-属性文法的LR(1)实现
7.8语义分析器的自动生成系统
7.8.1YACC
7.8.2LALRGen
7.8.3Accent系统
练习
第8章中间代码生成
8.1中间代码
8.1.1中间代码的种类
8.1.2后缀式中间代码
8.1.3三地址中间代码
8.1.4抽象语法树和无环有向图
8.1.5多元式中间代码
8.1.6中间代码分量ARG结构
8.2表达式的中间代码生成
8.2.1表达式的语义信息
8.2.2表达式的中间代码
8.2.3变量的中间代码
8.2.4表达式的中间代码生成
8.2.5变量的中间代码生成
8.2.6布尔表达式的短路中间代码
8.3原子语句的中间代码生成
8.3.1输入/输出语句的中间代码生成
8.3.2goto语句和标号定位语句的中间代码生成
8.3.3return语句的中间代码生成
8.3.4赋值语句的中间代码生成
8.3.5函数(过程)调用的中间代码生成
8.4结构语句的中间代码生成
8.4.1条件语句的中间代码生成
8.4.2while语句的中间代码生成
8.4.3repeat语句的中间代码生成
8.4.4for语句的中间代码生成
8.4.5case语句的中间代码生成
8.4.6函数声明的中间代码生成
练习
第9章中间代码优化
9.1引言
9.1.1优化的目标和要求
9.1.2优化的必要性
9.1.3优化的内容
9.1.4局部优化和全局优化
9.1.5基本块和程序流图
9.2常表达式优化
9.2.1常表达式的局部优化
9.2.2基于常量定值分析的常表达式全局优化
9.2.3常量定值分析
9.3公共表达式优化
9.3.1基于相似性的公共表达式局部优化
9.3.2基于值编码的公共表达式局部优化
9.3.3基于活跃代码分析的公共表达式全局优化
9.3.4活跃运算代码分析
9.4程序流图循环
9.4.1循环的基本概念
9.4.2支撑结点
9.4.3自然循环
9.4.4可归约程序流图
9.4.5基于文本的循环及其处理
9.5循环不变代码外提
9.5.1代码外提的基本概念
9.5.2循环不变代码的判定
9.5.3循环不变代码外提的条件
9.5.4基于文本循环和定值表的不变代码外提
9.5.5一种简单的外提优化方案
9.5.6别名分析
9.5.7过程与函数的副作用分析
9.6循环内归纳表达式的优化
9.6.1归纳变量
9.6.2归纳变量计算的优化算法原理
练习
第10章目标代码生成
10.1目标代码
10.1.1虚拟机代码
10.1.2目标机代码
10.1.3窥孔优化
10.2临时变量
10.2.1临时变量的特点
10.2.2临时变量的存储空间
10.2.3临时变量的存储分配
10.2.4变量状态描述
10.3寄存器
10.3.1寄存器分类及其使用准则
10.3.2寄存器分配单位
10.3.3寄存器状态描述
10.3.4寄存器分配算法
10.4基于三地址中间代码的目标代码生成
10.4.1目标地址生成
10.4.2间接目标地址的转换
10.4.3表达式中间代码的目标代码生成
10.4.4赋值中间代码的目标代码生成
10.4.5其他寄存器分配法
10.4.6标号和goto语句中间代码的目标代码生成
10.4.7return中间代码的目标代码生成
10.4.8变量中间代码的目标代码生成
10.4.9函数调用中间代码的目标代码生成
10.5基于AST的代码生成
10.5.1三地址中间代码到AST的转换
10.5.2标记需用寄存器个数
10.5.3从带寄存器个数标记的AST生成代码
10.6基于DAG的代码生成
10.6.1从AST到DAG的转换
10.6.2DAG排序和虚寄存器
10.6.3从带序号和虚寄存器标记的DAG生成代码
10.7代码生成器的自动生成
10.7.1代码生成器的自动化
10.7.2基于指令模板匹配的代码生成技术
10.7.3基于语法分析的代码生成技术
练习
第11章对象式语言的实现
11.1引言
11.2SOOL语法
11.2.1程序
11.2.2分程序
11.2.3类声明
11.2.4类型
11.2.5变量声明
11.2.6函数声明和方法声明
11.2.7语句
11.2.8变量
11.2.9表达式
11.2.10程序示例
11.3SOOL语义
11.3.1声明的作用域
11.3.2Class声明的语义
11.3.3语句的语义
11.4SOOL语义分析
11.4.1标识符的符号表项
11.4.2符号表结构
11.4.3符号表的局部化
11.5SOOL目标代码
11.5.1对象空间
11.5.2当前对象——self
11.5.3活动记录
11.5.4成员变量的目标地址
11.5.5表达式的目标代码
11.5.6Offset原理
11.5.7类的多态性
11.5.8目标代码区
11.5.9方法的动态绑定
11.5.10快速动态绑定目标代码
主要参考文献
‘捌’ C语言程序设计语言(第3版)第4章课后习题答案苏小红版
网络文库链接
‘玖’ 急需程序设计语言编译原理(第3版)国防工业出版社 陈火旺 的习题解析
DOC文件下载地址:http://www.teach.ustc.e.cn/jxcg/sj/sj15/zj.doc
购买网页:http://www.maihaoshu.com/cate/855.htm
更多此书信息:http://www..com/s?tn=sitehao123&ie=gb2312&bs=%B1%E0%D2%EB%D4%AD%C0%ED%CF%B0%CC%E2%BD%E2%CE%F6&sr=&z=&cl=3&f=8&wd=%B1%E0%D2%EB%D4%AD%C0%ED%CF%B0%CC%E2%BD%E2%CE%F6%B9%FA%B7%C0%B9%A4%D2%B5%B3%F6%B0%E6%C9%E7&ct=0