由浅入深:自己动手开发模板引擎——解释型模板引擎(三)
解释型模板引擎与置换型模板引擎最大的区别是它支持流程控制语句,其次是支持对象访问(反射实现)。今天我们的任务是设计模板语法,给我们的后续开发提供依据。
模板语法类型
- 模板标记;
- 模板指令;
- 注释性指令;
- 语句型指令;
- 条件语句;
- 遍历语句;
模板语法设计
- 模板标记:
- {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格式的。只不过解析起来就没有那么爽了!在构建解析过程的时候我自己都觉得非常痛苦,一不小心就会搞错,甚至不知道错在哪里了!
后续课程有两种方式展现给大家,一种是我直接帖出代码实现,一种是按照如上整理的内容拆解成章节一一详述。由于我拿不定注意,第一种方案怕大家学不到东西,第二种方案太慢。所以做个调查:持续关注本系列博文的同学请在评论里回复支持哪一种写作方案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库