Cadence-Skill-语法详解(中文)要点

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1常量、变量常量是它的值等于自身的表达式,如123,”abc”…变量是保存了其它值的表达式,如x=3,x即变量。算术与逻辑操作符函数名语法对应操作符DataAccessarrayrefa[index][]setarraya[index]=exprbitfield1xbitsetqbitfield1xbit=exprsetqbitfieldxmsb:lsb=exprquote'expr'getqqg.s.getqg-s-putpropqqg.s=expr,g-s=exprputpropqd~s,d~s=expr~Unarypreincrement++s++postincrements++++predecrement--s--postdecrements----minus-n-2not!expr!bnot~x~Binaryexptn1**n2**timesn1*n2*quotientn1/n2/plusn1+n2+differencen1-n2-leftshiftx1x2rightshiftx1x2lesspn1n2greaterpn1n2leqpn1=n2=geqpn1=n2=equalg1==g2==nequalg1!=g2!=bandx1&x2&bnandx1~&x2~&bxorx1^x2^bxnorx1~^x2~^borx1|x2|bnorx1~|x2~|3andx1&&x2&&orx1||x2||rangeg1:g2:setqs=expr=对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。示例lessp(31)=nil等同于31=nil预定义算术函数语法结果通用函数add1(n)n+1sub1(n)n–1abs(n)绝对值exp(n)自然对数的n次方log(n)max(n1n2...)min(n1n2...)mod(x1x2)取模运算round(n)sqrt(n)sxtd(xw)将x右扩展W个符号位zxtd(xw)和上面的功能相同,速度更快三角函数4sin(n),cos(n),tan(n)asin(n),acos(n),atan(n)随机数生成函数random(x)产生0~x-1的随机数srandom(x)初始化随机数生成函数的x位操作含义操作符位与&位或|位异或^左移位右移位取反~真值、假值真值,除了nil以为的值都是真值。假值,nil条件控制函数if,when,unless,condifif函数的语法结构5if(condition1then;当condition1为真值时执行代码块expAexpAelseif(condition2then;当condition2为真值时执行代码块expBexpBelse…expC));endifwhenwhen函数语法结构when(condition;当condition为真值时执行代码块expA,否则跳过expA);endwhenunlessunless语法结构unless(condition;当condition为假值时执行代码块expA,否则跳过6expA);endunlesscondcond语法结构cond((condition1expA...);当condition1为真值时执行代码块expA(condition2expB...);…(condition3expC...);…(texpN);之前的条件都不满足时默认执行expN);endcond[注]:;表示注释循环控制函数while,for,foreachwhilewhile语法结构while(conditionistrue;当condition为真值时反复执行代码块expA,否则结束循环expA7)forfor语法结构for(i15println(i))将输出12345foreachforeach是简化版的for,上面的例子用foreach写如下alist=‘(12345)foreach(itemalist8println(item))foreach通常用于操作列表,因为它会遍历列表的每一个元素。选择函数caseq的用法类似cond,功能也类似。caseq(var(condition1expA)(condition2expB)…);case语法结构循环结构中的局部变量使用关键字prog可以在循环结构中定义局部变量。关于prog的详细介绍请参考函数章节。返回函数表示返回值的关键字是return。return可以强制一个prog结构立即结束,送出返回值,忽略剩余的循环操作。示例prog(()for(i010when(oddp(i)return(i)9);when);for);prog这个for循环不会运行10次,首次oddp(i)为真值的时候循环就会结束。正则表达式在很多的skill应用中都会用到正则表达式,比如在一个字符串数组中查找带有关键字user的字符串。示例:lStr='(hellowhenuserusercomeffuserppuserduster);lRes=nilforeach(itemlStrif(rexMatchp(useritem)thenlRes=cons(itemlRes)println(item)))输出:whenuserusercomeppuserdlRes=(ppuserdusercomewhenuser).10这里的关键命令是rexMatchp,函数形式为rexMatchp(t_patternS_target),这个命令将在第二个参数中查找满足第一个参数(模式)的条件,如果找到返回真值,否则返回假值。正则表达式(pattern)的组成字符语法含义c匹配任意非特殊字符.匹配任意字符\用在特殊字符前面代表特殊字符本身,用在,,(,),and1,...,9,的含义在下面描述[c...]一对方括号中包含一些字符将匹配括号中的任意一个字符,如果第一个字符是^则表示不匹配括号中的所有字符,[a-z]表示匹配a到z之间的任一字符,-”表示范围。*用在一个以上描述的字符或pattern后表示匹配该字符或pattern0次或多次。+类似*,区别在于匹配至少一次\(..\)如果包含在这个符号中的字符串匹配上了,被匹配的字符可以被提取出来(最多支持9中匹配)\n和上一个符号对应,反斜杠后跟一个数字将可以提前到上一个符合保留的字符串\...\这个符号表示完全匹配一个字符串的开始和结尾rs2个正则表达式的组合将尽可能多的匹配r并匹配一个s^,$^表示字符串的开始,$表示字符串的结尾常用正则匹配函数11rexCompile,rexExecute,rexMatchp,rexSubstitute示例:使用rexCompile和rexExecute实现开头的示例lStr='(hellowhenuserusercomeffuserppuserduster);lRes=nilrexCompile(user)foreach(itemlStrif(rexExecute(item)thenlRes=cons(itemlRes)println(item)))将得到和前一个示例一样的结果。示例:使用rexSubstitute提取字符,在给定格式的列表中提取symbol名字和对应的坐标lStr=list(C17x855.00y-2790.00C676x3499.50y-2676.40Q690x3406.00y-2701.00“C666x3535.00y-3135.00”“C785x1929.00y-3750.00”“U628x3865.00y-2025.00”“C737x3010.00y-3155.00”“R754x2770.00y-2730.00”)rexCompile(\\([A-Z]+[0-9]+\\)x\\([0-9.-]+\\)y\\([0-9.-]+\\));\\(...\\)结构表示匹配的部分将可以用\\1..9提取出来;[A-Z]表示匹配A~Z的字符,+表示至少有一个这样的字符foreach(itemlStr12when(rexExecute(item)str1=rexSubstitute(\\1)str2=rexSubstitute(\\2)str3=rexSubstitute(\\3)printf(%s-%s-%s\nstr1str2str3)));将输出:C17-855.00--2790.00C676-3499.50--2676.40Q690-3406.00--2701.00C785-1929.00--3750.00U628-3865.00--2025.00C737-3010.00--3155.00R754-2770.00--2730.00更多示例,参考Skill正则表达式应用举例13Skill正则表达式应用举例处理DanglingLineReportallegro的report命令在reportdanglingline的时候也会同时reportdanglingvia出来。如果你record过script,就会发现产生danglinglinereport的allegro命令是reportsDanglingLinesReport。这个命令会在当前allegro工作的文件夹下产生一个叫dangling_lines.rpt的文件。;------------------------------------------------danglinglinePowerTOP*(7710.00-1865.00)to*(6705.00-1615.00)GNDBOTTOM*(7890.00-1774.00)to*(6575.00-2045.00)1V5INT3*(7860.00-1930.00)to*(6675.00-2660.00)12VINT5*(7830.00-1930.00)to*(6705.00-2660.00)DanglingViasGNDVIA24C12P(5505.00-320.00)1V5VIA24C12P(5465.00-320.00)现在我想用正则表达式来找到Via的信息,而排除line的以及一些其它的文字信息。下面是我想到的patten:14^[A-Z0-9_]+[]+[A-Z0-9_]+[]+([-0-9.]+[-0-9.]+)$在skill环境下简单试一下rexMatchp(^[A-Z0-9_*]+[]+[A-Z0-9_]+[]+([-0-9.]+[-0-9.]+)$“1V5VIA24C12P(5465.00-320.00)”)=trexMatchp(^[A-Z0-9_*]+[]+[A-Z0-9_]+[]+([-0-9.]+[-0-9.]+)$“1V5VIA24C12P(5465.00-320.00)to(5465.00-320.00)”)=nil所以是满足我们的要求的!完整的提取程序:axlShell(reports\DanglingLinesReport\)pDanglingFile=infile(./dangling_lines.rpt)dl_list=nilunless(getc(pDanglingFile)axlMsgPut(-----ErrorsfoundinDanglingLineReport-----)while(gets(dl_entrypDanglingFile)when(rexMatchp(^[A-Z0-9_*]+[]+[A-Z0-9_]+[]+([-0-9.]+[-0-9.]+).$dl_entry);;因为gets读进来的dl_entry还带了个\n,所以必须在之前定义的patten15后面再加上一个“.来匹配它dl_entry=buildString(parseString(dl_entry));;因为report结果里面的vianet,p

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功