本书由以下的章节构成: ●●第1 章 引子 ●●第2 章 试做一个计算器 ●●第3~4 章 制作无类型语言crowbar ●●第5 章 中文支持与Unicode ●●第6~8 章 制作静态类型的语言Diksam ●●第9 章 应用篇 第1 章即是你正在阅读的章节。本章会对全书的构成以及讲解方式进行说明。 第2章通过制作一个简单的计算器,介绍yacc/lex 的基本使用方法。其实讲解yacc/lex 的部分,选择“计算器”为例实在有点老套,但确实没有比这更合适的题目了。此外还会介绍如何不依赖yacc,使用递归下降分析器(Recursive.Descent.Parser)来制作一个计算器。 从第3 章开始,会实际制作有一定行数规模的编程语言。 3 ~ 4 章会制作一个名为crowbar 的无类型解释型语言,6 ~ 8 章则主要制作名为Diksam 的支持静态类型的编译型语言(名字的由来会在后文提到)。在第5.章中,会针对使用编程语言时的中文支持与Unicode 问题进行说明。 第9 章阐释闭包(Closure)及异常处理机制等进阶功能。 本书中会使用C 语言作为编程语言语法处理器(编译器、解释器等)来编写语言(理由见后文中的具体说明)。而crowbar 与Diksam 最终都会累积为具备一定行数规模的程序(crowbar 约8000 行,Diksam 约2 万行)。 因此,阅读本书的读者最好具备两个条件: 1. 已经会C 语言 2. 具备阅读较长代码的能力 不过无论哪个条件都不是必须的。 对于 条件1 需要说一点的是,Java、C++、C# 等都是从C 语言发展出来的语言,所以对于已经学习过这些语言的人来说,读C 语言代码不会特别吃力。像预处理程序、指针等C 语言特有的知识,建议你借此机会一并学习一下。因为至少就现阶段来说,无论是专家还是业余爱好者,但凡是程序员都免不了要用到C 语言。而在crowbar 或Diksam 中,并没有使用很多C 语言特有的功能。比如说不会出现 *p++这种不易理解的写法,更多是写成数组下标的形式。 对于 条件2 要说的是,虽然一个语法处理器整体来看是个上规模的程序,但是其基础构成的部分并不会很庞大。本书不会对每一行代码逐一进行注释,而是侧重于介绍解决问题的思路,所以如果仅仅是想阅读一下本书的话,是不需要具备阅读较长代码的经验的。但若你最后不满足于书中的讲解,还想要自己去阅读一下crowbar 或者Diksam 源代码的话,因为代码行数很多,编程经验尚浅的朋友读起来可能会有压力。不过无论是业界还是外界人士,作为程序员总有一天会接触到大规模代码的程序,将本次实践作为入门的第一步也不是一件坏事。 综上所述: 如果你觉得自己不是本书所面向的读者,想办法加入其中不就行了?所以无需担心什么,门槛其实没有你想的那么高。凡是对语法处理器有兴趣的朋友都是本书面向的读者。