<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0

    smarty4j是一個(gè)smarty for java的模板引擎,該引擎是將smarty模板從php上移植過(guò)來(lái),需要asm-3.0.jar。

    smarty4j將文本解析成語(yǔ)法樹(shù),然后根據(jù)語(yǔ)法樹(shù)生成Java Code的字節(jié)碼,相當(dāng)于一個(gè)基于JVM的smarty語(yǔ)法的編譯器。語(yǔ)法樹(shù)的生成采用左序遍歷的方式依次生成,大致的語(yǔ)法結(jié)點(diǎn)包含語(yǔ)句與表達(dá)式兩大基本 類型,語(yǔ)句結(jié)點(diǎn)能保證JVM的語(yǔ)句棧在執(zhí)行完畢后沒(méi)有新壓入的數(shù)據(jù),而表達(dá)式結(jié)點(diǎn)將產(chǎn)生一個(gè)數(shù)據(jù)。人人

    一般的結(jié)構(gòu),最頂層是一個(gè)文檔結(jié)點(diǎn),內(nèi)部可以由三種結(jié)點(diǎn)組成,分別是文本結(jié)點(diǎn)、函數(shù)結(jié)點(diǎn)與輸出結(jié)點(diǎn)

    • 文檔結(jié)點(diǎn)
      • 文本結(jié)點(diǎn)
      • 函數(shù)結(jié)點(diǎn)
        1. 行函數(shù)結(jié)點(diǎn)
        2. 塊函數(shù)結(jié)點(diǎn)
      • 輸出結(jié)點(diǎn)

    其中,輸出結(jié)點(diǎn)是輸出一個(gè)對(duì)象的內(nèi)容,因此由對(duì)象表達(dá)式與變量調(diào)節(jié)器結(jié)點(diǎn)組成,對(duì)象表達(dá)式主要是郵字符串表達(dá)式、NULL表達(dá)式與變量表達(dá)式組成

    • 輸出結(jié)點(diǎn)
      • 對(duì)象表達(dá)式
        1. 字符串表達(dá)式
        2. NULL表達(dá)式
        3. 變量表達(dá)式
      • 變量調(diào)節(jié)器結(jié)點(diǎn)

    變量表達(dá)式又包含相關(guān)的List或者M(jìn)ap擴(kuò)展信息 除此外,表達(dá)式結(jié)點(diǎn)還有浮點(diǎn)表達(dá)式結(jié)點(diǎn)、整數(shù)表達(dá)式結(jié)點(diǎn)與布爾表達(dá)式結(jié)點(diǎn),只要是表達(dá)式結(jié)點(diǎn)對(duì)象,就支持在壓棧過(guò)程中對(duì)這三種數(shù)值之間進(jìn)行轉(zhuǎn)化。

    執(zhí)行優(yōu)化

    smarty4j的塊函數(shù)結(jié)點(diǎn)將整個(gè)文檔分隔成代碼塊,分析每個(gè)代碼塊是否有變量的回寫(xiě)操作,如assign等。如果不存在,則會(huì)在棧內(nèi)存中自動(dòng)緩 存相關(guān)的節(jié)點(diǎn)讀取操作,第二次需要讀取時(shí),是直接從棧內(nèi)存中讀取,減少了分析和從容器中提取數(shù)據(jù)的問(wèn)題。特別是針對(duì)循環(huán)操作時(shí)緩存指針變量,能大幅度提高 執(zhí)行的速度。 smarty4j會(huì)自動(dòng)識(shí)別條件分支中的“短路”位置,一個(gè)布爾表達(dá)式結(jié)點(diǎn)的真或假的結(jié)果成立后,可以直接跳到if等函數(shù)指定的出口點(diǎn),而不需要逐級(jí)去驗(yàn) 證,對(duì)于復(fù)雜的布爾表達(dá)式,能小幅度的提高執(zhí)行速度。

    功能擴(kuò)展

    smarty4j的語(yǔ)法擴(kuò)展分為幾個(gè)層次:

    1.直接用java代碼實(shí)現(xiàn)新的函數(shù)與變量調(diào)節(jié)器

    繼承org.lilystudio.smarty4j.statement包下的 AbstractLineFunction,AbstractBlockFunction,AbstractCustomModifier三個(gè)類可以分別 實(shí)現(xiàn)單行函數(shù)、區(qū)塊函數(shù)與變量調(diào)節(jié)器的java代碼實(shí)現(xiàn),新的類名以$符號(hào)開(kāi)頭,放置在 org.lilystudio.smarty4j.statement.function與 org.lilystudio.smarty4j.statement.modifier包下可以被直接引用,否則需要在配置文件中定義函數(shù)的自動(dòng)搜索 包。這種方式面向普通的java開(kāi)發(fā)人員女裝品牌排行榜

    2.實(shí)現(xiàn)自己特點(diǎn)的函數(shù)語(yǔ)法

    繼承org.lilystudio.smarty4j.statement包下的AbstractFunction、 AbstractModifier或第一點(diǎn)中提供的接口,通過(guò)重新實(shí)現(xiàn)syntax或process方法來(lái)實(shí)現(xiàn)函數(shù)特有的語(yǔ)法或特定的處理方式,如 if,literal,break等均是代表。使用非標(biāo)準(zhǔn)的smarty參數(shù)語(yǔ)法應(yīng)當(dāng)慎重,一般由架構(gòu)人員來(lái)評(píng)估后由普通java開(kāi)發(fā)人員進(jìn)行。

    3.實(shí)現(xiàn)自己的函數(shù)與變量調(diào)節(jié)器語(yǔ)法轉(zhuǎn)換節(jié)點(diǎn) 

    繼承org.lilystudio.smarty4j.statement包下的AbstractFunction或 AbstractModifier,或者實(shí)現(xiàn)IFunction,IBlockFunction,IModifier接口,通過(guò)重寫(xiě)parse方法來(lái)生成 jvm匯編代碼。這種方式需要對(duì)jvm匯編了解程度較高,而且需要經(jīng)常對(duì)每一個(gè)分支的測(cè)試才能使用,否則會(huì)出現(xiàn)虛擬機(jī)的類加載異常或者是jvm匯編校驗(yàn)異 常。

    posted on 2011-04-22 09:30 墻頭草 閱讀(2766) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專家
    主站蜘蛛池模板: 亚洲经典在线中文字幕| 日韩精品成人无码专区免费| 国产一级淫片a视频免费观看| 亚洲综合综合在线| 最好看最新的中文字幕免费 | 中文字幕视频免费在线观看| 国产99视频精品免费视频7| 国产综合激情在线亚洲第一页 | 2020国产精品亚洲综合网| 免费看成人AA片无码视频羞羞网| 亚洲国产精品日韩在线| 成人黄页网站免费观看大全| 亚洲最大中文字幕无码网站 | 黄页网站在线观看免费| 亚洲第一黄片大全| 国产99久久久久久免费看| 亚洲日产韩国一二三四区| 日本视频免费高清一本18| 亚洲国产精品张柏芝在线观看| 中文免费观看视频网站| 亚洲精品V天堂中文字幕| 免费人成视网站在线观看不卡| 久久久久久久久久免免费精品| 亚洲av无码无在线观看红杏| 亚洲成人免费在线观看| 亚洲人成色77777在线观看| 免费人成视网站在线观看不卡| 青柠影视在线观看免费高清| 亚洲女人初试黑人巨高清| 免费的一级黄色片| 国产综合免费精品久久久 | 亚洲精品天堂无码中文字幕| 亚洲乱码中文字幕手机在线| 久久精品国产影库免费看| 涩涩色中文综合亚洲| 亚洲一区无码精品色| 97碰公开在线观看免费视频| 曰批全过程免费视频免费看| 亚洲免费在线视频| 免费中文字幕不卡视频| 最近免费mv在线电影|