为什么 antlr 用于模板引擎不是个好主意
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我在发布 jfinal 3.0 的时候认为 antlr 用于 "模板引擎" 并不是个好主意,两年多时间过去了,我的观点更进一步:认为 antlr 在多数 “非模板引擎” 的场景下使用也不是个好主意。 在发布 jfinal 3.0 的时候谈到 antlr,只言片语信息量太少,引起了部分人的误解,今天就来稍稍展开聊一聊。 一、antlr 生成 Parser 难于调试、难于阅读 首先现场直观来感受一下 jfinal 手写 Parser 与使用 antlr 生成的 parser 的对比,下面是为 jfinal enjoy 模板引擎手写的 parser: https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/template/stat/Parser.java 空行 + 注释 + java 代码一共 278 行,干净利落,人类轻松阅读。更重要的是其用到的 Recursive Descent 算法简洁可靠,功能强大,随手可得。了解这个算法原理的同学几个小时就可以手撸一个自己的 Parser 出来。 再来看一下 antlr 为模板引擎生成的 parse: https://gitee.com/xiandafu/beetl/blob/master