第一章 引论
-
- 第一章 引论
- 1 语言处理器
- 2 一个编译器的结构
- 3 程序设计语言发展历程
- 5 编译技术的应用
- 第一章 引论
1.1 语言处理器
- 编译器compiler:将源程序翻译成目标程序,生成目标代码快速,错误诊断效果差。 解释器interpreter:用户提供源程序和输入,产生输出,较慢,错误诊断效果好。
- java语言处理:Java源程序—>字节码bytecode—>虚拟机解释执行
- 语言处理系统:源程序——预处理器preprocessor——经过预处理的源程序——编译器——目标汇编程序(便于输出调试)——汇编器assembler——可重定位机器代码——连接器linker/加载器loader(库文件)——目标机器代码。
1.2 一个编译器的结构
- 编译器 = 分析部分(前端) + 综合部分(后端)
- 编译步骤:字符流——词法分析器——符号流——语法分析器——语法树——语义分析器——语法树——中间代码生成器——中间表示形式——机器无关代码优化器——中间表示形式——代码生成器——目标机器语言——机器相关代码优化器——目标机器语言
- 词法分析(lexical analysis):读入字符流,将其组成为词素lexeme的序列,对每个lexeme,产生词法单元token输出:
<token-name , attbute-value>
,其中token-name是由语法分析器使用的抽象符号,attribute-value指向符号表条目的信息,被语义分析和代码生成器使用。- 语法分析(syntax analysis)/解析(parsing):将词法分析器产生的词法单元的第一个分量来创建树形的中间表示(语法树syntax tree)。
- 语义分析(semantic analyzer):使用语法树和符号表中的信息检查源程序是否与语言定义的语义一致(如:类型检查)。
- 中间代码:在语法和语义分析之后生成:易生成、易翻译成机器语言。eg:三地址代码(three-address code),”三地址”指的就是两个运算分量(操作数1、操作数2)及目标操作数三个对象的地址。
- 代码优化:改进中间代码,以便生成更好的生成目标代码——更快、更短、能耗更低。
- 代码生成:将源代码的中间代码生成目标语言,重点是合理分配寄存器以存放变量的值。
- 符号表管理:记录源程序中使用变量的名字和属性。
- 编译器的构造工具:语法分析器的生成器、扫描器的生成器、语法制导的翻译引擎、代码生成器的生成器、数据流分析引擎(代码优化)、编译器构造工具集。
1.3 程序设计语言发展历程
- 冯诺伊曼语言:C、Fortran
面向对象语言:Simula、Smalltalk;C++、C#、Java、Ruby
脚本语言/解释型语言:Awk、JavaScript、Perl、PHP、Python、Ruby、Tcl
- 强制式语言与声明式语言
1.5 编译技术的应用
- 高级程序语言编程容易、生成的目标程序运行慢,不能很好的控制每个计算过程。
- 数据流优化:对程序的数据流进行分析,并消除用户定义的聚合类型(数据和结构)和高级控制流(循环和过程调用)之间的冗余。
- 并行parallelism:指令层次——多个运算被同时执行;处理器层次——同一个应用多个不同线程在不同处理器上运行。
- 内存层次结构:由几层不同速度和大小的存储器组成。寄存器(几百Byte)——高速缓存(几K到几M)——物理寄存器(几M到几G)——外部存储器(多G),相邻层次速度差两到三个数量级。
- RISC精简指令集计算机:PowerPC、SPARC、MIPS、Alpha、PA-RISC。CISC复杂指令集计算机:X86
- 二进制翻译:将一个机器上的二进制代码翻译成另一个机器的二进制代码,使在一个机器上运行原本为另一个指令集(如:x86)编译的程序。
- Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言; VHDL:甚高速集成电路硬件描述语言。硬件设计在寄存器传输层RTL上描述——门电路——晶体管——物理布局。
- 垃圾收集机制能够自动管理内存,从而消除了所有内存管理错误(如:内存泄漏)。Purify是能够动态地捕捉内存管理错误的工具。
时间: 2024-10-15 02:47:51