您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > EDA工具课程之TCL 2
LOGOEDA技术实验工具命令语言(TCL)ToolCommandLanguage一、TCL简介概述Tcl(称为“工具命令语言”“ToolCommandLanguage”)是一种脚本语言。由JohnOusterhout创建。TCL很好学,功能很强大。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。TCL念作tickle.特性*所有的数据类型都可以看作字符串,具有强大的字符处理能力。*语法规则相当简单。*很容易用C,C++,或者Java扩展。*解释语言,代码能够动态的改变。*平台无关。Win32,UNIX,Mac上都可以跑。*代码紧凑,易于维护。TCL是当今EDA软件系统中普遍采用的一种脚本语言,如SynopsysDC中的dc_shell-t和SynopsysPrimeTime中的pt_shell就是基于这种脚本的,实际上TCL已经成为了一种工业标准。二、TCL的语法语法简单来说,TCL的语法就是TCL解释器对TCL命令进行分析的规则的集合。TCL的脚本可视为一个包含许多TCL指令(TCLcommand)的程序。一个TCL指令的基本语法为:commandarg1arg2arg3….在TCL语言中,每行指令的第一个单字为指令名称空格符用来分隔指令名称与各个个别的参数,个别指令的分隔是以分号与换行符号作为分隔符。一个参数如果超过一个英文单字(字符串中间穿插空白或TAB键),可用双引号与大括号将这些元素组成(grouping)单一一个参数。使用双引号与大括号的差别,在于TCL针对双引号中的字符串会做置换处理(substitution),例如变量值的代换或是执行包含于字符串中的TCL指令(使用中括号来表示),而对于大括号所括住的内容TCL则不会有这些置换处理。二、TCL的语法举例说明:setx4sety6putsx显示结果xputs$x显示结果4puts$x+$y=[expr$x+$y]“显示结果4+6=10puts{$x+$y=[expr$x+$y]}显示结果$x+$y=[expr$x+$y]二、TCL的语法下表所列的符号在TCL语言里有特殊的意义:置换符号(substitutionsymbols)$:变量值置换符号。$符号用来取出指定变量的值。底下利用set指令设定x变量的值,并用puts指令输出x的内容:setx5puts$x如上列最后一行程序代码,取出变数值时需在变量名称前加上$符号。[]:命令置换符号。TCL将中括号中的内容视为一个指令,会执行其中的指令并将结果传回。puts$x+$y=[expr$x+$y]在做完x与y两个变数的置换后,TCL解译器遇到中括号认为其中为另一个可执行的指令,指令名称为expr。在执行expr指令前,TCL先将x与y值置换后,传递给expr指令并呼叫执行之。expr指令用来做数学式子的运算,会负责剖析参数并做数学运算。二、TCL的语法群组(groupingsymbols)“”:双引号可将多个元素组成单一一个参数,引号内的内容会被TCL进行置换处理,包括变量置换与命令置换。{}:大括号的功能与双引号相同,但TCL不会对括号中的内容做任何解释或处理,会照将括号中的内容视为一个参数,照本宣科原原本本地传递给指令去处理。例如Demo1.tclL6:puts{$x+$y=[expr$x+$y]}因为TCL对大括号中的内容不做任何处理,因此它的输出为$x+$y=[expr$x+$y]。另外,TCL不会将大括号中的换行符号视为一个指令的结束,如果一个指令的参数很长时,我们就可以利用大括号这样写,把换行符号当成是参数的一部份:puts{$x+$y=[expr$x+$y]}二、TCL的语法其他\:和Cbase语言一样,反斜线可将特殊的字符做跳脱处理。例如\n代表换行符号。在TCL语言里,如果一个指令超过一行,亦可在行尾使用反斜线做为续行的符号(VB指令如果超过一行,则是在行尾用底线符号代表续行)。;或者TAB键:代表一个TCL指令的结束符号。#:批注符号。通常我们会在一行程序代码的第一个字符打上#符号,以代表本行程序为批注。注意!如果在#符号前有TCL指令,必须像这样做:putshello;#hereiscomment在#符号前加上一个分号代表前面指令的结束。如果不这么做,那TCL便会把#视为一个参数丢给puts指令去做处理。二、TCL的语法变量TCL变量的可以随时建立不用事先宣告,变量名称的取法也没有任何限制,所以可以使用任何字符来为变量命名,甚至变量名跟指令名称相同也没问题。使用时只有一点要注意的,就是TCL是大小写有别的语言。通常,我们以set指令来设定变量值:setx5sety6setPI3.14setPI*26.28;#注意!变量名称是PI*2puts$PI*2setPITCL的set指令除了设定变量值的用途外,也可以用来取出变量的内容,如上列程序最后一行使用set指令取出PI的值(注意!这边不用在变量名称前加上$符号)。unset指令用来删除一个或多个变量,来释放内存空间:unsetxyPI二、TCL的语法置换与群组处理(SubstitutionandGrouping)底下是TCL置换处理与群组的几点规则整理:1、TCL指令的参数是以空格符分隔,可以使用双引号或大括号将多个元素组成一个参数。如果是以大括号组出一个参数,TCL不会对括住的内容进行任何置换,在对应的结束大括号出现前,任何字符都将视为参数的一部份,包含换行符号、分号或是内部巢状的大括号。2、如果是以双引号组出一个参数,则在对应的结束双引号出现前,双引号中的内容会被TCL进行置换动作。3、如果参数或是双引号内的单字是以变量符号$为开头,则TCL为会进行变量的置换。4、如果参数或是双引号中有中括号,则在对应的中括号出现前,TCL会对中括号中的内容进行指令的置换。5、因为TCL是以空格符作为参数分隔符,因此要避免下列的错误:if{$x1}{puts$x}需要在此加上一个空格符,隔开if指令的第二及第三个参数。二、TCL的语法TCL的数学运算符-~!「减号(Unaryminus)」/「NOT位运算(Bit-wisenot)」/「NOT布尔逻辑运算(Logicalnot)」。这些运算不可以用来操作字符串(string)操作数,而且「NOT位运算」只限于整数的操作。*/%「乘(Multiply)」/「除(divide)」/「余数(remainder)」。这些运算不可以用来操作字符串(string)操作数,而且「余数」运算只限于整数的操作。+-「加(Add)」与「减(subtract)」。限用于数值操作数。「左右移位运算(ShiftLeft/Right)」。运算只限于整数的操作。==布尔运算「小于(less)」/「大于(greater)」/「小于等于(lessthanorequal)」/「大于等于(greaterthanorequal)」。如果条件成立这些运算子会产生「1」的结果,否则产生「0」。二、TCL的语法TCL的数学运算符==!=布尔运算「等于(equal)」/「不等于(notequal)」。每个运算会产生0/1的结果。可适用于任何操作数。&「AND位运算(Bit-wiseand)」。限于整数的操作。^「XOR位运算(Bit-wiseexclusiveor)。限于整数的操作。&&「AND布尔逻辑运算(Logicaland)」。如果参与的两个操作数都非零的话会得到1的结果,否则的话会得到0。限用于数值操作数(不限整数或小数)。||「OR布尔逻辑运算(Logicalor)」。如果参与的两个操作数都是零的话会得到0的结果,否则的话会得到1。限用于数值操作数(不限整数或小数)。x?y:z如果x为真时传回y否则传回z三、数据形态TCL语言的基本数据型态有:stringlistarrayhandle三、数据形态String字符串数据型态字符串是TCL语言最基本的数据型态,常见的字符串处理指令有:string、append、format、scan以及binary。例如使用string指令来计算指定字符串的长度:%setname“ZhangBin”%stringlength$name=11其中string指令的第一个参数代表对字符串的操作方式。三、数据形态string指令用法stringbytelengthstr传回字符串的字节数(以UTF-8encoding计算),传回值可能会跟计算字符数的stringlength有所不同stringcompare?-nocase??-lengthlen?str1str2比较两字符串的内容,若相同传回『0』、其它的传回『1』。-nocase:表示不分大小写例:%stringcompare–nocaseRickrick=0-length:可以指定要比较的字符串长度例:stringcompare–length3rickricp=0三、数据形态string指令用法stringequal?-nocase?str1str2比较str1和str2的内容,若相同传回『1』、否则传回『0』stringfirstsubStringstringstartIndex传回string中相符子字符串第一个出现的位置,若无则传回『-1』。startIndex代表从字符串指定位置开始搜寻子字符串。例:%stringfirstrickilovericktoo=5三、数据形态string指令用法stringindexstringcharIndex传回index位置所在的字符,index的计算从『0』开始,使用『end』代表最后一个字符或使用『end-N』代表相对于最后一个字符的位置。例:%stringindexrick2=c%stringindexrickend=k%stringindexrickend-2=i三、数据形态string指令用法stringlaststring传回string中最后一个与子字符串相符的位置,若无则传回『-1』。startIndex代表从字符串指定位置开始搜寻子字符串。例:%stringfristrickrickANDrick=0%stringlastrickrickANDrick=7stringlengthstring传回字符串的字符数三、数据形态string指令用法stringmap?-nocase?charMapstring依据charMap中的字符串对应表,更换字符串中的内容。例:%stringmap{ic}rick=rcck%stringmap{rija}rick=jack%stringm
本文标题:EDA工具课程之TCL 2
链接地址:https://www.777doc.com/doc-3639043 .html