代码改变世界

[置顶] 索引

2014-03-02 21:59 by wssccc, 42 阅读, 收藏, 编辑
正文内容加载中...

实现自己的脚本语言ngscript之四:代码生成

2014-04-06 23:31 by wssccc, 116 阅读, 收藏, 编辑
摘要:最近的进度ngscript测试代码 1 function c1(a, b, c, d) { 2 this.a = 1; 3 this.b = new array(); 4 this.b[0] = 1; 5 this.b[1] = 2; 6 } 7 8 c = new c1(); 9 print(c.a);10 11 a = (function(a, b, c) {12 return a + b * c;13 })(1, 2, 3);14 15 print(a);16 17 if (1) {18 print("if_test");19 }20 2... 阅读全文

实现自己的脚本语言ngscript之三:语法设计

2014-04-06 13:10 by wssccc, 181 阅读, 收藏, 编辑
摘要:这是第四篇了,之所以隔了这么久才写,一方面是因为最近开始实习了,另一方面是因为设计语法真是要考虑很多东西。于是我去读了这本书,里面实现了两种语言,一种跟js差不多语法,用ast解释执行;另一种语法类似java,编译成字节码执行。于是ngscript就愉快的决定使用类似js语法、编译成字节码了。这之间还看了一本《flex与bison》,主要看了看LALR(1)中冲突的处理和写文法要注意的事情。现在的BNF已经写成这个样子了。可能还会不断的改。常用的控制结构和try…catch都有。//starter symbol %start ;%array ;%equiv ;%filte... 阅读全文

实现自己的脚本语言ngscript之二:语法分析

2014-03-06 19:07 by wssccc, 839 阅读, 收藏, 编辑
摘要:ngscript的语法分析使用的是我自己的语法分析工具parseroid。与常用cc工具(yacc、bison、javacc、antlr、etc…)不同的是,parseroid生成的不是语法分析器的源程序,而是一个parser对象,直接可以用来执行parsing。也就是说,可以由BNF在执行阶段动态生成parser。生成parser的action table运算量还是有点大,所以在新版的parseroid里面table改成了serializable的,可以缓存下来免去生成table的过程。实现parseroid文法描述parseroid使用LALR(1)文法。parseroid使用的文法描述文 阅读全文

实现自己的脚本语言ngscript之一:词法分析

2014-03-04 13:35 by wssccc, 376 阅读, 收藏, 编辑
摘要:正则表达式的理论基础可以参考装配脑袋的这个自己动手开发编译器(二)正则语言和正则表达式这个自己动手开发编译器(三)有穷自动机还有这个自己动手开发编译器(四)利用DFA转换表建立扫描器如果学过编译原理的课程就更好了。词法分析用到了我写的一个工具lexeroid。下面说一些我写lexeroid时候遇到的问题。Unicode在 装配脑袋的自己动手开发编译器(四)利用DFA转换表建立扫描器中,提到了等价类处理Unicode的方法。我做了一些改进。首先我把DFA Edge的输入改了,不再是一个char这种,而是一个Input类,它接受空(epsilon)或者begin和end范围(左闭右开区间)内的ch 阅读全文

实现自己的脚本语言ngscript之零

2014-03-04 12:04 by wssccc, 182 阅读, 收藏, 编辑
摘要:正式开始介绍前先扯点没用的。从小玩basic长大的小朋友大多有一个梦想,就是自己实现一个basic解释器。不过这里我实现的不是basic,而是一个语法和功能类似javascript的东西。暂且称之为ngscript做这个的初衷是想试试不借助任何cc工具,只用java和一些语言的基础设施来实现一个脚本解释器。不使用cc工具有以下原因语法蛋疼调试麻烦不知其所以然很多书上把常用的parsing方法介绍一通,然后就去折腾sablecc,yacc去了(貌似还有一本书是专门讲yacc和lex的)后来看了这个系列,受到了一些启发。不过里面使用的是C#,有好用的lambda。我也曾试着用java的匿名类机制实 阅读全文

NGRC远程控制

2014-03-03 14:34 by wssccc, 701 阅读, 收藏, 编辑
摘要:这是大三学完计算机网络的课程之后开始写的东西,后来慢慢完善到能用的程度。界面大概是这样还有这样使用Java的好处是不用修改就可以在Mac和Linux上运行(测试过Ubuntu和OS X)缺点是资源消耗也挺多的……这个暂时没有想到解决的办法。原理跟vnc的hextile差不多,做了一些改动。比如块的大小不是固定的16x16,因为分这样细的块之后内存会受不了……测试了一下,在我的机器上(酷睿2 P9300 4G内存)最佳的大小大概在100左右。而且较大的块使用jpg压缩效果也比小块好些。附一个hextile参考资料http://blog.csdn.net/bwmwm/article/details 阅读全文

博客园Minyx2_Lite模板的一些patch

2014-03-02 20:41 by wssccc, 52 阅读, 收藏, 编辑
摘要:文章数很少时,Minyx2_Lite模板底部的footer总是浮上来。解决方法是,在设置的页面定制CSS代码中添加: 1 div#content 2 { 3 float: left!important; 4 margin-right: 0px !important; 5 width: 70%; 6 padding-right: 10px 7 } 8 9 #sidebar{10 position: initial!important; 11 float: right;12 width: 28%!important; 13 }14 15... 阅读全文

解popstar

2013-09-16 13:28 by wssccc, 88 阅读, 收藏, 编辑
摘要:游戏介绍http://baike.baidu.com/view/9773832.htm实现过程:实现完整的游戏逻辑,包括消除,合并等,也就是实现一个完整的游戏功能。找出每个连通的星星区域,每个区域包括两个以上的星星(这样才能满足消除的条件)择优尝试消除一个区域,并评价这次消除的效果(使用计分或者最小剩余)dfs源代码 https://github.com/wssccc/popstar_solution.git 阅读全文

解数独

2012-12-10 13:16 by wssccc, 43 阅读, 收藏, 编辑
摘要:后来想起以前构思过的一个数独解法,于是实现了一下,结果比我想象的还快。。数独直接搜肯定是不行的,所以就是推理和搜了,这样减少了很多计算量。推理其实也很简单,行和列互斥,9格互斥,然后我还加了单个数字行列组合确定的方法。这样一来除了少数推理法(如两数字行列组合确定)不能模拟,其它基本可以推理出,对于搜索剪枝也够用了。然后猜测部分就dfs。我原以为一个数独应该在1s左右解出,结果比想象中快。。http://wssccc.googlecode.com/files/soduku_s.rar这是中间步骤的显示。。githubhttps://github.com/wssccc/sudoku 阅读全文

俄罗斯方块AI

2012-07-18 13:04 by wssccc, 149 阅读, 收藏, 编辑
摘要:实现过程:1、实现俄罗斯方块的游戏逻辑,包括方块生成、旋转、下落、融合。2、实现走法的评价函数3、搜索评价函数最大值和对应的走法俄罗斯方块的AI关键部分就是评价函数,试了很多次,最终确定了5个参数:1.方块下落下时与已有方块的匹配程度2.每行的连续性3.消掉的层数4.竖直方向的遮挡5.融合后的高度。每个参数归一化之后,乘上TerixAiParam类中的权值,就是评价函数的值。这就是一个函数优化问题。我是用粒子群优化(pso)算出的参数,迭代次数=100,误差=0.01,粒子数=100,方块数=10000时,计算出的最佳参数向量是{0.97367954,0.005630553,1.9036746 阅读全文