因为时间关系,半年前写的zengl编程语言拖到现在才全部发布出来,之所以叫做"中序",是因为虽然已写的版本都发布完了,但是如果以后有新的版本还会 继续发布,先在这里对zengl做个小...

    因为时间关系,半年前写的zengl编程语言拖到现在才全部发布出来,之所以叫做"中序",是因为虽然已写的版本都发布完了,但是如果以后有新的版本还会 继续发布,先在这里对zengl做个小结,所以标题记作"中序"。这里先提供一个EditPlus编辑器的语法高亮文件:zl.stx ,该文件的下载地址为:http://pan.baidu.com/share/link?shareid=268099&uk=940392313  (此为百度盘的共享链接地址)。

    以EditPlus v3.50英文版为例,将下载的zl.stx语法文件拷贝到电脑任意位置,然后在EditPlus的菜单Tools中选择Preferences项,弹出如下对话框,并根据下图进行设置:

    在Preferences对话框左侧点击File >>> Setting & syntax ,在右侧File types中使用Add...按钮添加一个文件类型,名称这里填的是zengl ,在下面File extensions中填写文件扩展名为zl ,最后在Settings and syntax标签中的Syntax file语法文件栏设置目标语法文件的路径,我这的路径是"D:\zl.stx" ,设置好后点击OK按钮即可。

    在zl.stx语法文件里有需要高亮的关键词,和字符串的规则等,效果如下图所示:

    下面来看则笑话:

    "我是一个程序猿,一天我坐在路边一边喝水一边苦苦检查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" \r\n\t');
    else
        printf('if you want play again ,type "r" \r\n\t');
    endif
    input = read();
    if((!blfirst && input=='r') || (blfirst && input=='s'))
        myGameStart();
        if(blfirst)
            blfirst = FALSE;
        endif
    else
        break; //跳出循环
    endif
dowhile() //end program! 此处为无限循环,除非循环体中有break

    最后的最后,如果转载请注明来源 http://www.zengl.com   , OK , 先到这里,休息,休息一下 O(∩_∩)O~

上下篇

下一篇: zengl编程语言 v1.0.2 修复BUG

上一篇: zengl编程语言v1.0.0图形版21点扑克游戏,do,while循环结构

相关文章

zengl v1.2.1 修复函数调用BUG

zengl v1.8.1 修复bug

zengl编程语言v0.0.3构建抽象语法树

zengl v1.3.0 位运算符 字符串脚本解析 缓存 Bug修复

zengl编程语言v0.0.4构建多语句抽象语法树

zengl编程语言v1.0.0图形版21点扑克游戏,do,while循环结构