内容简介
本书结合对现代编译器设计理论的详细研究,完整描述了一个可运行的小规模语言编译器(包括源代码)。本书反映了作者的这样一些观点:不掌握理论就不会理解实际的编译器设计;而对大学生来说,看不到理论在实际中的应用就不会真正地理解理论。把本书讨论的概念统一起来,就是一个完整的可运行的编译器,它使用每一章所讨论的技术进行开发,用C语言写成。每章最后有大量的练习,使学生的注意力集中在编程问题上。
本书前言
特色及评论
文章节选
编译器是一种相当复杂的程序,其代码的长度可从10000行到1000000行不等。编写甚至读懂这样的一个程序都非易事,大多数的计算机科学家和专业人员也从来没有编写过一个完整的编译器。但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应掌握编译器的基本结构和操作。
编辑推荐
本书结合对现代编译器设计理论的详细研究,完整描述了一个可运行的小规模语言编译器(包括源代码)。本书反映了作者的这样一些观点:不掌握理论就不会真正地理解实际的编译器设计:而对大学生来说,看不到理论在实际中的应用就不会真正地理解理论。把本书讨论的概念统一起来,就是一个完整的可运行的编译器,它使用每一章所讨论的技术进行开发,用C语言写成。每章最后有大量的练习,使学生的注意力集中在编程问题上。
主要特点:
1 详细给出了自顶而下的分析算法(第4章和第5章),包括递归下降和LL(1)分析方法、自底向上的分析、LALR(1)分析表以及Yacc分析器产生器工具的使用。
2 完整讨论了运行时环境的一般形式(第7章),从Fortran的完全静态环境到各种基于栈的环境,最后是Lisp语言的全动态环境。
3 通过一个例子语言的完整的代码产生器介绍了代码生成(第8章),并介绍了代码优先技术。
目录
译者序
前言
第1章 概论 1
1.1 为什么要用编译器 2
1.2 与编译器相关的程序 3
1.3 翻译步骤 5
1.4 编译器中的主要数据结构 8
1.5 编译器结构中的其他问题 10
1.6 自举与移植 12
1.7 TINY样本语言与编译器 14
1.8 C-Minus:编译器项目的一种语言 18
练习 19
注意与参考 20
第2章 词法分析 21
2.1 扫描处理 21
2.2 正则表达式 23
2.3 有穷自动机 32
2.4 从正则表达式到DFA 45
2.5 TINY扫描程序的实现 52
2.6 利用Lex 自动生成扫描程序 57
练习 65
编程练习 67
注意与参考 67
第3章 上下文无关文法及分析 69
3.1 分析过程 69
3.2 上下文无关文法 70
3.3 分析树与抽象语法树 77
3.4 二义性 83
3.5 扩展的表示法:EBNF和语法图 89
3.6 上下文无关语言的形式特性 93
3.7 TINY语言的语法 97
练习 101
注意与参考 104
第4章 自顶向下的分析 105
4.1 使用递归下降分析算法进行自顶向下的分析 105
4.2 LL(1)分析 113
4.3 First集合和Follow集合 125
4.4 TINY语言的递归下降分析程序 136
4.5 自顶向下分析程序中的错误校正 137
练习 143
编程练习 146
注意与参考 148
第5章 自底向上的分析 150
5.1 自底向上分析概览 151
5.2 LR(0)项的有穷自动机与LR(0)分析 153
5.3 SLR(1)分析 160
5.4 一般的LR(1)和LALR(1)分析 166
5.5 Yacc:一个LALR(1)分析程序的生成器 173
5.6 使用Yacc生成TINY分析程序 186
5.7 自底向上分..