“编译技术”课程提供了理解程序如何被计算机执行的理论基石和关键技术。本书内容组织严密,循序渐进地介绍编译技术核心环节。第1章为绪论,第2章为高级语言设计基础,第3章为词法分析,第4章为自上而下的语法分析,第5章为自下而上的语法分析,第6章为语法制导的翻译,第7章为中间代码生成,第8章为过程存储分配,第9章为目标代码生成,第10章为国产编译器进展,第11章为词法分析工具Lex,第12章为语法分析工具yacc。
本书为国家一流课程“编译技术”的配套教材,本书配套的视频课程在中国大学慕课平台开设,对应的实验已经放置在头歌实践教学平台。本书可作为高等院校软件工程专业及相关专业“编译原理”“编译技术”课程的教材。
E-BOOK
编译技术导论
- 理解编译全过程:系统掌握从词法分析到目标代码生成的完整编译流程,建立编译器的整体认知框架。
- 掌握文法与自动机理论:深入理解形式语言与自动机理论,学会用正则式和有限自动机描述和识别词法单元。
- 实现语法分析器:掌握自上而下和自下而上两种语法分析方法,能够设计并实现递归下降和LL(1)分析器。
- 生成中间代码与目标代码:学会语法制导翻译和中间代码生成技术,理解存储分配与目标代码优化的基本方法。
- 使用工具构建编译器:熟悉Lex和yacc等编译器构造工具,能够快速生成词法分析器和语法分析器。
★★★
中级
入门初级中级进阶高级
- 软件工程专业学生:作为“编译原理”或“编译技术”课程的教材,帮助学生系统掌握编译理论和技术。
- 计算机科学爱好者:对编译器内部机制感兴趣,希望深入理解程序如何被计算机执行的读者。
- 系统软件开发者:需要开发或维护编译器、解释器、语言工具等系统软件的工程师。
- 语言设计者:希望设计新编程语言或扩展现有语言,需要了解语言实现细节的开发者。
- 考研备考学生:准备计算机专业研究生入学考试,需要系统复习编译原理知识的学生。
- 循序渐进:建议按章节顺序阅读,第1-2章是基础,第3-5章是核心,后续章节是深入应用,不要跳跃。
- 注重实践:每章结束后,利用配套实验(头歌平台)动手实现词法分析器、语法分析器等,加深理解。
- 重点突破:第3章词法分析和第4、5章语法分析是重点,务必掌握有限自动机转换和LL(1)、LR分析算法。
- 结合视频:配合中国大学慕课平台的视频课程学习,视频讲解有助于理解抽象概念。
- 工具练习:在第11、12章学习Lex和yacc时,多编写示例程序,熟悉工具的使用。
- 理论体系:掌握编译原理的完整理论体系,包括形式语言、自动机、语法分析等核心知识。
- 实践能力:能够独立实现一个简单的编译器,包括词法分析、语法分析、中间代码生成等模块。
- 工具运用:熟练使用Lex和yacc等编译器构造工具,提高开发效率。
- 问题思维:培养将复杂问题分解为多个阶段处理的工程思维,提升系统设计能力。
- 前沿视野:了解国产编译器的最新进展,拓宽对编译技术应用领域的认知。
📖 书籍简介
内容简介
作者简介
江贺,教授、博导,辽宁省政协委员,国家高层次人才、国家优秀青年科学基金获得者(优青)、教育部新世纪人才。担任大连理工大学信息学部副主任委员,大连理工大学人工智能大连研究院院长,全国编译技术虚拟教研室副主任委员、教育部101计划课程建设组专家、计算机学会软件工程专委会常务委员、计算机学会青年科学家学术前沿探索丛书编委会委员、中国信标委软件与系统工程分技术委员会委员、大连YOCSEF主席(2021-2022)。
目录
第1章 绪论
1.1 编译器的定义和功能
1.1.1 编译器的主要组件
1.1.2 编译器的工作流程
1.2 程序语言的类型
1.2.1 机器语言、汇编语言和高级语言
1.2.2 高级语言的类型
1.3 编译过程和编译器的结构
1.3.1 词法分析阶段
1.3.2 语法分析阶段
1.3.3 语义分析阶段
1.3.4 中间代码生成
1.3.5 代码优化阶段
1.3.6 目标代码生成
1.4 解释程序及软件工具
1.4.1 解释程序的功能与实例
1.4.2 软件工具
1.5 编译技术的发展历程及典型编译器
1.5.1 编译技术的发展历程
1.5.2 典型编译器
1.6 拓展阅读
1.7 习题
第2章 高级语言设计基础
2.1 语言
2.1.1 文法的直观描述
2.1.2 字母表、符号串的定义
2.1.3 语言的形式化定义
2.2 文法
2.2.1 文法的形式化定义
2.2.2 语法树
2.2.3 文法二义性
2.3 文法和语言的分类
2.3.1 0型文法
2.3.2 上下文有关文法
2.3.3 上下文无关文法
2.3.4 正则文法
2.3.5 四类文法的比较
2.4 高级语言设计
2.4.1 程序语言的定义
2.4.2 高级语言的起源
2.4.3 数据类型
2.4.4 语句和控制结构
2.4.5 语言设计的步骤
2.5 语言设计实例
2.5.1 Simple语言字符集的定义
2.5.2 Simple语言词法单元的定义
2.5.3 Simple语言数据类型的定义
2.5.4 Simple语言表达式的定义
2.5.5 Simple语言语句的定义
2.5.6 Simple语言程序体和程序的定义
2.5.7 Simple语言程序
2.6 仓颉语言介绍
2.6.1 仓颉语言概述
2.6.2 仓颉语言的特点
2.6.3 仓颉语言示例代码及编译方法
2.7 拓展阅读
2.8 习题
第3章 词法分析
3.1 词法分析基本思想
3.1.1 词法分析任务
3.1.2 词法分析方式
3.2 词法单元的识别
3.2.1 词法单元分类
3.2.2 词法单元的内部表示
3.2.3 词法单元的形式化描述
3.3 有限自动机
3.3.1 DFA
3.3.2 NFA
3.3.3 NFA到DFA转换——子集构造法
3.3.4 DFA的化简
3.4 正则式与有限自动机
3.4.1 正则式
3.4.2 正则式与有限自动机的等价性
3.4.3 正则文法与有限自动机的等价性
3.5 词法分析器的设计及实现
3.5.1 词法分析器的输入
3.5.2 扫描缓冲区及其预处理
3.5.3 由词法规则画出状态转换图
3.5.4 词法单元对应状态转换图的实现
3.6 词法分析中的错误处理
3.7 拓展阅读
3.7.1 斯蒂芬·科尔·克莱尼:正则式
3.7.2 迈克尔·拉宾和达纳·斯科特:有限自动机与其判定性问题
3.7.3 有限自动机在KMP算法中的应用
3.7.4 正则式的应用场景
3.8 习题
第4章 自上而下的语法分析
4.1 语法分析基础
4.1.1 语法分析的输入
4.1.2 语法分析的错误处理
4.1.3 语法分析方法的分类
4.2 自上而下语法分析中存在的问题
4.2.1 包含回溯的自上而下语法分析
4.2.2 回溯产生的原因与解决方法
4.3 自上而下语法分析方法
4.3.1 first集合定义及构造方法
4.3.2 follow集合定义及构造方法
4.3.3 递归下降分析法
4.3.4 递归下降分析的程序方法
4.3.5 LL(1)分析法
4.4 Simple语言自上而下语法分析器的设计
4.5 自上而下语法分析中的错误处理
4.6 拓展阅读
4.7 习题
第5章 自下而上的语法分析
5.1 自下而上分析
5.1.1 移进-归约分析
5.1.2 归约与句柄
5.2 LR分析器
5.2.1 LR分析器的逻辑结构和工作过程
5.2.2 LR分析算法
5.2.3 LR文法
5.3 LR(0)分析表的构造
5.3.1 规范句型的活前缀
5.3.2 活前缀的含义
5.3.3 LR(0)项目
5.3.4 闭包运算和goto函数
5.3.5 LR(0)项目集规范族
5.3.6 LR(0)文法
5.3.7 构造LR(0)分析表
5.3.8 LR(0)分析的缺陷
5.4 SLR(1)分析法
5.4.1 SLR(1)分析及SLR(1)分析表的构造
5.4.2 SLR(1)分析法的问题
5.5 LR(1)分析法
5.5.1 LR(1)项目
5.5.2 构造LR(1)分析表
5.6 LALR(1)分析法
5.6.1 同心项目集
5.6.2 构造LALR(1)分析表
5.6.3 几种LR分析法的对比
5.7 LR 分析与二义性文法
5.7.1 非LR上下文无关结构
5.7.2 二义性文法如何利用LR分析法
5.8 拓展阅读
5.9 习题
第6章 语法制导的翻译
6.1 文法符号的属性
6.1.1 语义规则和产生式的关系
6.1.2 属性文法
6.1.3 语义规则
6.1.4 综合属性
6.1.5 继承属性
6.1.6 语义规则的计算顺序
6.1.7 属性与分析过程的关系
6.2 S属性定义的自下而上计算
6.2.1 抽象
1.1 编译器的定义和功能
1.1.1 编译器的主要组件
1.1.2 编译器的工作流程
1.2 程序语言的类型
1.2.1 机器语言、汇编语言和高级语言
1.2.2 高级语言的类型
1.3 编译过程和编译器的结构
1.3.1 词法分析阶段
1.3.2 语法分析阶段
1.3.3 语义分析阶段
1.3.4 中间代码生成
1.3.5 代码优化阶段
1.3.6 目标代码生成
1.4 解释程序及软件工具
1.4.1 解释程序的功能与实例
1.4.2 软件工具
1.5 编译技术的发展历程及典型编译器
1.5.1 编译技术的发展历程
1.5.2 典型编译器
1.6 拓展阅读
1.7 习题
第2章 高级语言设计基础
2.1 语言
2.1.1 文法的直观描述
2.1.2 字母表、符号串的定义
2.1.3 语言的形式化定义
2.2 文法
2.2.1 文法的形式化定义
2.2.2 语法树
2.2.3 文法二义性
2.3 文法和语言的分类
2.3.1 0型文法
2.3.2 上下文有关文法
2.3.3 上下文无关文法
2.3.4 正则文法
2.3.5 四类文法的比较
2.4 高级语言设计
2.4.1 程序语言的定义
2.4.2 高级语言的起源
2.4.3 数据类型
2.4.4 语句和控制结构
2.4.5 语言设计的步骤
2.5 语言设计实例
2.5.1 Simple语言字符集的定义
2.5.2 Simple语言词法单元的定义
2.5.3 Simple语言数据类型的定义
2.5.4 Simple语言表达式的定义
2.5.5 Simple语言语句的定义
2.5.6 Simple语言程序体和程序的定义
2.5.7 Simple语言程序
2.6 仓颉语言介绍
2.6.1 仓颉语言概述
2.6.2 仓颉语言的特点
2.6.3 仓颉语言示例代码及编译方法
2.7 拓展阅读
2.8 习题
第3章 词法分析
3.1 词法分析基本思想
3.1.1 词法分析任务
3.1.2 词法分析方式
3.2 词法单元的识别
3.2.1 词法单元分类
3.2.2 词法单元的内部表示
3.2.3 词法单元的形式化描述
3.3 有限自动机
3.3.1 DFA
3.3.2 NFA
3.3.3 NFA到DFA转换——子集构造法
3.3.4 DFA的化简
3.4 正则式与有限自动机
3.4.1 正则式
3.4.2 正则式与有限自动机的等价性
3.4.3 正则文法与有限自动机的等价性
3.5 词法分析器的设计及实现
3.5.1 词法分析器的输入
3.5.2 扫描缓冲区及其预处理
3.5.3 由词法规则画出状态转换图
3.5.4 词法单元对应状态转换图的实现
3.6 词法分析中的错误处理
3.7 拓展阅读
3.7.1 斯蒂芬·科尔·克莱尼:正则式
3.7.2 迈克尔·拉宾和达纳·斯科特:有限自动机与其判定性问题
3.7.3 有限自动机在KMP算法中的应用
3.7.4 正则式的应用场景
3.8 习题
第4章 自上而下的语法分析
4.1 语法分析基础
4.1.1 语法分析的输入
4.1.2 语法分析的错误处理
4.1.3 语法分析方法的分类
4.2 自上而下语法分析中存在的问题
4.2.1 包含回溯的自上而下语法分析
4.2.2 回溯产生的原因与解决方法
4.3 自上而下语法分析方法
4.3.1 first集合定义及构造方法
4.3.2 follow集合定义及构造方法
4.3.3 递归下降分析法
4.3.4 递归下降分析的程序方法
4.3.5 LL(1)分析法
4.4 Simple语言自上而下语法分析器的设计
4.5 自上而下语法分析中的错误处理
4.6 拓展阅读
4.7 习题
第5章 自下而上的语法分析
5.1 自下而上分析
5.1.1 移进-归约分析
5.1.2 归约与句柄
5.2 LR分析器
5.2.1 LR分析器的逻辑结构和工作过程
5.2.2 LR分析算法
5.2.3 LR文法
5.3 LR(0)分析表的构造
5.3.1 规范句型的活前缀
5.3.2 活前缀的含义
5.3.3 LR(0)项目
5.3.4 闭包运算和goto函数
5.3.5 LR(0)项目集规范族
5.3.6 LR(0)文法
5.3.7 构造LR(0)分析表
5.3.8 LR(0)分析的缺陷
5.4 SLR(1)分析法
5.4.1 SLR(1)分析及SLR(1)分析表的构造
5.4.2 SLR(1)分析法的问题
5.5 LR(1)分析法
5.5.1 LR(1)项目
5.5.2 构造LR(1)分析表
5.6 LALR(1)分析法
5.6.1 同心项目集
5.6.2 构造LALR(1)分析表
5.6.3 几种LR分析法的对比
5.7 LR 分析与二义性文法
5.7.1 非LR上下文无关结构
5.7.2 二义性文法如何利用LR分析法
5.8 拓展阅读
5.9 习题
第6章 语法制导的翻译
6.1 文法符号的属性
6.1.1 语义规则和产生式的关系
6.1.2 属性文法
6.1.3 语义规则
6.1.4 综合属性
6.1.5 继承属性
6.1.6 语义规则的计算顺序
6.1.7 属性与分析过程的关系
6.2 S属性定义的自下而上计算
6.2.1 抽象
📑 章节目录
- 绪论
- 高级语言设计基础
- 词法分析
- 自上而下的语法分析
- 自下而上的语法分析
- 语法制导的翻译
- 中间代码生成
- 过程存储分配
- 目标代码生成
- 国产编译器进展
- 词法分析工具Lex
- 语法分析工具yacc