由浅入深:自己动手开发模板引擎——解释型模板引擎(三)
解释型模板引擎与置换型模板引擎最大的区别是它支持流程控制语句,其次是支持对象访问(反射实现)。今天我们的任务是设计模板语法,给我们的后续开发提供依据。
模板语法类型
- 模板标记;
- 模板指令;
- 注释性指令;
- 语句型指令;
- 条件语句;
- 遍历语句;
模板语法设计
- 模板标记:
- {title};
- {item.Name};
- {item.GetSize()};
- {item.GetObject("string", false, 0, 0.12, DateTime.Now)};
- 模板指令:
- 注释性指令:
- <!--#include file="../public_header.shtml" -->,用于引入包含文档;
- 语句型指令:
- <m:using css="../styles/common.css" combin="true" compress="false" />,为HTML量身定制,用于引入CSS文档,这个可以满足CSS文件拆分、合并、压缩等需要;
- <m:using js="../styles/common.css" combin="true" compress="false" />,为HTML量身定制,用于引入JS文档;
- <m:var name="age" value="30" />,理解为"30";
- <m:var name="age" value="{30}" />,理解为数字30;
- <m:var name="age" value="{DateTime.Now}" />;
- 条件语句:
- <m:if test="">...</m:if>;
- <m:else />;
- <m:elseif test="" />;
- 遍历语句:
- <m:for from="0" to="10" index="i">...</m:for>
- <m:foreach var="item" collection="items" index="i">...</m:foreach>
总结
本节课没有任何实战性内容,只是总结了一下几天来我们完成的一些语法设计。这样的语法其实很好理解,SGML格式的。只不过解析起来就没有那么爽了!在构建解析过程的时候我自己都觉得非常痛苦,一不小心就会搞错,甚至不知道错在哪里了!
后续课程有两种方式展现给大家,一种是我直接帖出代码实现,一种是按照如上整理的内容拆解成章节一一详述。由于我拿不定注意,第一种方案怕大家学不到东西,第二种方案太慢。所以做个调查:持续关注本系列博文的同学请在评论里回复支持哪一种写作方案。