俗话说的好,"授之鱼,不如授之渔",所谓"渔"就是指方法,在本文中就是zengl脚本的语法,虽然网站里有个zengl编程语言栏目,不过这个栏目是 给大学计算机系的学生用来学习...

    俗话说的好,"授之鱼,不如授之渔",所谓"渔"就是指方法,在本文中就是zengl脚本的语法,虽然网站里有个zengl编程语言栏目,不过这个栏目是 给大学计算机系的学生用来学习编译原理用的,里面通过C语言源码和示例来讲解如何利用编译原理和C语言来开发属于自己的编程语言,虽然在讲解的过程中和语 法一起进行了讲解,但是毕竟学术味道更浓些,不怎么浅显易懂,所以这里就以简洁的方式,抛开内部原理,只谈语法。

    首先需要一个好的编写源代码的工具,推荐EditPlus,该编辑器对应的zengl脚本的语法文件为 http://pan.baidu.com/share/link?shareid=327480&uk=940392313 (此为百度盘共享链接地址),下载zl.stx文件,然后参照zengl编程语言栏目中的"zengl编程语言 中序"文章内容进行设置,这样通过EditPlus编辑器编辑代码时,就会有语法高亮的效果(一些关键词,字符串等都会标上特殊的颜色),并且会将内建的采集器接口函数进行高亮。如下图所示:

    英语有语法,任何编程语言都有语法,语法的第一要素就是数据类型,zengl编程语言的数据类型主要是:整数(0,1,2,3....之类的没有小数点的 数字),浮点数(3.14159之类的含有小数点的),字符串,引用,数组,简单的类结构。其中引用,数组,类到后面的章节再介绍。

    为了测试语法,可以将Module目录中的"供应模块规则.zl"文件改个名字做个备份,然后新建一个"供应模块规则.zl",然后在其中输入如下代码:

a = 5;  //将5赋值给a变量
b = a * 2 + 116;  //将a变量和2相乘,再与116相加,最后将计算结果赋值给变量b
str = 'a is ' + a + ' b is ' + b;  //通过加法运算符将字符串和变量连接在一起,并赋值给str变量
print str;  //打印字符串变量str

USD = 885; //USD代表885美元
rate = 6.2162; //2013年3月份美元对人民币汇率为6.2162,美元咋的这么不值钱咯
RMB = USD * rate; //计算人民币
print "美元:" + USD + " 汇率:" + rate + " 对应人民币:" + RMB; //打印结果

    然后在"智能采集器2013PC桌面版"程序的左侧分类列表中选择一个供应分类,然后点开始(可能会提示你输入采集数量,随便输入个数字即可),得到如下结果:

    可以看到zengl脚本被正确执行,并且输出了正确的结果,可以拿计算器来验证。

    从上面的脚本代码可以看出zengl编程语言和大多数编程语言一样,每个表达式都以分号结尾。这让人想起一则笑话:"程序员和乞丐",一天一个程序员在调试BUG,一个乞丐在旁边看,突然乞丐说了一句:"这里少了一个分号"。记住这个笑话,以后就不会忘记这个分号了(当然并非所有的地方都要在末尾加分号, 在后面的章节中将要提到的条件选择语句,循环语句等一些特殊的地方就不需要,这个后面再说)。

    上面代码中单引号和双引号括起来的表示字符串,如上面的str = 'a is ' + a + ' b is ' + b; 和 print "美元:" + USD + " 汇率:" + rate + " 对应人民币:" + RMB; 在单引号字符串里如果还要加单引号,可以用斜杠转义如'i\'am zengl'代码中的a ,b ,str ,USD ,rate ,RMB等都是变量,变量是以字母开头的字母,数字,下划线等组成的标识符(大部分编程语言的变量都是这样定义的,除了PHP,PHP还需要以$字符开头)。

    代码中还涉及到了加法,乘法,赋值运算符,赋值运算符就是"=",也就是数学中的等号,但是不可以念成"等于",单个"="表示将右侧表达式计算的结果赋值给左侧的变量,两个"=="才用于判断左右两边的变量或表达式是否相等,这点在各种编程语言里都是一样的。

    这里简单的罗列下zengl支持的表达式运算符:加法"+",变量值加一"++",减法"-",变量值减一"--",乘法"*",除法"/",赋值运算符"=",加赋值"+=",减赋值"-=",乘赋值"*=",除赋值"/=",左括号"(",右括号")",分号";" ,逗号","(英文的逗号不是中文的大逗号) ,大于号">",小于号"<",等于号"==",不等于"!=",大于等于">=",小于等于"<=",逻辑且"&&",逻辑或"||",取反运算符"!",用于数组的左中括号界定符" [ " ,用于数组的右中括号界定符" ] ",取余运算符"%",取余再赋值"%=",冒号":",点运算符"."

    在这些运算符中,一个比较常用的是加法"+",加法运算符除了可以用于加法计算外,还可以将字符串和整数,浮点数等相互连接形成一个新的字符串,有点像javascript里的加号一样,如最后的print打印语句,就将"美元:" USD 变量等通过加号连接形成一个新的字符串,再打印出来,如果有过编程经验的人应该对这些很熟悉,另外zengl和PHP一样是泛类型,不需要在变量前指定变量的类型,也没有类型让你指定,直接赋值即可,例如a = 5;那么a就是整数5,如果是a=5.5那么a就是浮点数5.5,如果是a='hello world';那么a就是hello world的字符串类型,一切都在虚拟机内部自动转换,如果想将一个整数转为字符串,可以用后面提到的内建模块函数bltIntToStr(前提是通过use builtin导入了内建模块,这个后面再说),字符串要想转为浮点数或整数。可以减去一个浮点数如0.0就转为浮点数了或减去整数如0就转为整数了,例如a='3.14'; a-=1.0;系统会自动将'3.14'转为浮点数3.14再和1.0相减,最终的a就变为了浮点数2.14了。同理如果浮点数要转为字符串,可以直接和字符串相加例如空字符串(整数转字符串也可以用这种方法),如:

a=0; //也可以用个小数写在这里
a+=''; //将a变为字符串,这样下面才能正常比较
if(a=='hello')
    print 'you are right';
else
    print 'you are wrong';
endif

    如果没有a+='';这句,那么下面的判断就会出 错,因为a为整数0时和字符串hello进行比较时,zengl虚拟机内部会自动将字符串转为整数,而hello这个字符串转为整数就是0,因为 hello字符串开头没有任何数字,所以和0比较结果就相等,一相等就会打印出第一条语句,但这并不是我们想要的。

    所以通过a+='';将其转为'0'字 符串,那么就会按照字符串的比较方式进行比较,就不会出错了,虽然也可以用bltIntToStr函数来转,不过bltIntToStr只针对整数,无法 转浮点数,而通过加号则既可以转整数,又可以转浮点数,这点在给函数传参数的时候,在不知道参数类型时很管用。所以虽然zengl是泛类型,但是在写脚本的时候还是要有类型的概念,尤其是当逻辑出错时,就要考虑是否类型没转,不过大部分情况都不需要太注意,因为出现的情况较少,出了问题也容易处理。

    最后提下zengl脚本的注释语法,以'//'两个斜杠开头的就是单行注释,后面还会看到/*........*/包起来的多行注释。用法和C语言,PHP等很多语言一样。

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

上下篇

下一篇: 智能采集器v1.0.3

上一篇: 智能采集器v1.0.2 可采集全行业上万分类

相关文章

智能采集器 v1.2.0 公测版

zengl脚本语法 第六章内建函数枚举

zengl脚本语法 第三章函数篇

智能采集器v1.0.5

zengl脚本语法 第四章采集入门篇

智能采集器 v1.2.2共享版