新闻资讯
看你所看,想你所想

zengl程式语言

zengl程式语言

zengl程式语言

编程是一门艺术,而程式语言则是这门艺术的缔造者。计算机系的很多学生都对程式语言涉及到的编译原理表示畏惧,其实编译原理本身并不複杂,不过由于目前市面上有关编译原理的书籍大部分都是由国外的原着翻译过来的,翻译过来的文字很多时候没办法完美的表达出原文的意思,所以有时候让人感觉像天书,例如国外有名的 龙书(Dragon book),龙书是Alfred V. Aho等人于1986年出版的,虽然时隔了几十年,不过里面的编译原理和算法却相当经典,可惜大部分翻译的质量都不过关,需要仔细研读作者提供的原始码再加上英文原着,才能够领悟出编译原理的奥妙。 不过作者提供的原始码做出来的最终例子因为与别的程式语言相比过于简单,可用性不强,再加上一堆的数学公式,很多人都放弃了研究,再加上目前国内.net,java,android之类的商业开发环境,很多程式设计师没时间做开源项目,所以全世界那幺多的程式语言就没看到中国人开发的程式语言,可能有人会说有易语言,易语言确实是很难得的套用于实际开发的中国的程式语言,不过好像没开源吧,商业的味道更浓点。 不过任何事情都不是绝对的,外国人能做到的,我们一样可以做到,zengl开源网的站长根据龙书里的编译原理,使用C语言开发出了一套开源的程式语言,名字叫zengl程式语言。

基本介绍

  • 中文名:程式语言
  • 外文名:zengl
  • 目的:揭开编译原理的神秘面纱
  • 精神:开源
详述
zengl程式语言创建的本意是为了让人们能够揭开编译原理的神秘面纱。本着开源的精神,作者将该程式语言开发过程中的所有版本都公开出来,每个版本都有windows系统的用于vs2008的版本,以及linux系统下的包含makefile的原始码,并且都有对应的测试脚本用于测试程式语言的实用性。
作者从编译原理的词法解析开始创建了第一个词法扫描的版本,接着是抽象语法树的生成等,在做出一个像样的编译器后,又接着做了一个解释器(就像JAVA的虚拟机),用于解释执行编译器生成的中间代码。作者抛开了龙书中的複杂的数学算法,利用简洁的C语言和常用的条件,循环,函式等结构构建了一个简单易懂的程式语言,并且在很多重要的代码处做了注释,每个版本都在网站中有个单独的页面,在其中有详细的阐述,力求让人们能更直观的深入到程式语言的核心部分,最重要的是这些都是中文的,无需进行蹩脚的翻译。
如果把zengl程式语言比作金字塔,那幺其中的每个版本就是金字塔的台阶,只要沿着台阶一级一级的往上走,就可以领悟到编译原理和程式语言的魅力,最终能够开发出属于自己的程式语言,就算不能开发出一个自己的程式语言,也能将编译原理套用到其他项目中去。
作者使用zengl v1.0.5的版本开发了俄罗斯方块游戏:
在linux下按P键暂停时的截图如下(linux下的kde截图软体像素不太高):
zengl程式语言
作者将zengl程式语言嵌入到一个採集器的产品(该採集器是专门针对Destoon B2B系统的)中,使用zengl动态脚本作为採集规则档案,该採集器的界面如下:
zengl程式语言
该採集器的相关资料都在zengl开源网的zengl採集器栏目中。
zengl程式语言的作者为了进一步阐述该程式语言的实用性,在后面的版本中还开发了一个21点的扑克小游戏。
下面是zengl程式语言使用SDL游戏引擎开发的图形版的21点扑克游戏截图:
zengl程式语言
下面是zengl利用SDL做的测试滑鼠捕获事件的截图:
zengl程式语言
下面是zengl程式语言使用SDL游戏引擎开发的小游戏的windows截图(一个可以控制人物精灵四处移动的小游戏):
zengl程式语言
下面是linux下的截图:
zengl程式语言
下面是zengl程式语言里的if结构的语法树截图:
zengl程式语言
最后是《zengl程式语言 中序》的部分内容:
"我是一个程式猿,一天我坐在路边一边喝水一边苦苦检查bug,这时一个乞丐在我边上坐下了,开始要饭,我觉得他可怜,就给了他一块钱,然后接着调试程式。他可能生意不好,就无聊的看看我在乾什幺,然后过了一会,他幽幽说,这里少了一个分号。"
这则笑话在网上广为流传,确实生动的体现了目前国内大部分程式设计师的生存现状,每天辛辛苦苦的消耗脑细胞,有的因为长时间工作甚至献出了宝贵的生命,到底是什幺造成了目前的局面,我想可能只有电视剧《天道》里的"文化属性"可以解释了。
传统观念的死结在于一个"靠"字,在家靠父母,出外靠朋友,靠亲戚,靠别人,靠组织,就是不要靠自己。这种观念根深蒂固,造成了目前国内没有什幺优秀的软体,没有属于国人的开源程式语言,没有属于国人的开源作业系统,没有属于国人的开源资料库,没有属于国人的核心技术实力,在国内企业老闆的眼里什幺都可以copy,什幺都可以仿照,在这样的纯粹的商业炒作的环境下,程式设计师慢慢的失去了精神上的寄託,做出来的软体也仅仅是为了餬口饭吃,大量的重複性的软体充 斥市场。
Linus Torvalds是芬兰的骄傲,Linux则是全球成千上万的程式设计师的思想和开源精神的结晶。国内的软体行业缺少一种精神上的支柱,今天JAVA流行就学JAVA,明天Android流行,就转行学Android,被老外牵着鼻子走,失去了自己精神上的主权和独立。我们为什幺要听命于别人,自己的命运应该把握在自己的手里,编程是一门极富艺术和挑战的科学,它具有极强的创造力,我们应该开闢属于自己的"疆土",开发自己的程式语言,开发自己的作业系统,开发自己的资料库,开创国内的真正的编程时代。
可能有人会说我很狂,我只想说,技术上的落后并不可怕,可怕的是不思进取,随波逐流,可怕的是技术上的封闭,可怕的是纯粹的商业炒作,最可怕的就是精神上 的麻木不仁,缺乏创造力。真正的创新不是单纯的引入技术,更重要的是改进,创造出属于自己的东西,创造出属于自己的精神支柱。
我做zengl程式语言不为别的,除了在一定程度上揭示编译原理外,更希望的是能有更多的人投入到开源软体行业。
学Linux核心源码需要从0.11开始研究,才能深入进去,如果一开始从linux 3.0.4研究,很容易就迷失在代码的丛林中,出不来了。所以我将zengl程式语言的所有版本都发布出来,好让大家能从最简单的版本开始研究。在查看代 码之前最好能将《龙书》看一遍,虽然龙书的很多算法很抽象,做出来的测试代码功能过于简单,但是确实是编译原理入门的好教材。
Zengl程式语言附录:
现在回顾一下zengl程式语言里目前已经支持的关键字:
1,print关键字:该关键字用来列印输出语句,并且会自动在语句末尾输出换行符。例如:
print 'hello world'; //列印hello world
2,if-elif-else-endif 条件选择结构,例如:
if(a==b) //如果a等于b,则列印字元串a=b
print 'a=b';
elif(a>b) //如果a大于b,则列印a>b
print 'a>b';
else //其他情况下,列印a<b
print 'a<b';
endif

3,for....endfor 循环结构,例如:
for(i=0;i<3;i++) //循环列印出i值。
print 'i is ' + i;
endfor
4,fun....endfun 函式结构,例如:
fun test(a,b) //test函式,将a,b两参数依次列印出来。
print a;
print b;
endfun
5,global关键字,在函式中引入全局变数,类似PHP中的global关键字。例如:
fun test()
global a; //引入a全局变数,并列印a
print a;
endfun
6,return 关键字,在函式中直接返回。例如:
fun test(a,b)
if(a>b) //如果a大于b则直接返回。
return;
endif
print a + b;
endfun
7,use关键字,在脚本中载入某模组,例如: use builtin; //载入builtin内建模组,use通常用在开头。
8,break关键字,在for,switch,while,dowhile中用于跳出结构用的,用法和PHP以及C中的break一样。
9,continue关键字,在for,while,dowhile循环中跳过后面的语句不执行,直接跳到条件判断语句,继续下一次的判断。
10,def关键字,定义常量宏,如def TRUE 1; //定义一个TRUE宏,值为1
11,inc关键字,在脚本中载入外部脚本,例如:inc 'sdl_def.zl';
12,switch...case...default...endswt 多条件选择结构,例如:
switch(event.type)
case EvQuit: //点击了视窗右上角的叉叉则game over游戏结束
gameover = TRUE;
break;
case EvKeyDown:
switch(event.keytype) //再嵌入一个switch结构
case KeyEsc: //按了ESC键,也game over游戏结束
gameover = TRUE;
break;
case KeyUp: //按上键,用户要牌
myPressUpDown(KeyUp);
break;
case KeyDown: //按下键,用户不要牌
myPressUpDown(KeyDown);
break;
case KeyRight: //按右键,重新开始一轮
myGameRestart();
break;
endswt
break;
endswt
13,class...endcls 类定义结构,例如:
class clsPosition
x;
y;
w;
h;
endcls
14,while...endwhile 循环结构,例如:
while(!gameover)
..........
endwhile
15,do....dowhile 循环结构,例如:
do
if(blfirst)
printf('if you want start ,type "s" \t');
else
printf('if you want play again ,type "r" \t');
endif
input = read();
if((!blfirst && input=='r') || (blfirst && input=='s'))
myGameStart();
if(blfirst)
blfirst = FALSE;
endif
else
break; //跳出循环
endif
dowhile() //end program! 此处为无限循环,除非循环体中有break

转载请注明出处海之美文 » zengl程式语言

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com