1.3 本书的构成与面向读者
本书由以下的章节构成:
●第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源代码的话,因为代码行数很多,编程经验尚浅的朋友读起来可能会有压力。不过无论是业界还是外界人士,作为程序员总有一天会接触到大规模代码的程序,将本次实践作为入门的第一步也不是一件坏事。
综上所述:
如果你觉得自己不是本书所面向的读者,想办法加入其中不就行了?
所以无需担心什么,门槛其实没有你想的那么高。凡是对语法处理器有兴趣的朋友都是本书面向的读者。