静态时序分析(Static Timing Analysis)---02 Tcl

一.置换

TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换

TCL置换分为以下三类:

        变量置换$

        命令置换[ ]

        反斜杠置换 \

$表示变量置换:

        TCL解释器会将认为$后面为变量名,将变量置换成它的值

[ ] 表示命令置换:

        [ ] 内是一个独立的TCL语句

\ 表示反斜杠置换:

        换行符、空格、[ 、$等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符

\t 表示TAB

\n 表示换行符

“ ” TCL解释器对双引号中的$和[ ]符号会进行变量置换和命令置换(如下图输出为2.5)

{ } 而花括号中,所有特殊字符都将成为普通字符,TCL解释器不会对其作特殊处理(看输出理解)

#表示注释

二.变量,数组,列表

2.1 变量

        变量就是某个容器的名称,可以存储一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。

定义:set  变量名 变量值

取值:$变量名

变量后面加“_1”,set a ,但是a_1没有定义,则$a_1无法取值。

2.2数组

        TCL中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性有其独立的值。

定义:set 数组名(元素名) 值

取值:$数组名(元素名)

array:可以使用array指令获取数组信息

2.3列表

        列表是标量的有序集合

定义:set 列表名 {元素1 元素2 元素3.......}

取值:$列表名

TCL中一系列十分方便的列表操作命令

---contact

语法格式:concat 列表1 列表2

功能:将列表1和列表2合并

---llength

语法格式:llength列表

功能:返回列表中的元素个数

---lindex

语法格式:lindex 列表 n

功能:返回列表中第n个元素(从0开始计数)

---lappend

语法格式:lappend 列表 新元素

功能:列表末尾加入新元素

lappend扩展:lappend一个列表

---lsort

语法格式:lsort 开关 列表

功能:将列表按照一定的规则排序

开关:缺省时默认按照ASCII码进行排序

        -real 按照浮点数值大小排序

        -unique 唯一化,删除重复元素

综合问题:

如何对一个很长的列表取最后一个元素:

如何得到列表中的最小值:

数学运算指令:expr

语法格式:expr 运算表达式

功能:将运算表达式求值

在TCL运算中遇到以下问题:

因为表达式5/2中5和2都是整数型参数,默认运算结果也是整数型。

若想进行浮点运算,只要将其中任意一个数值,写成浮点形式(有小数点)即可

三.控制流

控制流--if

语法格式:

if(判断条件){

脚本语句

}else if(判断条件){

脚本语句

}else{

脚本语句

}

注意:脚本语句中的'{'一定要写在上一行,因为如果不这样,TCL解释器会认为if命令在换行符处已结束,下一行会被当做新的命令。从而导致错误。

循环指令---foreach

语法格式:foreach 变量 列表 循环主体

功能:从第0个元素开始,每次按顺序取得1列表的一个元素,将其赋值给变量,然后执行循环主体一次,直到列表最后一个元素

上图的执行顺序:

将列表中第0个元素3赋值给变量i --- 进入循环,打印 i 值为3 --- 将列表中第1个元素2赋值给变量i --- 进入循环,打印 i 值为2 --- 将列表中第3个元素1赋值给变量i --- 进入循环,打印 i 值为1 --- 退出循环

循环控制指令---break

语法格式:break

功能:结束整个循环过程。并从循环中跳出

循环控制指令---continue

语法格式:continue

功能:仅结束本次循环(注意和break的区别)

循环控制指令---while

语法格式:whiel 判断语句 循环主体

功能:如果判断语句成立(返回值非0),就运行脚本,直到不满足判断条件停止循环,此时while命令中断并返回一个空字符。

循环控制语句---for

语法格式:for 参数初始化 判断语句 重新初始化参数 循环主体

功能:如果判断语句返回值非0就进入循环,执行循环主体后,再重新初始化参数,然后再次进行判断,直到判断语句返回值为0,循环结束。

四.过程函数

过程函数---proc

语法格式:proc 函数名 参数列表 函数主体

功能:类似于C语言中的函数。即用户自定义功能,方便多次调用。

全局变量和局部变量

全局变量:在所有过程之外定义的变量

局部变量:对于在过程中定义的变量,因为只能在过程中被访问,并且当过程退出时会被自动删除

指令global,可以在过程内部引用全部变量

五.正则匹配

定义:正则表达式是一种特殊的字符串模式,用来去匹配符合规则的字符串

正则表达式的\w,用来匹配一个字母、数字、下划线

正则表达式的\d,用来匹配一个数字

\w\w\w\d\d\d这种写法过于繁琐,可以用代替重复的量词进行表示

在TCL中常用的三种量词

对字符串 abc123

正则表达式 \w+\d+ 或者 \w*\d*

锚位:用来指示字符串当中的开头和结尾的位置,使我们能够匹配到正确的字符

其他字符

常用的其他字符:\s 和 .

\s 表示空格

. 表示任意一个字符

对于不确定的字符可以用 . 表示

例如已知字符串为“xxx空格xxx空格xxx”(x为未知字符)

用 .+\s.+\s.+ 匹配

正则匹配指令---regexp

格式语法:regexp?switches?exp string?matchVar?subMatchVar ...?

功能:在字符串中使用正则表达式匹配

--匹配字符串“abc456”

        regexp {\w+\d+} "abc456"

--如何匹配一个以数字开头并且以数字结尾的字符串?
        regexp {^\d.*\d$} "1 dfsal 1"

将捕获到的值给total ---- (空格(数字)任意字符)

将捕获到的值里面的()的值给age

将捕获到的值给total ---- ((字母开头)空格 字母 空格 (数字) 任意字符 )

将捕获到的值的第一个()里面的给name

将捕获到的值的第二个()里面的给age

六.文本处理

---open

---gets

--close

---整个读入文件的过程

---完整写入文件过程

Question:

Answer:

sum:定义和的变量

取出slack后面的指,就需要正则表达式:

        regexp {^Slack\s+=\s+(-?\d+\.?\d+)}

参考数目:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值