首页
社区
课程
招聘
写了个脚本解释器
2007-2-26 16:02 4788

写了个脚本解释器

2007-2-26 16:02
4788
纯解释执行,不生成语法树和opcode
控制流程是yacc的状态矩阵,我觉得只要把lex文件改改,不要出现明文脚本文件,应该可以拿来加密算法

测试代码
a=10;
n=3;
while(a-- && n)
{
if(a<4)break;
print("while a="+a);
if(a==6)continue;
if(a==8)while(n>1.5)print("sub while n="+(n=n-0.5));
print("next");
}
print(a+n);
print("end");

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (14)
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
wangshq397 8 2007-2-26 17:07
2
0
厉害,学习
雪    币: 32403
活跃值: (18855)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2007-2-26 17:19
3
0
高深,不懂
雪    币: 156
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
sbright 2 2007-2-26 18:15
4
0
给个help文档就好了.比如支持哪些脚本命令..
以前也想写个脚本解释器,但没有学编译原理,程序又不熟悉,..
就荒废了.支持楼主开发个中国人自己的编译器...
网上搜索了一下yacc,学习到了一点东西
....要是全部是自己的代码,那就好了.
雪    币: 2074
活跃值: (262)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
阿健 5 2007-2-26 18:34
5
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 1 2007-2-26 20:32
6
0
现在已经有许多脚本解释器了,很多都是开源的,比如Lua,拿来加密算法也不错.
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
笨笨雄 14 2007-2-26 20:41
7
0
把开源的东西用来加密别的东西
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2007-2-26 22:53
8
0
高深,下来看看开源不
雪    币: 175
活跃值: (211)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
DonQuixote 8 2007-2-27 22:02
9
0
改了下,可以支持函数了

测试代码:

n=3;
f2(a,b,c){print(a);print(b);print(c);}
f1(a)
{
        print("f1 a="+a);
        if(!n)
        {
                f2("pa","pb","pc");
                return a;
        }
        a=a+1;
        n--;
        f1(a);
        return a;
}
main()
{
        print("f1 return "+f1(3));
        n=6;
        while(n--)
        {
                print("main n="+n);
                if(n==3)return 1;
        }
        print("end");
}
上传的附件:
雪    币: 175
活跃值: (211)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
DonQuixote 8 2007-2-27 22:16
10
0
最初由 sbright 发布
给个help文档就好了.比如支持哪些脚本命令..
以前也想写个脚本解释器,但没有学编译原理,程序又不熟悉,..
就荒废了.支持楼主开发个中国人自己的编译器...
网上搜索了一下yacc,学习到了一点东西
....要是全部是自己的代码,那就好了.


这个是写了玩的,就支持两个内建函数,sin和print,另外还有一堆BUG和内存泄漏
雪    币: 2074
活跃值: (262)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
阿健 5 2007-2-27 22:46
11
0
加精了?
雪    币: 156
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
sbright 2 2007-2-28 00:33
12
0
支持继续写了玩
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
skylly 4 2007-2-28 11:49
13
0
支持,收藏先
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 10 2007-3-1 06:56
14
0
本区少有的精华。
雪    币: 175
活跃值: (211)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
DonQuixote 8 2007-3-2 00:30
15
0
完善了下,把内存泄漏清理了,支持数组和for

测试代码:
main()
{
        n1=12;
        num ss[5000];
        fg=0;
        t1=time();
        ss[0]=2;  ss[1]=3;  ss[2]=5;  ss[3]=7;  ss[4]=11;  n3=4;
        while (n1<=5000)
        {
                for (n2=0;n2<=n3;n2++)
                {
                        if (n1<ss[n2]*ss[n2]) break;
                        if (n1 % ss[n2]==0)  {fg=0;break;}
                        else fg=1;
                }
                if (fg==1) {n3++;ss[n3]=n1;fg=0;}
                n1++;
        }
        t2=time();
        print("time="+(t2-t1));
        print("0-5000 prime number has "+(n3+1)+":");
        for(i=0;i<=n3;i++)print(ss[i]);
}

计算0-5000的素数,这个代码是照kflnig的改的
http://bbs.pediy.com/showthread.php?s=&threadid=40052
不过速度慢了点,比直接运行大约慢了4000倍
上传的附件:
游客
登录 | 注册 方可回帖
返回