本文向大家描述一下J2ME Snake指令碼引擎,主要包括進階代碼編寫,低級代碼編寫和指令碼虛擬機器SVM)等內容,相信本文介紹一定會讓你有所收穫。
J2ME Snake指令碼引擎簡介
一、J2ME Snake指令碼引擎進階代碼編寫:
1,文法類似於C。
2,支援函數定義,函數調用,數組,運算式,迴圈,分支。
3,弱類型lua也是),內建類型有string,int,float,boolean
如定義變數varx;可以給x賦的值有x="你好Snake";x=32;x=32.23;x=true;
4,內建35個運算子,適用於所有的運算式,如位元運算>>邏輯運算&&賦值運算|=等等,運算子優先順序簡化為4級,由高到低為單目運算>算數運算>關係運算>邏輯運算,如果你寫代碼是不確定運算子的優先順序保險起見加上括弧就不會有錯。
5,支援逸出字元輸入。
6,支援注釋,如行注釋符//及塊注釋符/**/
二、J2ME Snake指令碼引擎低級代碼編寫:
1,文法類似於8086彙編,但要比它簡單的多,有33種虛擬指令可供選擇,並且可以定義方法示範一個完整的加法函數及函數調用分號是行注釋符):
- myAdd()
- {
- paramy;函數參數y
- paramx;函數參數x
- Addx,y;將y的值與x相加並賦給x
- Mov_RetVal,x;將x值賦給寄存器只有一個寄存器即_RetVal)
- Ret;方法返回符可以省略)
- }
- _Main()
- {
- varx;定義局部變數x
- vary;定義局部變數y
- varz;定義局部變數
- Movx,2;將2賦給x
- Movy,3;將3賦給y
- Pushx;將x壓棧,調用方法需要將參數壓棧
- Pushy;將y壓棧
- CallmyAdd;調用方法
- Movz,_RetVal;將寄存器的值賦給z
- }
判斷和分支的低級代碼我就不給出了,想瞭解的話可以先寫高代碼,再用編譯器編譯成低級代碼在編譯器中輸入參數-A)再參照低級代碼來研究
話說回來,為什麼要設計低級代碼呢,乾脆直接寫進階代碼多方便,之所以這樣設計是由於編譯器編譯跳轉分支那部分都非常的精簡,運行速度非常的快,但是編譯運算式就比較繁瑣,雖然在3個星期前我壓根不知道什麼叫編譯原理,但是通過寫指令碼的詞法分析,文法分析,彙編等程式我才發現它的難度和複雜度超出想象好幾倍,當前最流行的編譯器如C++編譯器是用狀態機器進行文法分析,在運算式的編譯上做足了最佳化,可是我才是個初學者,為了加快研發速度我使用了半狀態機器半遞迴下降的方式進行編譯,所以在效率上沒有做太多最佳化,所以如果您想寫複雜運算式求值並需要快速啟動並執行代碼,還是建議用低級代碼編寫,最後可以和進階代碼進行合并,用彙編器彙編成二進位。