流逝的时光
总有一天我们都会离去 email: zzxhang@gmail.com
posts - 21,comments - 111,trackbacks - 0

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

  1Func 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}

 13Func 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
 33Func 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    
 44Lab : next
 45    Add s,i;
 46    Inc i;
 47    Jle i,to,next;
 48
 49    Ret s;
 50}

 51
 52Func 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}

主程序:

 1#include "stdafx.h"
 2#include "luckyscript.h"
 3
 4using namespace LUCKY_SCRIPT;
 5
 6void 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
27void newLine(RuntimeState* state)
28{
29    printf("\n");
30}

31
32int _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}

运行结果:

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

FeedBack:
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-24 17:30 | LOGOS

又要出一个vczh么
  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-24 19:13 | flyman
呵呵,不错,等等看。  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-24 21:12 | yindf
这个“汇编”有点好玩,

RetVal 是怎么定义的呀?

难道你的虚拟机里面专门有地方放返回值?

如果允许扩展类型的话,大小怎么定?

你的虚拟机支持垃圾回收吗?

或者你想实现成lua这样子的?  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-24 23:28 | 陈梓瀚(vczh)
做脚本无论如何得有lambda expression才有意思。脚本的话还是做堆栈机好。

“Jle i,to,next;”这句话很有性格  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分[未登录]
2009-02-25 12:37 | 清风
@yindf
自己定义"汇编"是挺好玩的

RetVal作为一个虚拟寄存器

可以这么理解

大小在定义的时候就确定了

刚弄出一个可运行的玩意,很多东西都还没具体考虑

@陈梓瀚(vczh)
是挺有性格的,呵呵
  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-25 16:55 | 陈梓瀚(vczh)
@清风
一般来说,应该先定义高级语言,然后再考虑指令集的事情。  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分[未登录]
2009-02-25 21:18 | 清风
@陈梓瀚(vczh)
指令集直接抄的XX语言的  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-26 12:31 | 梦在天涯
哦,强力支持哦!我跟你们学习哦!

中国缺少这个啊,最近学习perl,还有python,和ruby都比较流行啊!  回复  更多评论
  
# re: 准备写一门脚本语言,初步完成汇编器及虚拟机部分
2009-02-26 16:49 | poco
套用范伟的一句话:你觉得这事有意思吗?  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理