日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 艾思后端實(shí)現(xiàn)


循環(huán)命令for:

for {初始化變量} {變量測(cè)試語(yǔ)句}  {變量操作}  {循環(huán)語(yǔ)句}

這里需要注意的是,所有的循環(huán)命令后面跟的測(cè)試、初始化語(yǔ)句以及循環(huán)語(yǔ)句等等,都是使用 大括號(hào)包含起來(lái),這也是大括號(hào)的一個(gè)重要的用途。

這里列出來(lái)的變量操作,指的是在循環(huán)語(yǔ)句結(jié)束時(shí)的變量操作。簡(jiǎn)單的for 語(yǔ)句示例如下,循環(huán)運(yùn)行直到測(cè)試條件不再滿(mǎn)足:

測(cè)試命令if:

測(cè)試表達(dá)式,為真則執(zhí)行命令,更加完備的格式是if-elseif-else 方式。當(dāng)然,和其他高級(jí)語(yǔ)言一樣,使用非完備格式從語(yǔ)法上講,是沒(méi)有任何問(wèn)題的,但是設(shè)計(jì)者應(yīng)該有策略保證表達(dá)式不被滿(mǎn)足的情形。

If是初始測(cè)試,elseif是不滿(mǎn)足的初始測(cè)試情況下再次測(cè)試,隨后的else是以上條件都不滿(mǎn)足時(shí),執(zhí)行的默認(rèn)命令,示例如下:

更加格式化的測(cè)試命令switch:

switch {測(cè)試策咯} {測(cè)試選項(xiàng)} {變量}  {測(cè)試結(jié)果的分支執(zhí)行語(yǔ)句}

Tcl里邊的switch是可以和if-elseif-else完全作對(duì)等替換的,switch的好處是,結(jié)構(gòu)化更好,對(duì)于簡(jiǎn)單的分支執(zhí)行語(yǔ)句的可視化很好。tcl這里給出多一個(gè)命令測(cè)試命令供用戶(hù)選用:

這里的測(cè)試策咯有三種:-exact, -glob 和-regexp,默認(rèn)是使用-exact來(lái)做匹配,示例如下:

Switch和if-elseif一樣,碰到第一個(gè)滿(mǎn)足條件就執(zhí)行,然后直接退出測(cè)試結(jié)構(gòu),語(yǔ)句執(zhí)行完成。

在switch里邊還有兩個(gè)特殊字符?!?-” 和“-“,看下面的實(shí)例:

第147行的“--“是測(cè)試策咯和選項(xiàng)的結(jié)束標(biāo)志,tcl就會(huì)認(rèn)為”--“后面跟的就是變量,使用”--”可以明確區(qū)分測(cè)試選項(xiàng)部分和變量部分。

第149行的“-“是一種更為簡(jiǎn)便的寫(xiě)法。意思是執(zhí)行的命令和下一句一致,所以能看到,最終的結(jié)果,是采用了第150行的命令進(jìn)行執(zhí)行,并非真實(shí)的執(zhí)行了第150行的命令。


循環(huán)控制命令

break:在循環(huán)體內(nèi),結(jié)束當(dāng)前循環(huán),并且終止循環(huán)體的剩余循環(huán)操作

continue:在循環(huán)體內(nèi),結(jié)束當(dāng)前循環(huán),立刻開(kāi)始循環(huán)體的下一個(gè)循環(huán)操作

可以通過(guò)它們,去干預(yù)內(nèi)部循環(huán)細(xì)節(jié),這個(gè)可以增加腳本的靈活性,break的示例如下:

注意觀察第24,25行,這里的打印,是在break語(yǔ)句干預(yù)下,所引起的循環(huán)操作變化。整個(gè)循環(huán)語(yǔ)句的最終結(jié)果如下,可以看到,由于break的介入y的值被鎖定到3:

類(lèi)似的,使用continue,會(huì)有另外一副畫(huà)面:

細(xì)心的讀者,可以從第62、63行可以看出continue的命令運(yùn)行方式了吧:當(dāng)前循環(huán)立刻結(jié)束,立刻啟動(dòng)下次循環(huán)。

使用continue的最終結(jié)果,也稍有不同,大家再體會(huì)一下

循環(huán)往復(fù)的while:

while {測(cè)試命令} {循環(huán)腳本},

和if、for比較,while的強(qiáng)大之處是它的無(wú)限往復(fù)功能:只要條件滿(mǎn)足,永遠(yuǎn)都會(huì)執(zhí)行循環(huán)腳本,當(dāng)且僅當(dāng)測(cè)試條件不滿(mǎn)足,才會(huì)結(jié)束while,腳本向下繼續(xù)運(yùn)行,如果是在等待某個(gè)機(jī)制的情形下,while可以很好的滿(mǎn)足這種需求,間接的,這也可以演化成一種交互式的操作;其次也可以作為迭代的一種控制。使用好while,可以讓腳本運(yùn)行效率更高,具體示例如下

當(dāng)x=3的時(shí)候,while的判斷不成立,這時(shí)候才會(huì)運(yùn)行while后面的語(yǔ)句。


列表循環(huán)foreach:

foreach {變量名} {列表} {循環(huán)腳本},

這時(shí)候foreach會(huì)把列表里的每一個(gè)值帶入到變量里邊,然后運(yùn)行循環(huán)腳本,當(dāng)然,循環(huán)腳本里邊不一定必須要出現(xiàn)變量名:

還有更高級(jí)的用法是:

foreach {列表變量} {列表}  {列表變量} {列表}  {循環(huán)腳本}

foreach會(huì)把列表里的變量進(jìn)行羅列,然后逐一進(jìn)行賦值直到?jīng)]有列表的內(nèi)容全部被賦值結(jié)束。

仔細(xì)看下面的這個(gè)示例,foreach把列表變量{I j}和{k l m},先展開(kāi)成為獨(dú)立的變量,而后盡量與后面的列表完成一一匹配,目標(biāo)是打印完所有的賦值后,結(jié)束foreach,這里的示例如下:

后端應(yīng)用實(shí)踐:

實(shí)際的工作中,foreach是一個(gè)常用的命令,再加上對(duì)文件讀取訪(fǎng)問(wèn),可以使用簡(jiǎn)單的tcl腳本實(shí)現(xiàn)比較復(fù)雜的操作,例如:讀入timing report ->  使用foreach對(duì)文件內(nèi)容進(jìn)行解析 ->  滿(mǎn)足某種條件下的觸發(fā)操作命令:

在PT里邊,可以使用命令生成max_delay類(lèi)型的violation結(jié)果,

這時(shí)候,可能需要抽取出所有violation對(duì)應(yīng)的startpoint,下邊的這個(gè)腳本就可以快速的實(shí)現(xiàn)這個(gè)功能:

最后的得到的結(jié)果如下,抽取結(jié)果的打印格式是:startpoint endpoint slack


可以看到,工具命令結(jié)合tcl的控制語(yǔ)句,可以快速讀入report 結(jié)果,然后進(jìn)行處理,從而得到數(shù)據(jù)庫(kù)里的需要的信息。

這里涉及到了一個(gè)新的課題,就是文件內(nèi)容的訪(fǎng)問(wèn),這正是下期講座的討論主題之一,敬請(qǐng)期待。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉