两周自制脚本语言1.4 语言处理器的结构与本书的框架_两周自制脚本语言1.4 语言处理器的结构与本书的框架试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 两周自制脚本语言 > 1.4 语言处理器的结构与本书的框架

两周自制脚本语言——1.4 语言处理器的结构与本书的框架

无论是解释器还是编译器,语言处理器前半部分的程序结构都大同小异。如图1.1所示,源代码首先将进行词法分析,由一长串字符串细分为多个更小的字符串单元。分割后的字符串称为单词。之后处理器将执行语法分析处理,把单词的排列转换为抽象语法树。至此为止,解释器与编译器的处理方式相同。之后,编译器将会把抽象语法树转换为其他语言,而解释器将会一边分析抽象语法树一边执行运算。 F 首先需要把源代码转换为抽象语法树没错吧? C 程序的分析结果能由抽象语法树表现,因此无论是解释器还是编译器都需要用到抽象语法树。 图1.1  语言处理器内部的处理流程 今后,本书将根据这一流程开发Stone语言的处理器。各章内容如下所示。 第1部分 基础篇 设计Stone语言的解释器。第2~8章将实现一个具有基本功能的解释器。第9~10章将介绍一些高级内容。 第1章(第1天) 本章。 第2章(第2天) 第2章将设计Stone语言,决定Stone语言需要具备哪些语法功能。 第3章(第3天) 第3章将设计词法分析器,介绍通过正则表达式实现词法分析的方法。 第4章(第4天) 第4章将讲解抽象语法树,并通过BNF表达Stone语言的语法。 第5章(第5天) 第5章将利用非常简单的解析器组合子库来创建语法解释器。解析器组合子库的内部结构将在第17章进行说明。 第6章(第6天) 第6章将设计一种极为基本的解释器。在这一章结束后,解释器将能够实际执行Stone语言写成的程序。本书采用了GluonJ这一系统来设计解释器的程序,因此这一章还会简单介绍GluonJ的使用方法。 第7章(第7天) 第7章将增强解释器的功能,使它能够执行程序中的函数,并且支持闭包语法。 第8章(第8天) 第8章将为解释器增加static方法的调用支持,使Stone语言能像Java语言那样调用静态方法。 第9章(第9天) 第9章将为Stone语言新增类与对象的语法。本章将使用闭包来实现该功能。 第10章(第10天) 第10章将为Stone语言增加数组功能。 第2部分 性能优化篇 第2部分将对第1部分设计的Stone语言解释器进行性能优化。其中,第13章将介绍如何设计Stone语言的编译器,帮助提高性能。如果读者仅对编译器的设计方法感兴趣,只需阅读第11章与第13章即可。 第11章(第11天) 程序不应在访问变量时每次都搜索变量名,而应首先搜索事先分配好的编号,提高访问性能。 第12章(第12天) 同样地,程序在调用对象的方法或引用其中的字段时,也不应直接搜索其名称,而应搜索编号。此外,第12章还会为Stone语言的解释器增加内联缓存,进一步优化性能。 第13章(第13天) Stone语言的解释器也采用了中间代码解释(或虚拟机)的机制。Stone语言写成的程序将首先被转换为中间代码(或二进制代码),解释器执行的其实是转换后的中间代码。Ruby等语言也采用了这样的方式。第13章还将介绍如果要设计一个能把Stone语言转换为机器语言的编译器,需要做哪些准备。 第14章(第14天) 最后,为了提高性能,Stone语言有必要支持静态数据类型,并根据数据类型的不同进一步优化性能。在执行具有静态数据类型的Stone语言程序时,编译器可以先将其转换为Java二进制代码,再直接由Java虚拟机执行该程序。第14章还会为编译器增加类型检查功能,在执行程序前检查是否存在类型错误,并同时提供类型预判功能。这样一来,即使程序没有显式地声明数据类型,Stone语言的解释器也能推测并指定合适的类型。Scala等一些语言也采用了这一机制。 第3部分 解说篇(自习时间) 第3部分将介绍一些在开发Stone语言过程中没能涉及的进阶主题。第15、16章的内容是大多语言处理器相关教材中都会讲解的基础知识。 A 咦,前14章就把书名所讲的内容都介绍完了呢。 C 嗯,的确如此。 A 这么做是为了博人眼球吗? H 小A,不能这么挑刺哦。 F 不过其实这也不难理解,上课时也常会出现本课内容还没全部结束,就被要求去自学剩下的内容的情况呢。 C 没错,这里也是一样。 第15章(第15天) Stone语言的词法分析器由Java的正则表达式库实现。第15章将不使用这种方式,手工设计词法分析器。具体来讲,这一章将介绍基于正则表达式的字符串匹配程序设计。 第16章(第16天) 本书采用了解析器组合子库这一简单的库来实现语法分析器。第16章将介绍一些语法分析的基本算法,并以LL语法分析为基础,手工设计一个简单的语法分析器。 第17章(第17天) 第17章将简单介绍本书使用的解析器组合子库的内部结构,并分析该库的源代码。 第18章(第18天) Stone语言的解释器采用了GluonJ系统来实现,该系统允许Java语言执行类似于Ruby语言中open class的功能。第18章将总结使用GluonJ时的一些琐碎的注意事项。 第19章(第19天) 抽象语法树是语言处理器的核心。在实现面向对象语言时,抽象语法树的节点对象的类会包含各种类型的方法。本书借助了GluonJ来增加这些方法,读者还可以通过其他设计模式来实现相同的效果。第19章将介绍使用设计模式实现抽象语法树的优缺点,并与使用GluonJ的方式作比较。 A 也就是说全书共有19章对吧?老师,那平时时间不多的读者应该优先阅读那些章节比较好呢? F 你是想问有哪些章节跳过不读也可以对吧? C 嗯,我建议先读完第2~8章,之后是第15、16章,如果还有时间,再读一下第11章和第13章。 F 第9章关于面向对象的内容不重要吗? S 要说最近比较流行的话题,第14章的内容才更重要吧。 C 其实如果时间足够,我希望读者能够读完全书。真要选取部分来读的话,我建议按前面讲的顺序阅读。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《两周自制脚本语言》其他试读目录

• 1.1 机器语言与汇编语言
• 1.2 解释器与编译器
• 1.3 开发语言处理器
• 1.4 语言处理器的结构与本书的框架 [当前]
• 2.1 麻雀虽小、五脏俱全的程序设计语言
• 2.2 句尾的分号
• 2.3 含糊不得的语言
• 3.1 Token对象
• 3.2 通过正则表达式定义单词
• 3.3 借助java.util.regex设计词法分析器
• 3.4 词法分析器试运行