wap
終端請求的wmlscript檔案,過wap1.x閘道器後均被編譯成高效的二進位制位元組碼(指令)格式。
本模組構建了乙個解析、執行
wmlscript
位元組碼指令的虛擬機器,
把位元組碼解析成具體平台上的機器指令執行
, 在終端上通過軟體**,實現位元組碼指令功能。
本模組用來解析、執行
wmlscript
位元組碼,是實現
wml瀏覽器的一部分。每乙個
wmlscript
函式都是一段位元組碼指令流,終端上執行
wmlscript
函式也就是對該函式經閘道器編譯生成的指令逐個的進行解釋執行。
wml解析模組在解析網頁時發現需要
wmlsc檔案,
就應向io
發檔案請求
,io,
而不是通知
wml解析模組。
io模組接收完(成功
/失敗)
wml解析請求的
wmlsc
檔案後,會通知本模組建立相應的檔案概述結構,加入鏈中。
wml模組觸發
wmlsc
函式呼叫
,本模組執行
wmlscript
函式時,
若呼叫到外部
wmlsc
函式,
需向io
請求相應的
wmlsc
檔案。wml
強制重新整理網頁時,
保留檔案概述結構鏈
, 檔案概述結構資料除
url外,其他資料不再有效。
wml解析模組在退出
deck時,
通知本模組釋放整條檔案概述結構鏈。
要求cache
可以快取的
wmlsc
檔案數,大於在乙個
wml網頁中允許包含的
wmlsc
檔案數, cache
淘汰最遠未使用的
wmlsc
檔案。(
因為檔案概述結構鏈在
deck
結束時才釋放,需要保證在使用中的檔案概述結構指向的位元組碼流,不會因為
cache
快取策略而釋放,不出現野指標)
2.7全域性變數定義
全域性變數一:
標識: fnlibparse
型別 : funclibparse fnlibparse [6][16]
目的: 解析庫函式時,根據下標值呼叫相應的解析函式, 省去大段的if-else**
全域性變數二:
標識: tglobalwmls
型別 : t_wmlssrcglobal
目的:
本模組需要用到的全域性變數整合的結構
三.資料結構定義
巨集定義
#define kb_deck_wmlsc_max 10 //乙個deck中允許包含的wmlsc檔案數
#define kb_variant_max 255
//乙個函式最多允許的變數數(引數+區域性變數數)
#define kb_nesting_max 10
//函式巢狀呼叫最大層數
#define kb_operand_stack_size kb_variant_max//運算元棧大小(數值個數)
數值結構
//在運算元棧、變數表、常量表中,必須能存放wmlscript定義的所有資料型別的值
typedef struct tagwmlsunivalue
udata;
} t_wmlsunivalue;
函式資訊結構
typedef struct tagwmlsfunctioninfo
t_wmlsfunctioninfo;
編譯指示資訊結構
typedef struct tagwmlspragmainfo
t_wmlspragmainfo;
檔案概要結構
//如果1個wmlsc檔案包含20個外部函式(函式名長度設為20,20*20bytes),100個常量(100*8bytes),約需要1.5k
typedef struct tagwmlsfilesummary
t_wmlsfilesummary;
檔案概要鍊錶結構
typedef struct tagwmlsfilesummarylinknode
t_wmlsfilesummarylinknode;
//頭插法建表
typedef struct tagwmlsfilesummarylink
t_wmlsfilesummarylink;
運算元棧結構
typedef struct tagwmlsoperandstack
t_wmlsoperandstack;
說明: 大部分指令的語義即是對棧操作, 編譯出的位元組碼拆分表示式,依賴這些語義。如6+7*8-9 拆分成 :
load_const_s 6
load_const_s 7
load_const_s 8
muladd
load_const_s 9
sub呼叫堆疊結構
壓入呼叫堆疊的是檔案概述結構指標,函式資訊結構指標,ip,變數表指標,變數個數。
typeset struct tagwmlssceneinfo
typedef struct tagwmlsscenestack
t_wmlsscenestack;
本模組需要用到的全域性量整合的結構
typedef struct tagwmlssrcglobal
t_wmlssrcglobal;
流程圖貼不上來(略)
MAC 下virtualbox虛擬機器串列埠設定方法
在mac上安裝了virtualbox,虛擬了乙個windows7系統。因為專案要用到串列埠,所以需要在windows7上配置乙個串列埠。virtualbox本身可以設定新增串列埠,資料說可以通過通道的方式與主機通訊。經過一天的折騰,終於搞定了。記錄一下。1 在virtualbox上先配置下串列埠 然...
virtualbox虛擬機器 虛擬機器的網路
今天要測試ip多宿主 ip multihoming 即host和guest的兩個網絡卡分別接,host ping guest的ipv6不通。解決過程如下 命令輸出 ip addr 1 lo mtu 65536 qdisc noqueue state unknown link loopback 00 ...
debian虛擬機器安裝kvm虛擬機器
一 概念介紹 1 libvirt是linux上的虛擬化庫,是長期穩定的c語言api,支援kvm qemu xen lxc等主流虛擬化方案。virsh是libvirt對應的shell命令。2 kvm,即kernel basedvirtual machine的簡稱,是乙個開源的系統虛擬化模組,自linu...