Enjoy模板引擎原理

模板引擎是web开发中必不可少的部分,Enjoy模板引擎做为JFinal的默认模板引擎,也可以单独使用。它的实现非常的精巧,在使用了一段时间后,也来窥探究竟。

模板引擎确实不亚于实现一门语言,当前的大多数模板引擎是基于antlr,那antlr什么是呢,它帮助模板开发者生成词法、语法解析器。 开发需要制定一个词法、语法规则文件,所以要学习antlr的语法定义规则,运行环境还需要依赖它。

Enjoy模板引擎,没有基于第三方库,词法、语法分析 都是纯手写,代码量确实很少,但是想要读懂要一定的基础,如果明白作者的设计初衷将会更好理解。

1.极简设计
2.创新的词法分析算法、语法分析算法
3.语言级指令扩展
4.不引入新的概念

之前写过一篇《像#render指令一样可以动态参数又支持调用子模板中的函数》的文章,当时是懵的,经过再次阅读源码,才明白作者这样设计的好处。所以正如第三点说的,语言级指令扩展,需要什么指令完全可以自己扩展。

主要工作流程:
词法分析Lexer:这里将生成TokenList,相关类,Lexer,Token、TextToken、ParaToken,Symbol,CharTable。这里作者使用自创的DKFF(Dynamic Key Feature Forward)算法,其目的是提高可读性,降低复杂度,降低state维护量。

语法分析Parser:依据TokenList生成AST,根据Token生成对应的Stat类型,组装成Tree,这一步生成抽象语法树,而每一个Stat语句可以在render时候执行exec方法进行模板的渲染。在构建Stat时候根据Token类型,如果是Expr表达式,那么就会进行表达式Expr的词法>语法分析然后生成表达式AST并赋值给Stat。这里作者使用自创的DLRD (Double Layer Recursive Descent) 为何是Double的呢,将指令与表达式的语法分析划分在不同的层次之中所以有两次Recursive Descent(递归下降算法),可见Parser与ExprParser两个类。

Templat生成:根据AST生成一个Template待用。

render进行渲染:传入参数,Env,Scope,writer,进行渲染,Env用来解析时存放模板函数和执行时提供模板函数,Scope用来提供一些sharedMethod和给模板赋值的data,writer负责写数据。

Enjoy模板引擎原理

当前阅读的是JFinal4.8。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Antlr简介 ANTLR 语言识别的一个工具 (ANother Tool for Language Recogn...
    谢谢侬侬侬阅读 6,363评论 0 2
  • 在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp。后面在外包公司为了快速交货,还是用了p...
    zhoulujun阅读 4,359评论 0 2
  • 前端必读:浏览器内部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是强强阅读 1,165评论 0 2
  • 闭门不出,终于有机会追影了,今天下午看了《七月与安生》这部影片,写写观后感。 安生与七月相识于学校军训期间,其后几...
    佛缘随心阅读 349评论 2 3
  • 努力前行的你,是不是也会遇到如下问题: 话到嘴边却不知如何表达?想法千千万,提笔全忘光?会议时抓不到重点,不知道该...
    丁香新语阅读 646评论 1 4