一,语言处理器

1)一个集成的软件开发环境,其中包括很多种类的语言处理器,比如编译器、解释器、汇编器、连接器、加载器、调试器以及程序概要提取工具。

2)编译器:把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;  包括编译器,反编译器,交叉编译器

3)解释器:能够执行用其他计算机语言编写的程序的系统软件,它是一种翻译程序。它的执行方式是一边翻译一边执行,因此其执行效率一般偏低,但是解释器的实现较为简单,而且编写源程序的高级语言可以使用更加灵活和富于表现力的语法

编译器产生的机器语言目标程序,比解释器快很多。解释器的错误诊断通常比编译器更好。

4)汇编器:是将汇编语言翻译为机器语言的程序。一般而言,汇编生成的是目标代码,需要经链接器(Linker)生成可执行代码才可以执行

5)连接器:链接函数和全局变量,所以,我们可以使用编译器生成的中间目标文件(O文件或是OBJ文 件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给 中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件

6)加载器:把所有可执行目标文件放到内存中执行

7)调试器:工作原理是基于中央处理器的异常机制,并由操作系统的异常分发\事件分发的子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互

二,一个编译器的结构

1)编译器能把源程序映射为在语义上等价的目标程序。此映射过程由两部分组成:分析部分和综合部分

2)分析部分(编译器前端):把源程序分解成多个组成要素,并在这些要素之上加上语法结构,然后它使用这个结构来创建该源程序的一个中间表示。如果检查出源程序语法或语义有误,则提供有用信息告知用户。分析部分还手机有关源程序的信息,并把信息放到一个称为符号表的数据结构中。

3)综合部分(编译器后端):根据中间部分和符号表中的信息来构造用户期待的目标程序。

4)词法分析:词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。

5)语法分析:语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确。源程序的结构由上下文无关文法描述。

6)语义分析:语义分析是编译过程的一个逻辑阶段. 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查。例如重要的是进行类型审查,数组下标必须是整数,

例如一个C程序片断:
             int arr[2],b;
             b = arr * 10;
       源程序的结构是正确的.
       语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配。

7)中间代码生成:在进行了语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间表示或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。另外,还可以在中间代码一级进行与机器无关的优化。产生中间代码的过程叫中间代码生成。

8)代码优化:程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码短(运行时间更短、占用空间更小),时空效率优化。原则上,优化可以再编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。

9)代码生成:代码生成器,以源程序的中间代码表示作为输入,并把它映射到目标语言。如果目标语言为机器语言,则必须为程序使用的每个变量指明寄存器或内存位置,然后中间指令翻译成能完成相同任务的机器指令序列。代码生成的至关重要的方面是合理分配寄存器

10)符号表管理:

在编译过程中,编译程序用来记录源程序中各种名字的特性信息, 所以也称为名字特性表。

名        字:   程序名、过程名、函数名、用户定义类型名、变量名、常量名、枚举值名、标号名等。
          特性信息:  上述名字的种类、类型、维数、参数个数、数值及目标地址(存储单元地址)等。

填表:当分析到程序中的说明或定义语句时,应将说明或定义的名字,以及与之有关的信息填入符号表中。
                     例:Procedure  P( )

查表:(1)  填表前查表,检查在程序的同一作用域内名字是否重复定义;
                      (2)  检查名字的种类是否与说明一致;
                      (3)  对于强类型语言,要检查表达式中各变量的类型是否一致;
                      (4)  生成目标指令时,要取得所需要的地址。

三,编译技术的应用

1)编译时间也是运行开销的一部分,一个常用的技术就是只编译和优化那些经常运行的程序片段。

2)针对计算机体系结构的优化:并行(指令并行,多个运算并行,在处理器层次:同一应用的不同线程并行)

内存层次结构(内存由几层不同速度和大小的存储器组成,离处理器最近的层速度最快但是容量小)

3)新计算机体系结构的设计

RISC(Reduced Instruction-Set Computer)精简指令系统

CISC(Complex Instruction-Set  Computer)复杂指令系统:使汇编程序更容易

ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等

X86 Intel首先开发制造的一种微处理器体系结构的泛称

四,程序设计语言基础

1)环境:名字和内存位置(变量)的映射

状态:内存位置到它们的值得映射   C中成把左值映射为右值

2)标识符:一个字符串,指向一个实体(数据对象、过程、类、类型)。所有标识符都是名字,但并不是所有名字都是标识符比如  x.y 表示x结构中y字段

变量:指向存储中的某个特定的位置

3)声明:int a       定义:a=2;

4)动态作用域:一个作用域依赖于一个或多个只有在程序执行时刻才能知道的因素,他就是动态的

5)参数传递机制:1>值调用          传递指针或数组会改变原来 值

2>引用调用      实在参数的地址  作为形参。被调用的代码中沿着指针找到调用者指明的内存位置,改变形参就像改变实在参数

3>名调用         弃用

转载于:https://www.cnblogs.com/JPAORM/archive/2012/04/26/2510001.html

【编译原理】第一章 引论相关推荐

  1. 编译原理-第一章-引论

    编译原理 第一章 引论 1,概念简介 (1) 编译器:一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的.用另一种语言(目标语言)编写的程序. 2,一个编 ...

  2. 编译原理 第一章(源程序、目标程序、解释器、编译器、词法语法语义分析)

    第一章 (一)什么是编译程序 1.编译程序 将用高级语言书写的程序翻译成等价的低级语言程序(汇编.机器语言),这种翻译程序称为编译程序. 2.源程序 编译程序的输入对象为源程序 3.目标程序 编译程序 ...

  3. 编译原理语义分析_编译原理 第一章 绪论

    编译原理系列,是在学习本校 "编译技术" 这门课程时,所作记录,参考教材为 <编译技术基础教程>清华大学出版社和<程序设计语言编译原理>国防工业出版社(陈火 ...

  4. 编译原理第一章-编译原理概述

    1.1 编译过程中,语法分析器的任务不包括(A) A 分析单词是怎样构成的 B 分析单词串是如何构成语句和说明的 C 分析语句和说明是如何构成程序的 D 分析程序的结构 1.2 编写一个计算机高级语言 ...

  5. 编译原理 | 第一章课后习题答案

    本文为编译原理(第三版)[清华大学出版社]部分课后答案 本答案均截取自网络,如有错误,望指正 编译原理(第三版)[清华大学出版社]

  6. 第一章 引论(数据库系统原理)

    第一章 引论 前面一半听的是浙江大学陈岭老师的课,后一半听的是中国人名大学王珊等老师的课. 1 引论(浙江大学 陈岭) 1.数据库系统目的数据处理和管理是计算机应用最重要的领域,数据库系统知识对于计算 ...

  7. 计算机术语new一个,微机原理第一章计算机基础知识(new)

    <微机原理第一章计算机基础知识(new)>由会员分享,可在线阅读,更多相关<微机原理第一章计算机基础知识(new)(47页珍藏版)>请在人人文库网上搜索. 1.1.第一章计算机 ...

  8. 计算机科学与技术第二章ppt,计算机科学与技术-编译原理-第二章重点.ppt

    计算机科学与技术-编译原理-第二章重点.ppt * 自下而上分析法举例 例2解: a b b c d e (1) a b b c d e A A (2) a b b c d e A A (3) a b ...

  9. 计算机网络原理第一章习题3-24 3-25

    计算机网络原理第一章习题 3-24假定站点A和B在同一个10Mb/s以太网网段上.这两个站点之间的传播时延为225比特时间.现假定A开始发送一帧,并且在A发送结束之前B也发送一帧.如果A发送的是以太网 ...

  10. c语言编程指法输入,C语言 课件 第一章引论.pdf

    C语言 课件 第一章引论 我很高兴为同学们上C语言课 我希望同学们有 良好的课堂纪律,给老师一个好心情: 让我先谢谢同学们的良好合作: 师生共努力,教好学好C语言; 学会编程更有利于数学的应用; 学习 ...

最新文章

  1. Servicehot和你说说运维自动化的那些事儿
  2. LeetCode之Next Greater Element I
  3. 《Python Cookbook 3rd》笔记(1.13):通过某个关键字排序一个字典列表
  4. 微课|玩转Python轻松过二级(1.3节):编码规范与代码优化建议2
  5. #pragma 是什么
  6. 视频教程-汇编语言程序设计IV-其他
  7. linux删除磁盘设备,linux添加,移除scsi设备
  8. 差分相干解调 matlab,2DPSK差分相干解调器Simulink仿真.doc
  9. 实验一:常用网络命令操作
  10. 竞赛|阿里巴巴全球调度算法大赛
  11. python——月供计算器
  12. 前后端分离使用Spring Boot + el-upload 完成图片上传
  13. 商汤的AI伴游小精灵(找最多子树)
  14. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(8月8日~8月14日)...
  15. 关于Scrapy爬虫框架中meta参数的使用示例演示(下)
  16. 5.3中断系统中的设备树——中断号的演变与irq_domain
  17. 招行股东会通过收购永隆银行议案
  18. BZOJ 1123 POI2008 BLO Tarjan+树形DP
  19. 解读2022中国城市大脑首批三项标准(新版)
  20. 要读博士硕士的学生看看吧

热门文章

  1. hdu2844 amp; poj1742 Coin ---多重背包--两种方法
  2. LAMP默认安装路径
  3. 《Algorithms》—— 链表实现栈,队列,背包
  4. 【MyBatis笔记】06-Mapper动态代理
  5. Linux运维问题解决(4)——linux LVM技术 逻辑卷增加 扩容 缩小 删除等操作
  6. 海龟交易策略要点总结
  7. 4个超神工作表技巧,还不快学起来!
  8. php函数方法属性吗,为什么PHP属性不允许使用函数?
  9. java事件 socket_java中有关socket通信的学习笔记
  10. centos 创建mysql8数据库给django连接