作者:陈旭盛
关键词:TCL
摘要:本文是TCL教材的第三稿,前两稿分别是《TCL的使用》和《TCL培训教程》.这一稿加入了不少内容,是北研TCL兴趣小组共同努力的结果.本文详细介绍了TCL的各个方面,特别对利用C\C++语言扩展TCL命令作了详细论述.本文附有大量实例.
缩略语清单:TCLToolCommandLanguage一种脚本语言
参考资料清单名称作者编号发布日期查阅地点或渠道出版单位TclandTkToolKitJohnK.Ousterhout---自己的图书AddisonWesleyPublishingCommpanyTCL的使用陈旭盛自写文档TCL培训教程陈旭盛自写文档1.引言TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage).它提供了通用的编程能力:支持变量,过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集.
由于TCL的解释器是用一个C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,可以很容易就在C\C++应用程序中嵌入TCL,而且每个应用程序都可以根据自己的需要对TCL语言进行扩展.我们可以针对某一特定应用领域对TCL语言的核心命令集进行扩展,加入适合于自己的应用领域的扩展命令,如果需要,甚至可以加入新的控制结构,TCL解释器将把扩展命令和扩展控制结构与固有命令和固有控制结构同等看待.扩展后的TCL语言将可以继承TCL核心部分的所有功能,包括核心命令,控制结构,数据类型,对过程的支持等.根据需要,我们甚至可以屏蔽掉TCL的某些固有命令和固有控制结构.通过对TCL的扩展,继承或屏蔽,用户用不着象平时定义一种计算机语言那样对词法,语法,语义,语用等各方面加以定义,就可以方便的为自己的应用领域提供一种功能完备的脚本语言.
TCL良好的可扩展性使得它能很好地适应产品测试的需要,测试任务常常会由于设计和需求的改变而迅速改变,往往让测试人员疲于应付.利用TCL的可扩展性,测试人员就可以迅速继承多种新技术,并针对产品新特点迅速推出扩展TCL命令集,以用于产品的测试中,可以较容易跟上设计需求的变化.
另外,因为TCL是一种比C\C++语言有着更高抽象层次的语言,使用TCL可以在一种更高的层次上编写程序,它屏蔽掉了编写C\C++程序时必须涉及到的一些较为烦琐的细节,可以大大地提高开发测试例的速度.而且,使用TCL语言写的测试例脚本,即使作了修改,也用不着重新编译就可以调用TCL解释器直接执行.可以省却不少时间.TCL目前已成为自动测试中事实上的标准.
2.语法简单的讲,TCL语言的语法实际上是一些TCL解释器怎样对TCL命令进行分析的规则的集合.
2.1脚本,命令和单词符号一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:
seta1setb2
或
seta1;setb2
TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开.
TCL解释器对一个命令的求值过程分为两部分:分析和执行.在分析阶段,TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,TCL解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理.
2.2置换(substitution)注:在下面的所有章节的例子中,%为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果.//后面是我自己加上的说明,不是例子的一部分.
TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:
%setx10//定义变量x,并把x的值赋为%setyx+//y的值是x+,而不是我们期望的x+
上例的第二个命令中,x被看作字符串x+的一部分,如果我们想使用x的值10,就必须告诉TCL解释器:我们在这里期望的是变量x的值,而非字符x.怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能.
TCL提供三种形式的置换:变量置换,命令置换和反斜杠置换.每种置换都会导致一个或多个单词本身被其他的值所代替.置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套.
2.2.1变量置换(variablesubtitution)变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中.例如:
%sety$x+//y的值是10+,这里x被置换成它的值+
这时,y的值还不是我们想要的值,而是10+,因为TCL解释器把10+看成是一个字符串而不是表达式,y要想得到值,还必须用命令置换,使得TCL会把10+看成一个表达式并求值.
2.2.2命令置换(白癜风复发难治海南最好的白癜风医院