由淺入深:自己動手開發模板引擎——解釋型模板引擎(三)


解釋型模板引擎與置換型模板引擎最大的區別是它支持流程控制語句,其次是支持對象訪問(反射實現)。今天我們的任務是設計模板語法,給我們的后續開發提供依據。

模板語法類型

  1. 模板標記;
  2. 模板指令;
    1. 注釋性指令;
    2. 語句型指令;
  3. 條件語句;
  4. 遍歷語句;

模板語法設計

  1. 模板標記:
    • {title};
    • {item.Name};
    • {item.GetSize()};
    • {item.GetObject("string", false, 0, 0.12, DateTime.Now)};
  2. 模板指令:
    1. 注釋性指令:
      • <!--#include file="../public_header.shtml" -->,用於引入包含文檔;
    2. 語句型指令:
      • <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}" />;
  3. 條件語句:
    • <m:if test="">...</m:if>;
    • <m:else />;
    • <m:elseif test="" />;
  4. 遍歷語句:
    • <m:for from="0" to="10" index="i">...</m:for>
    • <m:foreach var="item" collection="items" index="i">...</m:foreach>

總結

本節課沒有任何實戰性內容,只是總結了一下幾天來我們完成的一些語法設計。這樣的語法其實很好理解,SGML格式的。只不過解析起來就沒有那么爽了!在構建解析過程的時候我自己都覺得非常痛苦,一不小心就會搞錯,甚至不知道錯在哪里了!

后續課程有兩種方式展現給大家,一種是我直接帖出代碼實現,一種是按照如上整理的內容拆解成章節一一詳述。由於我拿不定注意,第一種方案怕大家學不到東西,第二種方案太慢。所以做個調查:持續關注本系列博文的同學請在評論里回復支持哪一種寫作方案。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM