命名為L(zhǎng)uckyScript,有點(diǎn)古怪的名字,為什么這么叫呢?因?yàn)檫^(guò)去的兩年時(shí)間里我一直都覺(jué)得自己不太順,今年是本人的本命年,圖個(gè)吉利,希望所有事情都會(huì)好起來(lái)..有多少跟我一樣唯心主義的程序員?
打算讓這門無(wú)類型的語(yǔ)言最低限度地支持面向?qū)ο螅鸫a能構(gòu)造類跟重載函數(shù)吧,其他沒(méi)想好,寫著玩,最近還是挺閑的.這幾天把匯編器跟虛擬機(jī)搞了出來(lái).
測(cè)試用的匯編腳本,比較長(zhǎng)
1
Func square
2

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

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

{
35
Param from;
36
Param to;
37
38
Var i;
39
Var s;
40
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
49
Ret s;
50
}
51
52
Func Main
53

{
54
Var a;
55
Var b;
56
Var c;
57
58
Mov a,2;
59
Mov b,3;
60
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
75
Push a;
76
Push b;
77
Call addSquare;
78
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
98
Push a;
99
Push c;
100
Call sum;
101
102
Mov c,RetVal;
103
104
Push "sum function return: ";
105
CallHost print;
106
Push c;
107
CallHost print;
108
}

2



3

4

5

6

7

8

9

10

11

12

13

14



15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34



35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53



54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

主程序:
1
#include "stdafx.h"
2
#include "luckyscript.h"
3
4
using namespace LUCKY_SCRIPT;
5
6
void print(RuntimeState* state)
7

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

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

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

2

3

4

5

6

7



8

9

10

11



12

13

14

15

16



17

18

19

20

21



22

23

24

25

26

27

28



29

30

31

32

33



34

35

36

37

38

39

40

41

42

43

44

運(yùn)行結(jié)果: