-
Notifications
You must be signed in to change notification settings - Fork 0
ast
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 的对象分离。当匹配到替换规则的时候,就将内容替换为新的值,从而生成新的文件。