第1章 编译系统概述

合集下载

C语言程序设计第1至8章复习知识点总结

C语言程序设计第1至8章复习知识点总结

printf("max=%d\n",c);
/*输出c的值*/
}
int max(int x, int y) {
int z; if (x>y) z=x; else z=y; return (z); }
/*定义max函数,函数值为整型,x、y为形参,整型*/
/*定义内部变量z*/ /*比较x,y的大小,如果x大于y,则执行z=x*/ /*否则执行z=y*/ /*将z的值返回,通过max带回调用处*/
整理课件
c语言第一至八章总结
2 基本数据类型
1、整型
2、实型
3、字符型
实型
小数形式 :3.14 指数形式:3.14*103 =3.14e003
标准化指数形式:3.14*103
对应 只有一个大于0的整数
字符
ASCII表
例:以下选项中,不能作为合法常量的是( B ) A) 1.234e04 B)1.234e0.4 C) 1.234e+4 D)1.234e0
long
注意:每一步运算都要先
unsigned
转换为同一类型 例:

int a=3,b=4;
int
char,short float c=3.0/4,d=b/a;
printf("%f,%f",c,d);
整理课件
c语言第一至八章总结
数据类型的强制转换
例2.8强制类型转换 #include<stdio.h> void main() {
程序设计语言 机器语言 机器语言
可执行
不可以
不可以
可以
文件名后缀
.c 整理课.o件bj
.exe

《编译原理》期中及期末习题

《编译原理》期中及期末习题

第一章高级语言与编译程序概述典型例题:单项选择题1.1.1.将编译程序分成若干个“遍”是为了___。

a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率1.1.2.构造编译程序应掌握____。

(陕西省2000年自考题)a.源程序b.目标语言c.编译方法d.以上三项都是1.1.3.变量应当_。

a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值1.1.4.编译程序绝大多数时间花在____上。

(陕西省1998年自考题)a.出错处理b.词法分析c.目标代码生成d.管理表格1.1.5.____不可能是目标代码。

( 陕西省1997年自考题)a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码1.1.6.数组A[1…20,1…10]的首地址偏移量为0,按列存储,每个元素占一个字节,存储器按字节编址,则A[i,j]的偏移地址为____。

a.(i-1)X10+(j-1)b.(i-1)X20+(j-1)c. (i-1)+(j-1)X10d.(i-1)+(j-1)X201.1.7.使用____可以定义一个程序的意义。

a.语义规则b.词法规则c.产生规则d.左结合规则1.1.8.表达式X:=5中,变量x____。

a.只有左值b.只有右值c.既有左值又有右值d.没有左值也没有右值1.1.9.词法分析器的输入是__。

a.单词符号b.源程序c.语法单位d.目标程序1.1.10.中间代码生成时所遵循的是_。

a.语法规则b.词法规则c.语义规则d.等价变换规则1.1.11.编译程序是对__。

a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译1.1.12.词法分析应遵循_。

(陕西省2000年自考题)a.语义规则b.语法规则c.构词规则d.等价变换规则多项选择题:1.2.1 编译程序各阶段的工作都涉及到___。

编译原理课后习题答案+清华大学出版社第二版

编译原理课后习题答案+清华大学出版社第二版
也称基地址。 SL: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地
编译程序大致有哪几种开发技术?
答案:
(1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编
译程序 T0,再把语言 L0 扩充到 L1,此时 L0⊂ L1 ,并用 L0 编写 L1 的编译程序 T1,再把语 言 L1 扩充为 L2,有 L1 ⊂ L2 ,并用 L1 编写 L2 的编译程序 T2,……,如此逐步扩展下 去, 好似滚雪球一样,直到我们所要求的编译程序。 (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。
(main).
答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为:
1
《编译原理》课后习题答案第二章
第 3题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内 容。
name
kind
level/val
adr
size
答案:
题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为:
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。

第1章_C语言概述(C语言程序设计)

第1章_C语言概述(C语言程序设计)

通过以上例子可以看出: 通过以上例子可以看出: 1. C程序是由函数构成的。每个程序由一个或多个函数组成, 程序是由函数构成的。每个程序由一个或多个函数组成, 程序是由函数构成的 其中必须有且仅有一个主函数main( )。 有且仅有一个主函数 其中必须有且仅有一个主函数 。 2. 一个可执行的 语言程序总是从 一个可执行的C语言程序总是从main函数开始执行,而不 函数开始执行, 语言程序总是从 函数开始执行 论其在整个程序中的位置如何。 论其在整个程序中的位置如何。 3. C对输入输出实行函数化。 对输入输出实行函数化。 对输入输出实行函数化 4. C程序书写格式自由,一行内可以写几个语句,一个语句 程序书写格式自由,一行内可以写几个语句, 程序书写格式自由 也可以分写在多行上。 也可以分写在多行上。 5. 可用 可用/*……*/对C程序中的任何部分作注释,注释可以写在 对 程序中的任何部分作注释 程序中的任何部分作注释, 程序的任何位置上, 也可不在同一行上。 程序的任何位置上,“/*”与“*/”也可不在同一行上。 与 也可不在同一行上 6. 在C语言中,大小写字母是有区别的。( 语言习惯用小 语言中, 。(C语言习惯用小 语言中 大小写字母是有区别的。( 写字母) 写字母)
主函数
main( ) { int x, y, z; printf(“Please input two integers:\n”) ; scanf(“%d%d” , &x, &y); z = add_xy(x, y); printf(“%d %d %d.”, x, y, z); }
西南林学院计科系
第 1章 概述
西南林学院计科系
第 1章 概述
将汇编源程序翻译为目标程序(机器语言)的过程称 为汇编 汇编。 汇编 连接的原因是由于在目标程序中还可能要调用一些 连接 标准程序库中的标准子程序或其他自定义函数等,由于 这些程序还没有连接成一个整体,因此,需通过“连接 程序”将目标程序和有关的程序库组合成一个完整的 “可执行程序”。

第1章计算机系统概论

第1章计算机系统概论
18800电子管 18800电子管 30吨 30吨 150平方米 150平方米 150kw 5000次十进制加法 次十进制加法/ 5000次十进制加法/秒
ENIAC
ENIAC
ENIAC
ENIAC的特点: ENIAC的特点:十进制表示 的特点 程序用插线开关实现
为了改进程序的输入方式: 为了改进程序的输入方式: 二进制表达方 美国数学家冯.诺依曼,提出二进制 美国数学家冯.诺依曼,提出二进制表达方 式和存储程序控制计算机构想。 存储程序控制计算机构想 式和存储程序控制计算机构想。提出并描述一 个计算机模型EDVAC 个计算机模型EDVAC
•它采用了间接寻址技术。在这种技术中,间接寻址指令所 它采用了间接寻址技术。在这种技术中, 它采用了间接寻址技术 形成的地址,不是存放操作数的地址, 形成的地址,不是存放操作数的地址,而是用来形成操作 数地址的地址。这种寻址技术在分类、 数地址的地址。这种寻址技术在分类、排序中是非常有用 的; •采用了专用的程序控制指令,这种指令对应于不同程序 采用了专用的程序控制指令, 采用了专用的程序控制指令 间的控制转移,如它的LINK/TRA指令对, LINK/TRA指令对 间的控制转移,如它的LINK/TRA指令对,即后来人们常 称的调用子程序/子程序返回指令对, 称的调用子程序/子程序返回指令对,对调用子过程等是 十分有效的; 十分有效的; •I/O处理机与CPU间的通讯采用了中断控制,并且在I/O处 I/O处理机与CPU间的通讯采用了中断控制,并且在I/O处 I/O处理机与CPU间的通讯采用了中断控制 I/O 理机中采用字的拆、装技术以使得CPU I/O设备间的字 CPU和 理机中采用字的拆、装技术以使得CPU和I/O设备间的字 长能够匹配; 长能够匹配; •采用了DMA技术。即当I/O处理机请求访问主存储器时, 采用了DMA技术。即当I/O处理机请求访问主存储器时, 采用了DMA技术 I/O处理机请求访问主存储器时 可能使CPU的主存访问请求延迟一个存储周期, CPU的主存访问请求延迟一个存储周期 可能使CPU的主存访问请求延迟一个存储周期,但是并不 中断CPU的操作,只是使CPU操作推迟一个存储周期; CPU的操作 CPU操作推迟一个存储周期 中断CPU的操作,只是使CPU操作推迟一个存储周期;

C++语言讲义(C++基础)

C++语言讲义(C++基础)

C++语言基础说明:本部分资料是C++语言基础部分,由于《C++程序设计》课本中未讲解语言基础,在此我们补充完整,希望同学们认真学习。

本资料中使用编译环境为VC第1章C++语言概述1.1 简单的C++程序介绍例#include <iostream.h>main(){cout<<"这是我的第一个程序\n";}本程序的作执行结果:每个C/C++语言程序都有一个main()函数其固定格式为://编写程序的准备工作main ( ){要编写的程序,实现不同的功能;}编程人员要做的就是在划线部分填写适当的代码。

上例中:#include <iostream.h> 表示包含文件。

说明:#include <文件名> 或#include ”文件名”表示要将文件名对应的文件中的代码包含到我们的程序中。

文件名所对应的文件一般是C/C++语言已经编辑好的库文件,可以帮助我们完成相应的工作,而代码不需要我们自己编写。

库文件是系统中自带的现有文件,其中实现了不同功能,我们要记住每个库文件的功能,以方便我们决定什么时候包含什么文件,实现什么功能。

要包含的文件也可是自己编写的文件。

main ( ) { 要编写的程序,实现不同的功能;}此部分称为main函数,是固定格式,我们要做的是在划线部分填写代码,实现不同功能。

而要完成这一部分的编写,学要了解C/C++语言的数据类型,运算符,常用函数,控制语句等等。

上例中cout<<"这是我的第一个程序\n"; 表示要在屏幕上输出“这是我的第一个程序”这句话(输出的文字是多个字符要用双引号引起来,单个字符用单引号),并在输出完成后换行(\n 表示要换行,该符号使用时应写在引号内)例求两数之和#include <iostream.h> //包含文件iostream.h,包含该文件后可使用cout输出数据。

第1章 计算机系统概述


1.4.2 电子 计算机的发展简史
• 第一代 电子管时代 电子管时代(1946-1958) 耗电高,体积大,定点计算,机器语言, 耗电高,体积大,定点计算,机器语言,汇编语言 • 第二代 晶体管时代 晶体管时代(1958-1965) 变集中处理为分级处理,浮点运算、 变集中处理为分级处理,浮点运算、高级语言 • 第三代 中小规模集成电路时代 中小规模集成电路时代(1965-1970) 存储容量大,运算速度快,几十至几百万次 秒 存储容量大,运算速度快,几十至几百万次/秒 • 第四代 大规模集成电路时代 大规模集成电路时代(1971至今 至今) 至今 向大型机和微型机两个方向发展 • 现代计算机发展方向 巨型化,微型化,网络化,智能化,多媒体化 巨型化,微型化,网络化,智能化, 根据摩尔定律集成电路大体上每18个月翻一番,今后可再用 年 根据摩尔定律集成电路大体上每 个月翻一番,今后可再用10年。 个月翻一番
计算机组成与结构
清华大学 王爱英主编 主讲 马洪连
第一பைடு நூலகம்计算机系统概论
1.1 计算机的语言 自然语言:人类相互交流信息所用的语言 自然语言 高级语言:由于当前的计算机还不具备理解自然 高级语言 语言的能力,于是人们希望找到一种和自然语言 接近并能为计算机接受的语言,这种语言被称为 计算机的高级语言 。 机器语言:然而目前的通用计算机不会直接执行 机器语言 用高级语言编写的程序,因而要先将其翻译成机 器能执行的语言,这种语言被称为机器语言(由 二进制代码表示的指令组成)。 汇编语言:符号式程序设计语言。 汇编语言
1.4.3 计算机的六大分类
• 巨型机——世界几家公司生产,最快1.4万亿次,9千个CPU组成 Cray-1,Cray-2,Cray-3,国产银河I, 银河II, 银河III • 小巨型机——功能同巨型机相近,价格相对便宜,发展十分迅速 美国Convex公司的C系列机为其代表产品。 • 大型机——大中型企事业单位作为计算中心的主机使用,统一调 度主机资源,代表产品有IBM360,370,4300等。 • 小型机——它可以满足部门性的需求,供小型企事业单位使用, 典型产品有IBM-AS/400,DEC-VAX系列,国产太级 • 工作站——用于特殊的专业领域,例如图象处理和辅助设计等。 典型产品有HP-APOLLO,SUN工作站等。 • 微型机——个人或家庭使用,PC机/个人计算机,价格低廉

第一章VisualBasic6.0概述

第一章Visual-Basic-6.0概述VBasic 6.0基础教程第一章Visual Basic 6.0的特点Visual Basic是Microsoft公司推出的一个集成开发环境,具有简单易学、功能强大、软件费用支出低、见效快等特点。

Visual Basic继承了Basic语言易学易用的特点,特别适合初学者学习Windows系统编程。

Visual Basic之所以受到广大编程爱好者以及专业程序员的青睐,是因为它具有以下一些特点:1.可视化的集成开发环境"Visual"指的是开发图形用户界面(GUI)的方法。

在使用过去的一些语言如C语言、Basic 语言编写程序时,最令程序员烦恼的是编写友好的用户界面。

使用Visual Basic编写应用程序,则不需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象添加到屏幕上即可。

"Basic"指的是BASIC(Beanner'sAll-Purpose Symbolic Instruction Code)语言--一种在计算技术发展历史上应用得最为广泛的语言。

Visual Basic在原有BASIC语言的基础上进一步发展,至今己包含了数百条语句、函数及关键词,其中很多和Windows GUI有直接关系。

专业人员可以用Visual Basis实现其它任何Windows编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序。

可见,从BASIC语言发展到Visual Basic,也就是将一们单纯的计算机语言发展成为一个集应用程序开发、测试、查错功能于一体的集成开发环境。

2.面向对象的程序设计思想面向对象的程序设计是伴随Windows图形界面的诞生而产生的一种新的程序设计思想,与传统程序设计有着较大的区别,Visual Basle就采用了面向对象的程序设计思想。

所谓"对象"就是一个可操作的实体,如窗体,以及窗体中的按钮、文木框等控件。

大学课程《C语言程序设计基础》PPT课件:第1章


第1章 C语言程序设计概述
机器语言是计算机能够直接识别的语言,它是一组二进 制编码指令。在计算机应用初期,人们用机器语言编写程序。 但是机器语言是冗长的二进制代码,难理解、难记忆、难编 程,只有少数计算机专业人员才会使用。随着计算机应用技 术的发展,计算机语言一直朝着“人性化”的方向发展,先 后出现了汇编语言和不同种类的高级语言。
第1章 C语言程序设计概述
1.2.1 数据结构与算法 数据结构与算法具有密切的联系。数据结构是加工对象,
算法则是对数据结构加工处理的方法。不同的数据结构可能 需要采取不同的算法,不同的算法可以对不同的数据进行加 工处理。
1.数据结构
何谓数据结构?数据结构在程序中如何表示?
数据结构指的是数据的组织形式,例如,字符数组、方 程组系数矩阵、人员的基本信息表、反映部门组织机构关系 的树形图、反映网络结构及信息的网状图等都是不同的数据 结构。
组织和存储数据的目的是能被计算机处理,即对数据施 加各种运算。因此,可以在逻辑结构上定义运算集合,而在 存储结构上实现这些运算。
第1章 C语言程序设计概述
2.算法
何谓算法?算法如何表示?
所谓算法,是解决某一问题所采取的方法和步骤。程序 设计中的算法把解决问题的每一步骤具体化为计算机的操作, 即算法解决计算机在什么情况下应该“做什么”和“怎样做” 的问题。
第1章 C语言程序设计概述
高级语言的种类很多,不同的语言各有不同的特点与使 用场合,但从原理上看,各种语言都包含一些相同的功能和 结构。对初学者来说,只要选择有代表性的语言,掌握了程 序设计语言的规律和内在功能结构,就很容易学习和应用其 他语言。现在一般都把C语言作为程序设计的入门语言。
第1章 C语言程序设计概述

C语言程序设计

}
第1章 概述
1.1.2 高级语言
最早期是用二进制代码编写程序,称为“机器语言”, 机器语言难以记忆。 汇编语言,汇编语言用符号来代表二进制代码,所以又 称为“符号语言”。
机器语言和汇编语言都是“面向机器的语言”,又称为 “低级语言”。
程序设计的关键是将问题解决的算法过程描述出来,同 时脱离了对机型要求、并且能够面向问题设计计算机程序 , 高级语言的特点是更加接近自然语言和数学语言,非常容易 掌握和普及。
个字符必须为字母或下划线。程序中使用的用户标识符除要
遵循命名规则外,还应注意“见名知义”。 2. 用户选取的标识符不能是C语言预留的保留字。
3. C语言是区分大小写字母的。因此,sum和Sum及SUM
是不同的标识符。 p9
第1章 概述
例如:合法的标识符:
sum _above average x_1_2_3 day BASIC yes a2 H student_1
char x[]={"1234567890"};
(■为空字符)
char y[]={"abcdefghijklmn"}; printf("%10d,%8d\n",a,b); printf("%13s,%8s\n",x,y); printf("%–3d,%–3d\n",a,b); p13
第1章 概述 【例1.7】按格式定义宽度输出实型数据。
)
【例1.6】printf( )函数输出宽度的定义举例。 #include <stdio.h> 1 main( ) 2 {
■■■■■■■■■3, ■■■12345 ■■■1234567890 ,abcdefghijklmn
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.3 编译过程概述
典型的编译程序工作过程是:输入源程序,对它进行加工处 理,最后输出目标程序(机器语言或汇编语言形式)。整个过 程相当复杂,从数据加工的角度来看,可将其分成4个逻辑阶 段,它们是: 词法分析 语法分析 语义分析(中间代码产生) 目标代码生成 图示如下: 源 程 序 目 标 程 序
㈡汇编语言
用记忆符取代二进制位,存储地址和汇编语句的序号可用符号 名表示。 ①优点 用符号取代二进制数,提高了程序的可理解性。 性能较好的汇编语言,可用符号名来表示存储地址和汇编 语句序号,这样避免了在汇编语句中绝对地址的出现。 可充分利用硬件特性 所以,汇编语言在一定程度上降低了程序编制和维护的难度。 ②缺点 汇编语句和机器指令基本上是一对一的,所以汇编语言的编 程效率并没有质的提高。 和机器语言一样,汇编语言依附于目标计算机。 需汇编程序,将汇编语言译成机器语言。
00000000-00000011(3) 00000000-01000000(128)
……
㈣目标代码生成(Code Generation)
执行目标代码生成的程序称为目标代码生成器。 任务:中间代码 目标代码(机器指令或汇编语言) 依据:目标机器的系统结构 假设模型机器的指令格式为: op Ri , M (Ri)op(M)→ Ri op Ri , Rj (Ri)op(Rj)→ Ri op Ri , C (Ri)op C → Ri 其中Ri表示寄存器,M表示内存地址(可用符号表示),C表 示常数。 表达式3+abc*128最终形成的汇编语言程序示意如下: Load R0,abc Mul R0,128 Store R0,T1 Load R0,3 Add R0,T1 Store R0,T2
㈡语法分析(Parsing)
执行语法分析任务的程序称为语法分析器。 任务:检查源程序的语法结构是否正确 依据:语言的语法规则 在语法分析时,算术表达式3+abc*128的语法结构应表示为 x+i*x,语法分析器最终应识别出这是一个算术表达式。识别过程 相当于建立一棵语法树 <算术表达式>
<算术表达式> + <项 >
1.4 出错处理(Error Handle)
编译程序在工作过程中可发现源程序中各种错误,错误类型 及错误处理对策简述如下: ㈠错误类型 词法错误(可在词法分析阶段发现) 语法错误(可在语法分析阶段发现) 语义错误(可在语义分析阶段发现)
㈡出错处理 一旦发现错误,暂停编译程序工作,指出错误的地点和类 型。 在发现错误后,不中断编译程序工作。采取某些措施(例 错误局部化、错误校正等),使得源程序的编译工作可继续 下去,尽可能发现源程序中比较多的错误。
②二元式编码
单词 +( 单词值 NUL NUL NUL NUL NUL
)
… 标识符 整常数 实常数 …
)
… i x y …
NUL
… 字符串形式符号名 字符串形式整常数 字符串形式实常数 …
经词分析,算术表达式3+abc*128的单词内部码(二元式) 为:('x',"3") ('+',"NUL") ('i',"abc") ('*', "NUL") ('x',"128")
源程序 二进制(整体未定位) 输入数据 结果
编辑程序 Edit
编译程序 Compile
连接程序 Link
装入运行 Run
ASCII 码
二进制(整体定位)
编辑程序的工作结果是ASCII码形式的源程序。 编译程序以ASCII码形式的源程序为输入,它的工作结果是二 进制形式的目标程序,但并未包括用户程序中所使用的系统函数 的目标代码。从整体上来看,程序是不完整的,程序中的部分地 址尚未确定(例系统函数的调用)。 将二进制形式的用户程序和系统函数目标代码连接成一个程序, 对未确定的地址进行定位。 由操作系统将用户程序装入内存后运行。程序在运行过程中读 入数据,经处理加工后输出计算结果。
第1章 编译系统概述
1.1 程序设计语言的发展
1.2 基本术语解释
1.3 编译过程概述
1.4 出错处理
1.5 编译程序的前端和后端
1.6 编译程序的实现方式
1.1 程序设计语言的发展
机器语言(Machine Language)
汇编语言(Assemble Language)
程序设计语言(Programming Language)
②语义翻译 1)说明语句的翻译 将标识符及其属性填入符号表。 2)执行语句的翻译 根据不同语句的语义,生成逻辑上等价的中间代码。 中间代码 结构简单、意义明确的记号系统,非常接近机器指令,又独立 于具体机器。常用的中间代码有三元式和四元式。 表达式3+abc*128可译成如下四元式: (*,&abc,&128,&T1) (+,&3,&T1,&T2) 其中, &abc表示标识符abc在符号表中入口(即地址); T1和T2是在翻译过程中由编译程序引入的临时变量,&T1和 &T2分别表示T1和T2在符号表中入口; 而&128表示常数128在常数表中的地址。
例计算表达式3*16+2的值,实现该计算的机器语言程 序、汇编语言程序和程序设计语言(C语言)程序如下 所示。目标计算机的系统结构和汇编语言的使用方法详 见本书第7章。 2203 8210 2602 6101 1000 f000 Load R0,3 Mul R0,10 Load R1,2 Add R0,R1 Write R0 Halt void main(void) { cout<<3*16+2; }
注:10表示16
㈠机器语言
机器指令集合称为机器语言。机器指令即二进制数,通常由若 干字节构成。 ①优点 计算机可直接识别执行 可充分利用硬件特性 ②缺点 可读性差 指令系统随机种而异 由于机器指令直接或间接含有绝对地址,增加或减少一条 指令,可能会引起多条指令的修改。 编程者需协调内存的使用 所以,机器语言形式的程序编制和维护困难,限制了计算机 的推广和应用。
㈢目标语言和目标程序(Target Language and Target Program)
目标语言可以是机器语言(二进制数),也可以是汇编语言(字 符),或者是其它中间语言(字符),但最终结果必定是机器语言。 机器语言程序用二进制文件存储,汇编语言或中间语言程序用文 本文件存储。 目标程序是经翻译程序加工后用目标语言表示的程序。
1.5 编译程序的前端和后端
由于在编译程序的内部引入了中间代码,这样可将编译程序 分为二个相互独立部分。 ㈠编译程序前端(The Front End) 组成:词法分析器、语法分析器和中间代码产生器 特点:依赖于被编译的源语言,输出结果用中间代码描述, 和目标机器无关。 ㈡编译程序后端(The Back End) 组成:目标代码生成器 特点:和源语言无关,以中间代码形式的源程序为输入进行 处理,输出结果依赖于目标机器。 为一个源语言构造好前端,若要在某一个特定计算机上构造该 源语言的编译程序,只要构造这个目标机器的后端即可。相反, 若已构造了一个高质量的后端,若要在同一台目标机器上为另一 源语言构造编译程序时,只要构造该源语言的前端即可。
1.2 基本术语解释
㈠源语言和源程序(Source Language and Source Program)
用程序设计语言书写的程序,称为源程序,该程序设计语言 称为源语言。源程序通常用编缉程序输入,用字符(ASCII码)表 示,以文本文件形式存储。
㈡文本文件(Text File)
文本文件的内容由94个图形字符‘!’-‘~’(33-126)和4个控制字 符换行(10)、回车(13)、空格(32)、TAB(9)构成,文本文件又称 为ASCII码文件,扩展名通常为TXT,文件尾用控制字符EOF(26) 指示。当换行和回车二个控制字符从文本文件读入内存,在C语 言中是用一个字符(换行)表示。
符号表(Symbol Table) 符号表用于记录源程序中出现的标识符(Identifier),一个标识 符往往具有一系列的语义值,它包括标识符的名称、标识符的种 属、标识符的类型、标识符值的存放地址等等。每个标识符在符 号表中有一项记录,用于记录标识符的各种语义值,而在四元式 中填写的是标识符在符号表中的记录地址,通常称为符号表入口。
词法 分析
语法 分析
语义分析 (中间代码产生)
目标代码 生成
编译程序基本上是按照这个流程来设计的。
以算术表达式 3+abc*128 为例,来说明编译程序工作过程。
㈠词法分析(Lexical Analysis)
执行词法分析任务的程序称为词法分析器。 任务:字符串形式单词 编码形式单词内部码(二元式) 依据:语言的构词规则 ①二元式(Pair) (单词种别,单词值) 单词种别:用整数码表示(为直观起见用字符表示),语法 分析时用。 单词值:在本书中用字符串表示,语义分析时用。当一个单 词种别中可能有多个单词时,单词的值才有意义。为了便于输 入处理,无意义的单词值用"NUL"表示。
符号表的结构示意如下: 内存地址 未分配 未分配 未分配 …… …… 符号名 abc T1 T2 种属 简单变量 简单变量 简单变量 类型 整型 整型 整型 …… ……
常数表(Constant Table) 常数表用于记录在源程序中出现的常数。假定,每个整常数在 常数表中占2个字节,每个实常数在常数表中占4个字节。 常数表的结构示意如下: 常数的二进制值
解释、执行 源 程 序
解释程序 Interpreter
输入数据
结 果
解释方式主要特点是:用户程序是消极的。用户程序运行时, 控制点在解释程序,即用户程序的执行离不开解释程序。
相关文档
最新文档