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

写了个脚本解释器

2007-2-26 16:02
5327

纯解释执行,不生成语法树和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 )
在线值:
发帖
回帖
粉丝
2
厉害,学习
2007-2-26 17:07
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
高深,不懂
2007-2-26 17:19
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
给个help文档就好了.比如支持哪些脚本命令..
以前也想写个脚本解释器,但没有学编译原理,程序又不熟悉,..
就荒废了.支持楼主开发个中国人自己的编译器...
网上搜索了一下yacc,学习到了一点东西
....要是全部是自己的代码,那就好了.
2007-2-26 18:15
0
雪    币: 2054
活跃值: (282)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
5
2007-2-26 18:34
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
现在已经有许多脚本解释器了,很多都是开源的,比如Lua,拿来加密算法也不错.
2007-2-26 20:32
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
7
把开源的东西用来加密别的东西
2007-2-26 20:41
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
8
高深,下来看看开源不
2007-2-26 22:53
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
9
改了下,可以支持函数了

测试代码:

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");
}
上传的附件:
2007-2-27 22:02
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
10
最初由 sbright 发布
给个help文档就好了.比如支持哪些脚本命令..
以前也想写个脚本解释器,但没有学编译原理,程序又不熟悉,..
就荒废了.支持楼主开发个中国人自己的编译器...
网上搜索了一下yacc,学习到了一点东西
....要是全部是自己的代码,那就好了.


这个是写了玩的,就支持两个内建函数,sin和print,另外还有一堆BUG和内存泄漏
2007-2-27 22:16
0
雪    币: 2054
活跃值: (282)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
11
加精了?
2007-2-27 22:46
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
支持继续写了玩
2007-2-28 00:33
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
支持,收藏先
2007-2-28 11:49
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
14
本区少有的精华。
2007-3-1 06:56
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
15
完善了下,把内存泄漏清理了,支持数组和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倍
上传的附件:
2007-3-2 00:30
0
游客
登录 | 注册 方可回帖
返回
//