Skip to content
Jinxin edited this page Aug 14, 2022 · 1 revision

AST 的设计思想与设计模式

最近接触到一个项目,简单来说就是,将一份模版文件中的一些内容提取出来,进行某些计算之后,生成新的内容,并根据模板文件生成新的文件。

这份模板文件的格式不是通用的 json 或者 xml,它是由某个工具生成,具有一定的格式特征。

比较巧妙的做法是按照 AST 的思想,为这份文件的格式建立相应的词法分析器和语法分析器,生成 AST,去除无用的字符,然后产生标准化的文件,类似 formatter 做的事情。

有了 AST 以后,就可以在遍历这个 tree 的时候,根据一些规则,将需要的内容提取出来进行计算,得到新的内容,进而根据模版文件生成新的文件。

AST 需要的 词法分析器和语法分析器,应用的也是模块化的思想,词法分析器 scan 文件的字符,将必要的内容提取为不同类型的 token,语法分析器 scan token,检查文件格式是否合法。

在遍历 AST 的时候,可以利用 Visitor 模式,将替换规则与 AST 的对象分离。当匹配到替换规则的时候,就将内容替换为新的值,从而生成新的文件。

参考

Clone this wiki locally