封面
版权信息
内容简介
前言
第一部分 编程语言导论
第1章 为什么要构建另一种编程语言
1.1 编写自己的编程语言的动机
1.1.1 编程语言实现的类型
1.1.2 组织字节码语言实现
1.1.3 示例中使用的语言
1.2 编程语言与库的差别
1.3 适用于其他软件工程任务
1.4 建立语言需求
1.5 案例研究:Unicon语言的创建需求
1.5.1 Unicon需求#1——保留人们对Icon的喜爱
1.5.2 Unicon需求#2——支持大型大数据项目
1.5.3 Unicon需求#3——现代应用程序的高级输入/输出
1.5.4 Unicon需求#4——提供可实现的通用系统接口
1.6 本章小结
1.7 思考题
第2章 编程语言设计
2.1 确定要编程语言提供的单词和标点符号的类型
2.2 指定控制流
2.3 决定支持哪种数据
2.3.1 原子类型
2.3.2 复合类型
2.3.3 领域特定类型
2.4 整体程序结构
2.5 完成Jzero语言的定义
2.6 案例研究:设计Unicon中的图形功能
2.6.1 2D图形语言支持
2.6.2 添加3D图形支持
2.7 本章小结
2.8 思考题
第3章 扫描源代码
- APP免费
3.1 技术需求
- APP免费
3.2 词素、词类和标记
- APP免费
3.3 正则表达式
- APP免费
3.3.1 正则表达式规则
- APP免费
3.3.2 正则表达式示例
- APP免费
3.4 使用UFlex和JFlex
- APP免费
3.4.1 头部分
- APP免费
3.4.2 正则表达式部分
- APP免费
3.4.3 编写一个简单的源代码扫描器
- APP免费
3.4.4 运行扫描器
- APP免费
3.4.5 标记和词法属性
- APP免费
3.4.6 扩展示例以构造标记
- APP免费
3.5 为Jzero编写扫描器
- APP免费
3.5.1 Jzero Flex规范
- APP免费
3.5.2 Unicon Jzero代码
- APP免费
3.5.3 Java Jzero代码
- APP免费
3.5.4 运行Jzero扫描器
- APP免费
3.6 正则表达式并不总是足够的
- APP免费
3.7 本章小结
- APP免费
3.8 思考题
- APP免费
第4章 解析
- APP免费
4.1 技术需求
- APP免费
4.2 语法分析
- APP免费
4.3 理解上下文无关文法
- APP免费
4.3.1 编写上下文无关文法规则
- APP免费
4.3.2 编写编程构造规则
- APP免费
4.4 使用iyacc和BYACC/J
- APP免费
4.4.1 声明头部分中的符号
- APP免费
4.4.2 组合yacc上下文无关文法部分
- APP免费
4.4.3 理解yacc解析器
- APP免费
4.4.4 修复yacc解析器中的冲突
- APP免费
4.4.5 语法错误修复
- APP免费
4.4.6 组合简单示例
- APP免费
4.5 为Jzero编写解析器
- APP免费
4.5.1 Jzero lex规范
- APP免费
4.5.2 Jzero yacc规范
- APP免费
4.5.3 Unicon Jzero代码
- APP免费
4.5.4 Java Jzero解析器代码
- APP免费
4.5.5 运行Jzero解析器
- APP免费
4.6 改进语法错误消息
- APP免费
4.6.1 向Unicon语法错误消息添加详细信息
- APP免费
4.6.2 向Java语法错误消息添加详细信息
- APP免费
4.6.3 使用Merr生成更好的语法错误消息
- APP免费
4.7 本章小结
- APP免费
4.8 思考题
- APP免费
第5章 语法树
- APP免费
5.1 技术需求
- APP免费
5.2 GNU make的使用
- APP免费
5.3 树
- APP免费
5.3.1 定义语法树类型
- APP免费
5.3.2 解析树与语法树
- APP免费
5.4 从终结符创建叶子
- APP免费
5.4.1 用叶子包装标记
- APP免费
5.4.2 使用YACC的值栈
- APP免费
5.4.3 为解析器的值栈包装叶子
- APP免费
5.4.4 确定需要哪些叶子
- APP免费
5.5 从产生式规则构建内部节点
- APP免费
5.5.1 访问值栈上的树节点
- APP免费
5.5.2 使用树节点工厂方法
- APP免费
5.6 为Jzero语言形成语法树
- APP免费
5.7 调试并测试语法树
- APP免费
5.7.1 避免常见的语法树错误
- APP免费
5.7.2 以文本格式输出语法树
- APP免费
5.7.3 使用dot输出语法树
- APP免费
5.8 本章小结
- APP免费
5.9 思考题
- APP免费
第二部分 语法树遍历
- APP免费
第6章 符号表
- APP免费
6.1 技术需求
- APP免费
6.2 建立符号表基础
- APP免费
6.2.1 声明和作用域
- APP免费
6.2.2 赋值和取消引用变量
- APP免费
6.2.3 选择正确的树遍历
- APP免费
6.3 为每个作用域创建和填充符号表
- APP免费
6.3.1 向语法树添加语义属性
- APP免费
6.3.2 定义符号表和符号表条目的类
- APP免费
6.3.3 创建符号表
- APP免费
6.3.4 填充符号表
- APP免费
6.3.5 综合isConst属性
- APP免费
6.4 检查未声明的变量
- APP免费
6.4.1 识别方法体
- APP免费
6.4.2 发现方法体中变量的使用
- APP免费
6.5 查找重新声明的变量
- APP免费
6.5.1 将符号插入符号表
- APP免费
6.5.2 报告语义错误
- APP免费
6.6 在Unicon中处理包和类作用域
- APP免费
6.6.1 名称修饰
- APP免费
6.6.2 为成员变量引用插入self
- APP免费
6.6.3 在方法调用中插入self作为第一个参数
- APP免费
6.7 测试和调试符号表
- APP免费
6.8 本章小结
- APP免费
6.9 思考题
- APP免费
第7章 基本类型检查
- APP免费
7.1 技术需求
- APP免费
7.2 编译器中的类型表示
- APP免费
7.2.1 定义表示类型的基类
- APP免费
7.2.2 子类化复杂类型的基类
- APP免费
7.3 将类型信息分配给声明的变量
- APP免费
7.3.1 从保留字合成类型
- APP免费
7.3.2 将类型继承到变量列表中
- APP免费
7.4 确定每个语法树节点的类型
- APP免费
7.4.1 确定叶子的类型
- APP免费
7.4.2 计算和检查内部节点的类型
- APP免费
7.5 Unicon中的运行时类型检查和类型推断
- APP免费
7.6 本章小结
- APP免费
7.7 思考题
- APP免费
第8章 检查数组、方法调用和结构访问的类型
- APP免费
8.1 技术需求
- APP免费
8.2 检查数组类型的操作
- APP免费
8.2.1 处理数组变量声明
- APP免费
8.2.2 在数组创建期间检查类型
- APP免费
8.2.3 在数组访问期间检查类型
- APP免费
8.3 检查方法调用
- APP免费
8.3.1 计算参数和返回类型信息
- APP免费
8.3.2 检查每个方法调用站点的类型
- APP免费
8.3.3 检查返回语句中的类型
- APP免费
8.4 检查结构化类型访问
- APP免费
8.4.1 处理实例变量声明
- APP免费
8.4.2 在创建实例时检查类型
- APP免费
8.4.3 在实例访问时检查类型
- APP免费
8.5 本章小结
- APP免费
8.6 思考题
- APP免费
第9章 中间代码生成
- APP免费
9.1 技术需求
- APP免费
9.2 准备生成代码
- APP免费
9.2.1 为什么要生成中间代码
- APP免费
9.2.2 了解生成程序的存储区域
- APP免费
9.2.3 为中间代码引入数据类型
- APP免费
9.2.4 将中间代码属性添加到树中
- APP免费
9.2.5 生成标签和临时变量
- APP免费
9.3 中间代码指令集
- APP免费
9.3.1 指令
- APP免费
9.3.2 声明
- APP免费
9.4 用标签为控制流注释语法树
- APP免费
9.5 为表达式生成代码
- APP免费
9.6 为控制流生成代码
- APP免费
9.6.1 为条件表达式生成标签目标
- APP免费
9.6.2 生成循环代码
- APP免费
9.6.3 为方法调用生成中间代码
- APP免费
9.6.4 检查生成的中间代码
- APP免费
9.7 本章小结
- APP免费
第10章 IDE中的语法着色
- APP免费
10.1 下载本章中使用的示例IDE
- APP免费
10.2 将编译器集成到程序员的编辑器中
- APP免费
10.2.1 从IDE中分析源代码
- APP免费
10.2.2 将编译器输出发送到IDE
- APP免费
10.3 避免在每次更改时重新解析整个文件
- APP免费
10.4 使用词法信息为标记着色
- APP免费
10.4.1 扩展EditableTextList组件以支持颜色
- APP免费
10.4.2 在绘制单个标记时对其进行着色
- APP免费
10.5 使用解析结果突出显示错误
- APP免费
10.6 添加Java支持
- APP免费
10.7 本章小结
- APP免费
第三部分 代码生成与运行时系统
- APP免费
第11章 字节码解释器
- APP免费
11.1 技术需求
- APP免费
11.2 什么是字节码
- APP免费
11.3 比较字节码和中间码
- APP免费
11.4 为Jzero构建字节码指令集
- APP免费
11.4.1 定义Jzero字节码文件格式
- APP免费
11.4.2 了解栈机操作的基础知识
- APP免费
11.5 实现字节码解释器
- APP免费
11.5.1 将字节码加载到内存中
- APP免费
11.5.2 初始化解释器状态
- APP免费
11.5.3 获取指令并推进指令指针
- APP免费
11.5.4 指令解码
- APP免费
11.5.5 执行指令
- APP免费
11.5.6 启动Jzero解释器
- APP免费
11.6 编写Jzero运行时系统
- APP免费
11.7 运行Jzero程序
- APP免费
11.8 检查Unicon字节码解释器iconx
- APP免费
11.8.1 了解目标导向的字节码
- APP免费
11.8.2 在运行时保留类型信息
- APP免费
11.8.3 获取、解码和执行指令
- APP免费
11.8.4 制作运行时系统的其余部分
- APP免费
11.9 本章小结
- APP免费
11.10 思考题
- APP免费
第12章 生成字节码
- APP免费
12.1 技术需求
- APP免费
12.2 转换中间代码为Jzero字节码
- APP免费
12.2.1 为字节码指令添加类
- APP免费
12.2.2 将中间代码地址映射到字节码地址
- APP免费
12.2.3 实现字节码生成器方法
- APP免费
12.2.4 为简单表达式生成字节码
- APP免费
12.2.5 生成指针操作的代码
- APP免费
12.2.6 为分支和条件分支生成字节码
- APP免费
12.2.7 为方法调用和返回生成代码
- APP免费
12.2.8 处理中间代码中的标签和其他伪指令
- APP免费
12.3 比较字节码汇编程序与二进制格式
- APP免费
12.3.1 以汇编格式输出字节码
- APP免费
12.3.2 以二进制格式输出字节码
- APP免费
12.4 链接、加载并包括运行时系统
- APP免费
12.5 Unicon示例:icont中的字节码生成
- APP免费
12.6 本章小结
- APP免费
12.7 思考题
- APP免费
第13章 生成本机代码
- APP免费
13.1 技术需求
- APP免费
13.2 决定是否生成本机代码
- APP免费
13.3 x64指令集
- APP免费
13.3.1 为x64指令添加类
- APP免费
13.3.2 将内存区域映射到基于x64寄存器的地址模式
- APP免费
13.4 使用寄存器
- APP免费
13.4.1 从空策略开始
- APP免费
13.4.2 分配寄存器以加速本地区域
- APP免费
13.5 将中间代码转换为x64代码
- APP免费
13.5.1 将中间代码地址映射到x64内存地址
- APP免费
13.5.2 实现x64代码生成器方法
- APP免费
13.5.3 生成简单表达式的x64代码
- APP免费
13.5.4 生成指针操作的代码
- APP免费
13.5.5 为分支和条件分支生成本机代码
- APP免费
13.5.6 为方法调用和返回生成代码
- APP免费
13.5.7 处理标签和伪指令
- APP免费
13.6 生成x64输出
- APP免费
13.6.1 以汇编语言格式编写x64代码
- APP免费
13.6.2 从本机汇编程序到目标文件
- APP免费
13.6.3 链接、加载并包括运行时系统
- APP免费
13.7 本章小结
- APP免费
13.8 思考题
- APP免费
第14章 运算符和内置函数的实现
- APP免费
14.1 实现运算符
- APP免费
14.1.1 运算符是否需要硬件支持
- APP免费
14.1.2 在中间代码生成中添加字符串连接
- APP免费
14.1.3 为字节码解释器添加字符串连接
- APP免费
14.1.4 将字符串连接添加到本机运行时系统
- APP免费
14.2 编写内置函数
- APP免费
14.2.1 向字节码解释器添加内置函数
- APP免费
14.2.2 编写用于本机代码实现的内置函数
- APP免费
14.3 集成内置组件与控制结构
- APP免费
14.4 为Unicon开发运算符和函数
- APP免费
14.4.1 在Unicon中编写运算符
- APP免费
14.4.2 开发Unicon的内置函数
- APP免费
14.5 本章小结
- APP免费
14.6 思考题
- APP免费
第15章 域控制结构
- APP免费
15.1 了解何时需要新的控制结构
- APP免费
15.1.1 定义控制结构
- APP免费
15.1.2 减少过多的冗余参数
- APP免费
15.2 Icon和Unicon中的字符串扫描
- APP免费
15.2.1 扫描环境及其基本操作
- APP免费
15.2.2 通过控制结构消除过多参数
- APP免费
15.3 Unicon中的渲染区域
- APP免费
15.3.1 从显示列表渲染3D图形
- APP免费
15.3.2 使用内置函数指定渲染区域
- APP免费
15.3.3 使用嵌套渲染区域更改图形细节层次
- APP免费
15.3.4 创建渲染区域控制结构
- APP免费
15.4 本章小结
- APP免费
15.5 思考题
- APP免费
第16章 垃圾收集
- APP免费
16.1 认识垃圾收集的重要性
- APP免费
16.2 对象的引用计数
- APP免费
16.2.1 将引用计数添加到Jzero
- APP免费
16.2.2 生成堆分配代码
- APP免费
16.2.3 为赋值运算符修改生成的代码
- APP免费
16.2.4 引用计数的缺点和局限性
- APP免费
16.3 标记实时数据并清理剩余数据
- APP免费
16.3.1 组织堆内存区域
- APP免费
16.3.2 遍历基本变量以标记实时数据
- APP免费
16.3.3 回收实时内存并将其放入连续内存块
- APP免费
16.4 本章小结
- APP免费
16.5 思考题
- APP免费
第17章 结语
- APP免费
17.1 反思从编写这本书中学到的东西
- APP免费
17.2 决定何去何从
- APP免费
17.2.1 学习编程语言设计
- APP免费
17.2.2 学习如何实现解释器和字节码机器
- APP免费
17.2.3 获取代码优化方面的专业知识
- APP免费
17.2.4 监视和调试程序执行
- APP免费
17.2.5 设计和实现IDE和GUI构建器
- APP免费
17.3 延伸阅读的参考资料
- APP免费
17.4 本章小结
- APP免费
第四部分 附录
- APP免费
附录A Unicon基础
- APP免费
附录B 部分章节要点
- APP免费
作者简介
- APP免费
封底
更新时间:2024-05-11 19:46:45