命名为LuckyScript,有点古怪的名字,为什么这么叫呢?因为过去的两年时间里我一直都觉得自己不太顺,今年是本人的本命年,图个吉利,希望所有事情都会好起来..有多少跟我一样唯心主义的程序员?
打算让这门无类型的语言最低限度地支持面向对象,起码能构造类跟重载函数吧,其他没想好,写着玩,最近还是挺闲的.这几天把汇编器跟虚拟机搞了出来.
测试用的汇编脚本,比较长
  1 Func square
Func square
  2

 {
{
  3 Param a;
    Param a;
  4 
    
  5 Var c;
    Var c;
  6 
    
  7 Mov c,1;
    Mov c,1;
  8 Mul c,a;
    Mul c,a;
  9 Mul c,a;
    Mul c,a;
 10
 11 Ret c;
    Ret c;
 12 }
}
 13 Func addSquare
Func addSquare
 14

 {
{
 15 Param a;
    Param a;
 16 Param b;
    Param b;
 17
 18 Push a;
    Push a;
 19 Call square;
    Call square;
 20 Mov a,RetVal;
    Mov a,RetVal;
 21 Push b;
    Push b;
 22 Call square;
    Call square;
 23 Mov b,RetVal;
    Mov b,RetVal;
 24
 25 Var c;
    Var c;
 26 Mov c,0;
    Mov c,0;
 27 Add c,a;
    Add c,a; 
 28 Add c,b;
    Add c,b;   
 29 
    
 30 Ret c;
    Ret c; 
 31 }
}
 32
 33 Func sum
Func sum
 34

 {
{
 35 Param from;
    Param from;
 36 Param to;
    Param to;
 37
 38 Var i;
    Var i;
 39 Var s;
    Var s;
 40
 41 Mov s,0;
    Mov s,0;
 42 Mov i,from;
    Mov i,from;
 43 
    
 44 Lab : next
Lab : next
 45 Add s,i;
    Add s,i;
 46 Inc i;
    Inc i;
 47 Jle i,to,next;
    Jle i,to,next;
 48
 49 Ret s;
    Ret s;
 50 }
}
 51
 52 Func Main
Func Main
 53

 {
{
 54 Var a;
    Var a;
 55 Var b;
    Var b;
 56 Var c;
    Var c;
 57
 58 Mov a,2;
    Mov a,2;
 59 Mov b,3;
    Mov b,3;
 60
 61 Push "Runtime info:";
    Push "Runtime info:";
 62 CallHost print;
    CallHost print;
 63 CallHost newLine;
    CallHost newLine;
 64 Push "call addSquare function";
    Push "call addSquare function";
 65 CallHost print;
    CallHost print;
 66 CallHost newLine;
    CallHost newLine;
 67 Push "Param: ";
    Push "Param: ";
 68 CallHost print;
    CallHost print;
 69 Push a;
    Push a;
 70 CallHost print;
    CallHost print;
 71 Push b;
    Push b;
 72 CallHost print;
    CallHost print;
 73 CallHost newLine;
    CallHost newLine;
 74
 75 Push a;
    Push a;
 76 Push b;
    Push b;
 77 Call addSquare;
    Call addSquare;
 78
 79 Mov c,RetVal;
    Mov c,RetVal;
 80 
    
 81 Push "addSquare function return: ";
    Push "addSquare function return: ";
 82 CallHost print;
    CallHost print;  
 83 Push c;
    Push c;
 84 CallHost print;
    CallHost print;
 85 CallHost newLine;
    CallHost newLine;  
 86 
    
 87 Push "call sum function";
    Push "call sum function";
 88 CallHost print;
    CallHost print;
 89 CallHost newLine;
    CallHost newLine; 
 90 Push "Param: ";
    Push "Param: ";
 91 CallHost print;
    CallHost print;
 92 Push a;
    Push a;
 93 CallHost print;
    CallHost print;
 94 Push c;
    Push c;
 95 CallHost print;
    CallHost print;
 96 CallHost newLine;
    CallHost newLine; 
 97
 98 Push a;
    Push a;
 99 Push c;
    Push c;
100 Call sum;
    Call sum;
101
102 Mov c,RetVal;
    Mov c,RetVal;
103 
    
104 Push "sum function return: ";
    Push "sum function return: ";
105 CallHost print;
    CallHost print;    
106 Push c;
    Push c;
107 CallHost print;
    CallHost print;
108 }
} 
主程序:
 1 #include "stdafx.h"
#include "stdafx.h"
 2 #include "luckyscript.h"
#include "luckyscript.h"
 3
 4 using namespace LUCKY_SCRIPT;
using namespace LUCKY_SCRIPT;
 5
 6 void print(RuntimeState* state)
void print(RuntimeState* state)
 7

 {
{
 8 int opType = lucky_getValType(state,-1);
    int opType = lucky_getValType(state,-1);
 9
10 if(opType == OP_FLAG_TYPE_INT)
    if(opType == OP_FLAG_TYPE_INT)
11
 
     {
{
12 int val = lucky_popValueAsInt(state);
        int val = lucky_popValueAsInt(state);
13 printf("%d ",val);
        printf("%d ",val);
14 }
    }
15 else if(opType == OP_FLAG_TYPE_FLOAT)
    else if(opType == OP_FLAG_TYPE_FLOAT)
16
 
     {
{
17 float val = lucky_popValueAsFloat(state);
        float val = lucky_popValueAsFloat(state);
18 printf("%f ",val);
        printf("%f ",val);
19 }
    }
20 else if(opType == OP_FLAG_TYPE_STRING)
    else if(opType == OP_FLAG_TYPE_STRING)
21
 
     {
{
22 const char* val = lucky_popValueAsString(state);
        const char* val = lucky_popValueAsString(state);
23 printf(val);
        printf(val);
24 }
    }
25 }
}
26
27 void newLine(RuntimeState* state)
void newLine(RuntimeState* state)
28

 {
{
29 printf("\n");
    printf("\n");
30 }
}
31
32 int _tmain(int argc, _TCHAR* argv[])
int _tmain(int argc, _TCHAR* argv[])
33

 {
{
34 lucky_initScript();
    lucky_initScript();
35 lucky_compileAsmFile("test.lsm","test","");
    lucky_compileAsmFile("test.lsm","test","");
36
37 RuntimeState* state = lucky_loadlxeFile("test.lxe");
    RuntimeState* state = lucky_loadlxeFile("test.lxe");
38 lucky_registerHostFunc(state,print,"print");
    lucky_registerHostFunc(state,print,"print");
39 lucky_registerHostFunc(state,newLine,"newLine");
    lucky_registerHostFunc(state,newLine,"newLine");
40 lucky_execute(state);
    lucky_execute(state);
41
42 getch();
    getch();
43 return 0;
    return 0;
44 }
} 
运行结果:

	posted on 2009-02-24 17:25 
清風 阅读(2516) 
评论(9)  编辑 收藏 引用  所属分类: 
LuckyScript