浅析J2ME Snake脚本引擎用法(1)
本文向大家描述一下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++编译器是用状态机进行语法分析,在表达式的编译上做足了优化,可是我才是个初学者,为了加快研发速度我使用了半状态机半递归下降的方式进行编译,所以在效率上没有做太多优化,所以如果您想写复杂表达式求值并需要快速运行的代码,还是建议用低级代码编写,最后可以和高级代码进行合并,用汇编器汇编成二进制。
- 上一篇:JS实现IE6下PNG图片透明又出新方法!
- 下一篇:深入了解J2ME网络程序设计