中山网站建设搭建,微信最火公众号排行,wordpress 模板使用,国家免费24小时律师咨询Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多#xff0c;因此#xff0c;在编写之前可能也会铺垫得更多一些。当然#xff0c;本系列旨在“写出”一个编译器#xff0c;所以理论方面只会简单介绍 tao 语言所涉及的部分。之前的几章中#xff0c;我纯…Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多因此在编写之前可能也会铺垫得更多一些。当然本系列旨在“写出”一个编译器所以理论方面只会简单介绍 tao 语言所涉及的部分。之前的几章中我纯手写了tao 语言的 Tokenizer。但如果我准备也纯手写一个 Parser那将是非常麻烦且繁琐的一件事情。实际上就在在写出这篇文章之前我已完成了 Parser 的编写并测试妥当因此我可以在此面对各位得出这个结论。我将使用这么一种方式“制造”出 Parser将 tao 语言的所有语法细节描述出来即定义 tao 语言。写一个能”根据定义生成 tao 语言的 Parser“的程序。如果以上描述有些让人困惑那我举个通俗点的例子吧假如我想要制作一双鞋子通常的方案是我会买好材料并把鞋子做出来。但还有另一种方案我先画出鞋子的设计图再造一台能依照设计图造出鞋子的机器然后把设计图交给机器再发动机器得到鞋子。在”制造鞋子的世界“中除非我要开鞋厂否则若我仅仅想造双鞋子那么前一个方案显然更好。但在”制造编译器的世界“中却与直觉相反当语言本身足够复杂的时候后一种方案比前一种方案要方便得多。至此我需要一个能读懂 tao 语言的定义并根据定义生成 Parser 的一个程序。这种程序我们称之为 Compiler-compiler 。这样的程序(或称工具)有很多现成的可供选择(包括在 Java 平台上可用的)但既然我这个系列叫做《从零开始写个编译器吧》那显然如果我用现成的工具那是犯规行为。因此我还要写一个 Compiler-compiler 出来才行。那么让我先贴一张图以描述我将会写出的 Compiler-compiler 的工作原理吧。Compiler-compiler 会将 tao 语言的定义编译成某种数据结构而这种数据结构是 Parser 初始化的参数。Parser 只有获得了这种数据结构才能正常工作。当 Parser 初始化之后它会读取 Tokenizer 生成的 Token 序列并同时通过解释 Compiler-compiler 生成的数据结构最后生成 Syntax Tree。至此在编写 Parser 的章节中我必须完成如下三个任务。定义 tao 语言的语法细节并挑选一个合适的形式描述出来。编写一个 Compiler-compiler它能编译 tao 语言的定义并生成某种数据结构。编写一个 Parser它通过解释 Compiler-compiler 生成的数据结构将 Token 序列编译成 Syntax Tree。