编译器构造

Anthony J. Dos Reis

文学

编译原理

2014-3-1

清华大学出版社

目录
第1章 字符串、语言和编译器 1.1 概述 1.2 语言的基本概念 1.3 编译器的基本概念 1.4 集合论中的基本概念 1.5 空串 1.6 连接 1.7 指数记法 1.8 星运算符(也称为0次或多次运算符) 1.9 串集合的连接 1.10 加运算符(也称为1次或多次运算符) 1.11 问号运算符(也称为0次或1次运算符) 1.12 包含单独一个串的集合的简便记法 1.13 运算符优先级 1.14 正规表达式 1.15 正则表达式的局限性 问题 第2章 上下文无关文法(一) 2.1 概述 2.2 什么是上下文无关文法 2.3 基于上下文无关文法的推导 2.4 由上下文无关文法定义的语言 2.5 上下文无关文法的不同表示方法 2.6 一些简单文法 2.7 基于上下文无关文法的语言生成技术 2.8 正规文法和右线性文法 2.9 基于正规文法的计数 2.10 表的文法 2.11 一个不是上下文无关的重要语言 问题 第3章 上下文无关文法(二) 3.1 概述 3.2 语法分析树 3.3 最左和最右推导 3.4 替换 3.5 二义文法 3.6 确定可致空的非终结符 3.7 消除 ( 产生式 3.8 消除unit产生式 3.9 消除无用非终结符 3.10 递归转换 3.11 增加空串到语言 问题 第4章 上下文无关文法(三) 4.1 概述 4.2 算术表达式文法 4.3 文法中结合性和优先级的描述 4.4 Backus-Naur范式 4.5 语法图 4.6 抽象语法树和三地址码 4.7 非收缩文法 4.8 基本非收缩文法 4.9 上下文无关文法到基本非收缩文法的转换 4.10 上下文无关语言的pumping特性 问题 第5章 Chomsky层次(选讲) 5.1 概述 5.2 上下文有关产生式 5.3 上下文有关文法 5.4 非受限文法 问题 第6章 自上而下语法分析 6.1 概述 6.2 自上而下构造语法分析树 6.3 失败的语法分析 6.4 不适合自上而下语法分析的文法 6.5 确定的语法分析器 6.6 借助栈的语法分析器 6.7 用表来表示栈式语法分析器 6.8 处理不以终结符领头的产生式 6.9 用Java写一个栈式语法分析器 问题 第7章 LL(1)文法 7.1 概述 7.2 产生式右端的FIRST集合 7.3 确定操作序列 7.4 确定 ( 产生式的选择集合 7.5 后跟-左端-后跟-最右规则 7.6 右端可致空的产生式的选择集合 7.7 包含输入结束符的选择集合 7.8 针对含lambda产生式文法的栈式语法分析器 7.9 将非LL(1)文法转换为LL(1)文法 7.10 用二义文法进行分析 7.11 计算FIRST和FOLLOW集合 问题 第8章 表驱动的栈式语法分析器(选讲) 8.1 概述 8.2 统一栈式语法分析器的操作 8.3 实现表驱动的栈式语法分析器 8.4 表驱动栈式语法分析器的改进 8.5 不确定的语法分析器--偏向理论的内容(选讲) 问题 第9章 递归-下降语法分析 9.1 概述 9.2 一个简单的递归-下降语法分析器 9.3 处理lambda产生式 9.4 一个公共错误 9.5 产生式的Java代码 9.6 递归-下降语法分析器中提取左公因子 9.7 消除尾递归 9.8 翻译星号、加号和问号算符 9.9 反向动作 问题 第10章 递归-下降翻译 10.1 概述 10.2 一个简单的翻译文法 10.3 转换翻译文法到Java代码 10.4 翻译文法的描述 10.5 在语法分析过程中传递信息 10.6 L-属性文法 10.7 一个新的单词符号管理器 10.8 解决单词符号向前一个字符看问题 10.9 新单词符号管理器的代码 10.10 前缀表达式编译器的翻译文法 10.11 趣用递归(选讲) 问题 第11章 汇编语言 11.1 概述 11.2 J1计算机的结构 11.3 机器语言指令 11.4 汇编语言指令 11.5 压入字符 11.6 aout指令 11.7 使用标号 11.8 使用汇编器 11.9 stav指令 11.10 编译赋值语句 11.11 编译print和println 11.12 输出字符串 11.13 输入十进制数 11.14 入口指导语句 11.15 更多的汇编语言内容 问题 第12章 一个简单的编译器S1 12.1 概述 12.2 源语言 12.3 源语言的文法 12.4 目标语言 12.5 符号表 12.6 代码生成器 12.7 token类 12.8 写出翻译文法 12.9 实现S1编译器 12.10 使用 12.11 关于扩展S1编译器的忠告 12.11.1 更新单词符号管理器 12.11.2 先调试单词符号管理器 12.11.3 选择集合 12.11.4 使用必要的break语句 12.11.5 使用必要的Consume方法调用 12.11.6 正确地解释翻译文法 12.12 对于S2的描述 问题 第13章 JavaCC(选讲) 13.1 概述 13.2 JavaCC中扩展的正规表达式 13.3 JavaCC输入文件 13.4 正规表达式动作描述 13.5 S1j的JavaCC输入文件 13.6 JavaCC产生的文件 13.7 使用星号和加号操作 13.8 选择点和向前看 13.9 JavaCC的选择算法 13.10 语法和语义的向前看描述(选讲) 13.11 用JavaCC仅生成单词符号管理器 13.12 使用单词符号链 13.13 抑制警告信息 问题 第14章 在S2基础上构造 14.1 概述 14.2 扩展println和print 14.3 级联赋值语句 14.4 一元加和减 14.5 readint语句 14.6 从命令行控制单词符号踪迹的生成 14.7 S3的规范 问题 第15章 编译控制结构 15.1 概述 15.2 while语句 15.3 if语句 15.4 do-while语句 15.5 数字常量的范围检查 15.6 处理字符串中的反斜线-引号 15.7 用JavaCC处理反斜线(选讲) 15.8 JavaCC中的全局块(选讲) 15.9 处理跨行字符串 15.10 用JavaCC处理跨行字符串(选讲) 15.11 JavaCC中的SPECIAL_TOKEN块(选讲) 15.12 错误恢复 15.13 JavaCC中的错误恢复(选讲) 15.14 S4的规范 问题 第16章 编译函数形式的程序 16.1 概述 16.2 分别汇编和连接 16.3 调用函数和从函数返回 16.4 S5的源语言 16.5 S5的符号表 16.6 S5的代码生成器 16.7 S5的翻译文法 16.8 与库连接 16.9 S5规范 16.10 扩展S5(选讲) 问题 第17章 有限自动机 17.1 概述 17.2 确定有限自动机 17.3 转换DFA到正规表达式 17.4 DFA的Java代码 17.5 非确定有限自动机 17.6 使用NFA作为一个算法 17.7 利用子集算法转换NFA到DFA 17.8 转换DFA到正规文法 17.9 转换正规文法到 17.10 转换正规表达式到NFA 17.11 求出最小的NFA 17.12 正规语言的泵理论 问题 第18章 课程设计项目:用编译技术实现grep 18.1 概述 18.2 grep程序的正规表达式 18.3 针对正规表达式的单词符号管理器 18.4 正规表达式的文法 18.5 正规表达式编译器的目标语言 18.6 用NFA进行模式匹配 问题 第19章 编译到面向寄存器的结构 19.1 概述 19.2 使用寄存器指令集 19.3 修改R1符号表 19.4 R1的语法分析器和代码生成器 问题 第20章 优化 20.1 概述 20.2 使用ldc指令 20.3 重用临时变量 20.4 常量合并 20.5 寄存器分配 20.6 窥孔优化 问题 第21章 解释器 21.1 概述 21.2 转换S1到I1 21.3 解释转移控制的语句 21.4 实现编译:解释器CI1 21.5 解释器的优点 问题 第22章 自下而上语法分析 22.1 概述 22.2 自下而上语法分析原理 22.3 语法分析:右递归文法对比左递归文法 22.4 用二义文法进行自下而上语法分析 22.5 不归约规则 22.6 SLR(1)语法分析 22.7 移进/归约冲突 22.8 归约/归约冲突 22.9 LR(1)语法分析 问题 第23章 yacc 23.1 概述 23.2 yacc输入和输出文件 23.3 一个yacc-生成的简单语法分析器 23.4 用取值栈传递值 23.5 对二义文法使yacc 23.6 在语法分析树中传递值 23.7 实现Sly 23.8 jflex 问题 附录A 栈指令集 附录B 寄存器指令集 参考文献
【展开】
内容简介
《编译器构造(Java语言版)》以Java为实现语言,清晰地向读者展示编译器设计和实现,提供了若干精心准备的实验项目及其测试用例。这些实验项目不仅使读者掌握理论知识,还能够应用理论。本书涵盖了自动机与形式语言课程的多数内容,包括有穷自动机、栈分析器、正规表达式、正规文法、上下文无关文法、上下文有关文法、非受限文法、Chomsky层次、泵引理、下推自动机、图灵机、可计算性、复杂性,还包括了下推自动机模拟器和图灵机模拟器。本书适用于作为编译原理、自动机、形式语言等课程的教材。
【展开】
下载说明

1、追日是作者栎年创作的原创作品,下载链接均为网友上传的的网盘链接!

2、相识电子书提供优质免费的txt、pdf等下载链接,所有电子书均为完整版!

下载链接
热门评论
  • 伯乐在线官方微博的评论
    《Performanced C++ 经验规则(2):你不知道的构造函数(中)》如果一个类有虚函数,那么虚表的初始化工作,无论构造函数是你定义的还是由编译器产生的,这部分工作都将由编译器隐式“合成”到构造函数中,以表示其良苦用心。网页链接 (by 张峻崇)
  • 人一科技的评论
    其实在30年前,比XCodeGhost更高明的手段就出现了。1984年的时候,UNIX创造者之一 Ken Thompson获得了图灵奖。他的获奖演讲叫做 Reflections on Trusting Trust(反思对信任的信任)如何构造一个非常难以被发现的编译器后门。后来被称为the Ken Thompson Hack(KTH)或the root password of all evil。
  • 替己行道的评论
    tcc-0.9.26是我遇到的第一款得心应手的编译器源代码(轻量高效,构造清晰,并且使用自身的汇编器和链接器),我要好好把握,边啃边编译,嵌入自己的测试代码,以便弄清它的构造。啃明白后,再开始改造它,改的面目全非了,自己的编译器也就出来了。我只能这么学了
  • mayer写字的地方的评论
    《每个程序员都应当知道的编译器优化知识》 高级编程语言提供的函数、条件语句和循环这样的抽象编程构造极大地提高了编程效率。然而,这也潜在地使性能显著下降成为了用高级编程语言写程序的一大劣势。在理想条件下,在不以性能为妥协的情况下, (分享自 @伯乐在线官方微博) 网页链接
  • 伯乐在线官方微博的评论
    《每个程序员都应当知道的编译器优化知识》高级语言提供的抽象编程构造极大地提高了编程效率。然而,这也潜在地使性能显著下降成为了用高级语言写程序的一大劣势。在理想条件下,在不以性能为妥协的情况下,你应该写出易读并且易维护的代码……全文:网页链接 @Q_alexxx 译
  • glinuxer的评论
    网页链接 平凡的默认构造函数就是说构造函数“什么都不干”。通常情况下,不定义类的构造函数,编译器就会为我们生成一个平凡的默认构造函数。而一旦定义了构造函数,即使构造函数不包含参数,函数体里也没有任何的代码,那么该构造函数也不再是“平凡”的。 分享自Kindle
  • DETECTIVE_SHERLOCK的评论
    发表了博文《2014年11月19日》体验类的动态多态性之虚函数之前我们讲述的多态性,像函数重载,运算符重载,拷贝构造等都是在编译器完成的多态性,我们称之为静态多太性,现在我们讨论下运行期间才体现出来的2014年11月19...