【读书笔记】《编译原理》第一章 引论

第一章 引论

    • 第一章 引论

      • 1 语言处理器
      • 2 一个编译器的结构
      • 3 程序设计语言发展历程
      • 5 编译技术的应用

1.1 语言处理器

  1. 编译器compiler:将源程序翻译成目标程序,生成目标代码快速,错误诊断效果差。 解释器interpreter:用户提供源程序和输入,产生输出,较慢,错误诊断效果好。
  2. java语言处理:Java源程序—>字节码bytecode—>虚拟机解释执行
  3. 语言处理系统:源程序——预处理器preprocessor——经过预处理的源程序——编译器——目标汇编程序(便于输出调试)——汇编器assembler——可重定位机器代码——连接器linker/加载器loader(库文件)——目标机器代码。

1.2 一个编译器的结构

  1. 编译器 = 分析部分(前端) + 综合部分(后端)
  2. 编译步骤:字符流——词法分析器——符号流——语法分析器——语法树——语义分析器——语法树——中间代码生成器——中间表示形式——机器无关代码优化器——中间表示形式——代码生成器——目标机器语言——机器相关代码优化器——目标机器语言
  3. 词法分析(lexical analysis):读入字符流,将其组成为词素lexeme的序列,对每个lexeme,产生词法单元token输出:<token-name , attbute-value>,其中token-name是由语法分析器使用的抽象符号,attribute-value指向符号表条目的信息,被语义分析和代码生成器使用。
  4. 语法分析(syntax analysis)/解析(parsing):将词法分析器产生的词法单元的第一个分量来创建树形的中间表示(语法树syntax tree)。
  5. 语义分析(semantic analyzer):使用语法树和符号表中的信息检查源程序是否与语言定义的语义一致(如:类型检查)。
  6. 中间代码:在语法和语义分析之后生成:易生成、易翻译成机器语言。eg:三地址代码(three-address code),”三地址”指的就是两个运算分量(操作数1、操作数2)及目标操作数三个对象的地址。
  7. 代码优化:改进中间代码,以便生成更好的生成目标代码——更快、更短、能耗更低。
  8. 代码生成:将源代码的中间代码生成目标语言,重点是合理分配寄存器以存放变量的值。
  9. 符号表管理:记录源程序中使用变量的名字和属性。
  10. 编译器的构造工具:语法分析器的生成器、扫描器的生成器、语法制导的翻译引擎、代码生成器的生成器、数据流分析引擎(代码优化)、编译器构造工具集。

1.3 程序设计语言发展历程

  1. 冯诺伊曼语言:C、Fortran

    面向对象语言:Simula、Smalltalk;C++、C#、Java、Ruby

    脚本语言/解释型语言:Awk、JavaScript、Perl、PHP、Python、Ruby、Tcl

  2. 强制式语言与声明式语言

1.5 编译技术的应用

  1. 高级程序语言编程容易、生成的目标程序运行慢,不能很好的控制每个计算过程。
  2. 数据流优化:对程序的数据流进行分析,并消除用户定义的聚合类型(数据和结构)和高级控制流(循环和过程调用)之间的冗余。
  3. 并行parallelism:指令层次——多个运算被同时执行;处理器层次——同一个应用多个不同线程在不同处理器上运行。
  4. 内存层次结构:由几层不同速度和大小的存储器组成。寄存器(几百Byte)——高速缓存(几K到几M)——物理寄存器(几M到几G)——外部存储器(多G),相邻层次速度差两到三个数量级。
  5. RISC精简指令集计算机:PowerPC、SPARC、MIPS、Alpha、PA-RISC。CISC复杂指令集计算机:X86
  6. 二进制翻译:将一个机器上的二进制代码翻译成另一个机器的二进制代码,使在一个机器上运行原本为另一个指令集(如:x86)编译的程序。
  7. Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言; VHDL:甚高速集成电路硬件描述语言。硬件设计在寄存器传输层RTL上描述——门电路——晶体管——物理布局。
  8. 垃圾收集机制能够自动管理内存,从而消除了所有内存管理错误(如:内存泄漏)。Purify是能够动态地捕捉内存管理错误的工具。
时间: 2024-10-15 02:47:51

【读书笔记】《编译原理》第一章 引论的相关文章

随机过程(方兆本,缪伯其)读书笔记-第一章-引论

第一章 引论 1.1 引言 1.1.1 基本概念和例子 定义1.1: 随机过程就是一族随机变量${X(t), t \in T}$, 其中$t$ 是参数, 属于某个指标集$T$, $T$ 称为参数集. $t$ 一般代表时间. 当$T={0, 1, 2, ,...}$ 也称随机过程为随机序列. 随机变量定义在空间$\Omega$ 上, 所以是随$t$ 与$\omega \in \Omega$ 而变化的, 可以记作$X(t , \omega)$ . 固定一次随机实验, 即取定$\omega_0 \in

《数据挖掘 概念与技术》读书笔记 - 第一章 引论

1.1 为什么进行数据挖掘 数据挖掘把大型数据集转化成知识. 数据仓库是一种多个异构数据源在单个站点以统一的模式组织的存储,以支持管理决策. 联机分析处理(OLAP)是一种分析技术,具有汇总.合并和聚集以及从不同的角度观察信息的能力.(注:与联机事务处理OLTP不同) 1.2 什么是数据挖掘 数据挖掘是从大量数据中挖掘有趣模式和知识的过程. 数据挖掘过程: 数据清洗(消除噪声和删除不一致数据) 数据集成(多种数据源可以组合在一起) 数据选择(从数据库中提取与分析任务相关的数据) 数据变换(通过汇

数据挖掘概念与技术读书笔记(三)数据预处理

3.1 数据预处理 数据质量的三个要素:准确性.完整性和一致性. 3.1.2 数据预处理的主要任务 数据清理:填写缺失的值,光滑噪声数据,识别或删除离群点,并解决不一致性来”清理“数据. 数据集成: 数据归约: 3.2 数据清理 3.2.1 缺失值 1.忽略元组 2.人工填写缺失值 3.使用一个全局常量填充缺失值 4.使用属性的中心度量填充缺失值:中位数 5.使用与给定元组属同一类的所有样本的属性均值或中位数 6.使用最可能的值填充缺失值:回归/贝叶斯/决策树 第6种是最流行的策略 3.2.2

数据挖掘概念与技术读书笔记(二)认识数据

2.1 数据对象与属性类型 2.1.1 什么是属性 2.1.2 标称属性:其值是一些符号或事物的名称.每个值代表某种类别.编码或状态,因此标称属性又被看作是分类的. 标称属性不是定量的,找出它的均值或中位数没有意义,有意义的是找到众数,是一种中心趋势度量. 2.1.3 二元属性:是一种标称属性,只有两个类别或状态:0或1,也称布尔属性. 二元属性可以是对称的:关于哪个结果应该用0或1并无偏好. 二元属性可以是非对称的:其状态结果不是同样重要的,如阳性或阴性.为方便计,将用1对重要的结果编码,另一

《时间序列分析及应用:R语言》读书笔记--第一章 引论

"春节假期是难得的读书充电的时间."--转自某boss.假期能写多少算多少,一个是题目中的这本书,另一个是<python核心编程>中的高级部分,再一个是拖着的<算法导论>.

《Java并发变成实践》读书笔记---第一章 简介

<Java并发编程实战>深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册.书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险.构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁.原子变量.非阻塞算法以及

《深入理解Java虚拟机》读书笔记---第一章 走进Java

一.为什么要读此书 <深入理解Java虚拟机>这本书读了很多次,每次读都会有不一样的感受.首先说一下为什么要读这本书,如果把Java比喻成乾坤大挪移,那了解虚拟机的工作原理就是练习九阳神功,java语言是招式,对虚拟机的认识是内功心法,只有内功心法强大,所使的招式才强大,这就是为什么阳顶天只能把乾坤大挪移练到第四层,而张无忌能练到第七层.由于java虚拟机的强大,把很多功能都隐藏了,例如内容管理,垃圾回收机制等,使得很多java程序猿对这一块的知识所有缺失,编码的时候也是似懂非懂的,以至于遇到

Apache Tomcat 7 读书笔记 - 第一章

Apache Tomcat 简介: 开源框架,下载地址:http://tomcat.apache.org/.可以嵌入独立的web应用,也可作为多个web应用的服务器. 基于Java的web应用服务器容器,能托管Servlet和Java Server Pages(JSP)的web应用.我们常用的J2EE框架,Spring MVC, Structs等,部署到Tomcat上去后,Tomcat会将其自动解析成Serlvet与JSP.在前后端开发完全分离的情况下(后台只提供接口,前端调用),不推荐使用原有

iOS 读书笔记 第一章

1.确定某个实例或类方法是否可用. 1)使用NSObject的类方法instancesRespondToSelector:来确定是否在该类的一个实例中存在一个特定的选择器. NSArray *array = @[@"1",@"2"]; if ([NSArray instancesRespondToSelector:@selector(sortUsingComparator:)]) { //do something use sortUsingComparator: }

《淘宝技术这十年》读书笔记——第一章 第二章

引言 ? ? 这本书的作者是子柳先生,子柳本名赵超,2004年加入淘宝网.历任开发工程师.项目经理.产品经理.测试经理,2009年随着淘宝系统的大规模重构和人才的迅速扩张,创办了"淘宝技术大学",因培养内外部工程师众多,人称"校长". ? ? 之所以读这本书,主要想了解淘宝的技术/业务发展过程中遇到过哪些问题,以及他们怎么解决的.在阅读的过程中有很多不懂的地方,主要是知识面确实涵盖的太广,就当拓展视野吧. ? ? 第一章 ? ? 淘宝架构初版 ? ? 淘宝的第一版源