命名为LuckyScript,有点古怪的名字,为什么这么叫呢?因为过去的两年时间里我一直都觉得自己不太顺,今年是本人的本命年,图个吉利,希望所有事情都会好起来..有多少跟我一样唯心主义的程序员?
打算让这门无类型的语言最低限度地支持面向对象,起码能构造类跟重载函数吧,其他没想好,写着玩,最近还是挺闲的.这几天把汇编器跟虚拟机搞了出来.
测试用的汇编脚本,比较长
1
Func square
2![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
3
Param a;
4
5
Var c;
6
7
Mov c,1;
8
Mul c,a;
9
Mul c,a;
10![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
11
Ret c;
12
}
13
Func addSquare
14![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
15
Param a;
16
Param b;
17![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
18
Push a;
19
Call square;
20
Mov a,RetVal;
21
Push b;
22
Call square;
23
Mov b,RetVal;
24![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
25
Var c;
26
Mov c,0;
27
Add c,a;
28
Add c,b;
29
30
Ret c;
31
}
32![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
33
Func sum
34![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
35
Param from;
36
Param to;
37![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
38
Var i;
39
Var s;
40![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
41
Mov s,0;
42
Mov i,from;
43
44
Lab : next
45
Add s,i;
46
Inc i;
47
Jle i,to,next;
48![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
49
Ret s;
50
}
51![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
52
Func Main
53![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
54
Var a;
55
Var b;
56
Var c;
57![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
58
Mov a,2;
59
Mov b,3;
60![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
61
Push "Runtime info:";
62
CallHost print;
63
CallHost newLine;
64
Push "call addSquare function";
65
CallHost print;
66
CallHost newLine;
67
Push "Param: ";
68
CallHost print;
69
Push a;
70
CallHost print;
71
Push b;
72
CallHost print;
73
CallHost newLine;
74![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
75
Push a;
76
Push b;
77
Call addSquare;
78![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
79
Mov c,RetVal;
80
81
Push "addSquare function return: ";
82
CallHost print;
83
Push c;
84
CallHost print;
85
CallHost newLine;
86
87
Push "call sum function";
88
CallHost print;
89
CallHost newLine;
90
Push "Param: ";
91
CallHost print;
92
Push a;
93
CallHost print;
94
Push c;
95
CallHost print;
96
CallHost newLine;
97![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
98
Push a;
99
Push c;
100
Call sum;
101![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
102
Mov c,RetVal;
103
104
Push "sum function return: ";
105
CallHost print;
106
Push c;
107
CallHost print;
108
}
主程序:
1
#include "stdafx.h"
2
#include "luckyscript.h"
3![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
4
using namespace LUCKY_SCRIPT;
5![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
6
void print(RuntimeState* state)
7![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
8
int opType = lucky_getValType(state,-1);
9![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
if(opType == OP_FLAG_TYPE_INT)
11![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
12
int val = lucky_popValueAsInt(state);
13
printf("%d ",val);
14
}
15
else if(opType == OP_FLAG_TYPE_FLOAT)
16![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
17
float val = lucky_popValueAsFloat(state);
18
printf("%f ",val);
19
}
20
else if(opType == OP_FLAG_TYPE_STRING)
21![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
const char* val = lucky_popValueAsString(state);
23
printf(val);
24
}
25
}
26![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
27
void newLine(RuntimeState* state)
28![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
29
printf("\n");
30
}
31![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
32
int _tmain(int argc, _TCHAR* argv[])
33![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
34
lucky_initScript();
35
lucky_compileAsmFile("test.lsm","test","");
36![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
37
RuntimeState* state = lucky_loadlxeFile("test.lxe");
38
lucky_registerHostFunc(state,print,"print");
39
lucky_registerHostFunc(state,newLine,"newLine");
40
lucky_execute(state);
41![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
42
getch();
43
return 0;
44
}
运行结果:
![](http://www.cppblog.com/images/cppblog_com/zzxhang/4.JPG)
posted on 2009-02-24 17:25
清風 阅读(2471)
评论(9) 编辑 收藏 引用 所属分类:
LuckyScript