CadenceSkill语法详解(中文)

上传人:痛*** 文档编号:90516140 上传时间:2022-05-15 格式:DOC 页数:39 大小:94KB
收藏 版权申诉 举报 下载
CadenceSkill语法详解(中文)_第1页
第1页 / 共39页
CadenceSkill语法详解(中文)_第2页
第2页 / 共39页
CadenceSkill语法详解(中文)_第3页
第3页 / 共39页
资源描述:

《CadenceSkill语法详解(中文)》由会员分享,可在线阅读,更多相关《CadenceSkill语法详解(中文)(39页珍藏版)》请在装配图网上搜索。

1、 常量、变量常量是它的值等于自身的表达式,如123,”abc”变量是保存了其它值的表达式,如x=3, x即变量。算术与逻辑操作符函数名 语法 对应操作符 Data Accessarrayref aindex setarray aindex = exprbitfield1 x setqbitfield1 x=exprsetqbitfield x=exprquote expr getqq g.s .getq g-s -putpropqq g.s=expr, g-s=exprputpropq ds, ds =expr Unarypreincrement +s +postincrement s+ +p

2、redecrement -s -postdecrement s- -minus -n -not !expr !bnot x Binaryexpt n1 * n2 *times n1 * n2 *quotient n1 / n2 /plus n1 + n2 +difference n1 - n2 -leftshift x1 x2 x2 lessp n1n2 n2 leqp n1=n2 =n2 =equal g1 = g2 =nequal g1 != g2 !=band x1 & x2 &bnand x1 & x2 &bxor x1 x2 bxnor x1 x2 bor x1 | x2 |bnor

3、 x1 | x2 |and x1 & x2 & or x1 | x2 |range g1 : g2 :setq s = expr =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。示例 lessp(3 1)=nil 等同于 3nil预定义算术函数语法 结果 通用函数add1(n) n + 1sub1(n) n 1abs(n) 绝对值exp(n) 自然对数的n次方log(n) max(n1 n2 .)min(n1 n2 .)mod(x1 x2) 取模运算round(n)sqrt(n)sxtd(x w) 将x右扩展W个符号位zxtd(x w) 和上面的功能相同,速度更快

4、 三角函数sin(n),cos(n),tan(n)asin(n),acos(n),atan(n) 随机数生成函数random(x) 产生0x-1的随机数srandom(x) 初始化随机数生成函数的x位操作含义 操作符位与 &位或 |位异或 左移位 右移位 (ppuserd usere whenuser).这里的关键命令是rexMatchp,函数形式为rexMatchp(t_pattern S_target),这个命令将在第二个参数中查找满足第一个参数(模式)的条件,如果找到返回真值,否则返回假值。 正则表达式(pattern)的组成字符语法 含义 c 匹配任意非特殊字符 . 匹配任意字符 用在

5、特殊字符前面代表特殊字符本身,用在 , (, ), and 1,.,9, 的含义在下面描述c. 一对方括号中包含一些字符将匹配括号中的任意一个字符,如果第一个字符是 则表示不匹配括号中的所有字符,a-z表示匹配a到z之间的任一字符,-”表示X围。 * 用在一个以上描述的字符或pattern后表示匹配该字符或pattern0次或多次。 + 类似*,区别在于匹配至少一次(.) 如果包含在这个符号中的字符串匹配上了,被匹配的字符可以被提取出来(最多支持9中匹配)n 和上一个符号对应,反斜杠后跟一个数字将可以提前到上一个符合保留的字符串 这个符号表示完全匹配一个字符串的开始和结尾rs 2个正则表达式的

6、组合将尽可能多的匹配r并匹配一个s, $ 表示字符串的开始, $表示字符串的结尾 常用正则匹配函数rexpile,rexExecute,rexMatchp,rexSubstitute 示例: 使用 rexpile和rexExecute实现开头的示例lStr = (hello whenuser usere ffus er ppuserd uster); lRes = nilrexpile(user)foreach( item lStr if( rexExecute(item) then lRes = cons( item lRes) println(item) )将得到和前一个示例一样的结果。示

7、例: 使用rexSubstitute提取字符, 在给定格式的列表中提取symbol名字和对应的坐标lStr = list(C17x855.00y-2790.00 C676x3499.50y-2676.40 Q690x3406.00y-2701.00 “C666x3535.00y-3135.00”“C785x1929.00y-3750.00”“U628x3865.00y-2025.00”“C737x3010.00y-3155.00”“R754x2770.00y-2730.00”)rexpile( (A-Z+0-9+)x(0-9.-+)y(0-9.-+) ; (.) 结构表示匹配的部分将可以用1.

8、9提取出来; A-Z表示匹配AZ的字符,表示至少有一个这样的字符foreach( item lStr when( rexExecute( item ) str1 = rexSubstitute( 1 ) str2 = rexSubstitute( 2 ) str3 = rexSubstitute( 3 ) printf(%s%s%sn str1 str2 str3) );将输出:C17855.00-2790.00C6763499.50-2676.40Q6903406.00-2701.00C7851929.00-3750.00U6283865.00-2025.00C7373010.00-3155

9、.00R7542770.00-2730.00 更多示例,参考Skill正则表达式应用举例Skill正则表达式应用举例处理Dangling Line Reportallegro的report命令在report dangling line的时候也会同时report dangling via 出来。如果你record过script,就会发现产生dangling line report的allegro命令是reports Dangling Lines Report。这个命令会在当前allegro工作的文件夹下产生一个叫dangling_lines.rpt的文件。;- Power TOP *(7710.

10、00 -1865.00) to *(6705.00 -1615.00) GND BOTTOM *(7890.00 -1774.00) to *(6575.00 -2045.00) 1V5 INT3 *(7860.00 -1930.00) to *(6675.00 -2660.00) 12V INT5 *(7830.00 -1930.00) to *(6705.00 -2660.00) GND VIA24C12P (5505.00 -320.00) 1V5 VIA24C12P (5465.00 -320.00)现在我想用正则表达式来找到Via的信息,而排除line的以及一些其它的文字信息。下面是

11、我想到的patten: A-Z0-9_+ +A-Z0-9_+ +(-0-9.+ -0-9.+)$在skill环境下简单试一下rexMatchp( A-Z0-9_*+ +A-Z0-9_+ +(-0-9.+ -0-9.+)$ “ 1V5 VIA24C12P (5465.00 -320.00)” )=trexMatchp( A-Z0-9_*+ +A-Z0-9_+ +(-0-9.+ -0-9.+)$ “ 1V5 VIA24C12P (5465.00 -320.00)to(5465.00 -320.00)” )=nil所以是满足我们的要求的!完整的提取程序:axlShell(reports Dangli

12、ng Lines Report)pDanglingFile=infile(./dangling_lines.rpt)dl_list =nilunless(getc( pDanglingFile )axlMsgPut(- Errors found in Dangling Line Report -)while(gets( dl_entry pDanglingFile )when(rexMatchp( A-Z0-9_*+ +A-Z0-9_+ +(-0-9.+ -0-9.+).$ dl_entry );因为gets读进来的dl_entry还带了个n,所以必须在之前定义的patten后面再加上一个“.

13、来匹配它 dl_entry =buildString(parseString(dl_entry) );因为report结果里面的via net, padstack以及坐标间隔很大,这个让间隔变小一点 dl_list =cons( dl_entry dl_list )close(pDanglingFile) dl_list =sort(dl_list nil);根据字符串大小的默认排序)这样就得到了dangling via的列表了。接下来的操作就随个人了,比如把它显示到一个form里面。另一个例子From: C803.1 (3313.000 2553.921) To: U1802.C3 (732

14、1.024 -1296.024)rexpile(-0-9.+ -0-9.+)(+(-0-9.+ -0-9.+)这样就可以得到带括号的坐标rexpile(-0-9.+ -0-9.+)(+(-0-9.+ -0-9.+)得到不带括号的坐标特殊字符,注释,空格,圆括号和其它标记法的使用 特殊字符SKill中的特殊字符列表字符 全名 含义 反斜杠 辅助输出特殊字符() 圆括号 组织数据列表和调用函数列表 中括号 数组索引,超级右中括号 大括号 使用progn时组织一系列表达式 单引号 单引号中的表达式不会被解析 双引号 字符串分界符, 逗号 列表中可选的元素分界符; 在反引号作用X围内使用强制表达式解析

15、; 分号 行注释: 冒号 位分隔符,X围操作. 点号 getq操作+,*,/ 算术运算 算术运算符; 同时/*和*/组合也用于多行注释!,&,| 逻辑运算 逻辑运算符,= 关系运算 比较运算,赋值以及位运算# 用在第一列表示信号的特别解析 用在第一个字符表示保留字;另外在反引号作用X围内使用将强制表达式解析? 问号 如果是第一个字符表示关键字 反引号 引号内的表达式不被解析% 百分号 $ 保留为将来使用注:输出这些特殊字符都需要在字符前加。 注释 行注释方法, 使用分号;,注释X围在分号当前行。 多行注释,使用/*和*/对,注释X围在这这对符号内。 空格,空格的限制比较少,只是要注意下面几个情

16、况 函数名和跟在后面的圆括号之间不能有空格,如max(4 2)是对的,而max (4 2)则是错的; 表示负数的符号-和数字之间不能有空格,如-5, -(a*b)有效,而- 5,- (a*b)无效; 表示算术运算的+ - * /在2个数字之间的位置要对称,如a - b, a-b有效,而a -b无效。 圆括号 圆括号在skill中用于函数调用,分隔多个表达式,控制表达式的解析顺序 skill中调用函数有2种方式,max(a b)和(max a b)都有效。 超级右中括号,不推荐使用 在使用了很多(的表达式后,可以用来代表很多个用于结尾的)。 如f1( f2( f3( f4( x ) ) ) )等

17、效于f1( f2( f3( f4( x 。 反引号,逗号和逗号加 示例1. y = 1 (x y z) = (x y z) ;反引号使得表达式不被解析,所以其中的y不会被1代替 (x ,y z) = (x 1 z) ;增加一个逗号在反引号表达式中,逗号后面的表达式将被解析 示例2. x = 1 y = (a b c) (,x ,y z) = (1 (a b c) z);逗号后的表达式都被解析了 (,x ,y z) = (1 a b c z) ;,的作用和逗号一样,只是被解析对象是列表,且解析出来的元素代替了原来的列表 续行符 使用可以让在一行的文字多行表示, 如 string = This i

18、s a test. = This is a test. 初始化列表的最大长度6000,但是在程序运行中列表的长度无限制。文件系统接口 路径 绝对路径:Unix中以/开始的路径,Windows中以磁盘C:, D:,.开始的路径 相对路径,不是绝对路径的情况就是相对路径 以/开始的路径表示被查询的路径是用户的home文件夹; 以username开始的路径,如果username正好是一个用户的名字,那么被查询的路径将是该用户的home文件夹; 以./开始的路径表示被查询的位置是当前的工作目录 以./开始的路径表示被查询的位置为当前工作目录的父文件夹 Skill路径 skill支持用户定义若干不同的路

19、径来存放skill源文件,并通过skill的路径管理函数来设置各个路径的访问顺序。如果同一个文件在不同路径下都存在,按照先到先得原则,即使用第一个被找到的文件。 设置skill查询路径的函数setSkillPath, 如setSkillPath(. C:/Skill),就设置了3个skill查询路径,先后顺序分别为.当前工作路径,home文件夹,C:/Skill用户自定义文件夹。 获取skill查询路径列表的函数getSkillPath,如setSkillPath(. C:/Skill); getSkillPath()=(. C:/Skill) 安装路径 获取安装路径函数getInstallP

20、ath,如getInstallPath()=C:/Cadence/Psd16.2 检测文件状态 检测文件是否存在函数isFile,isFileName 检测文件夹是否存在函数isDir 检测文件或文件夹的是否可以被读取的函数isReadable 检测文件或文件夹的是否可以被写入的函数isWritable 路径操作 生成和删除文件夹 createDir(arg), 如createDir(c:/temp/skill),将在c:/temp下创建一个skill文件夹; deleteDir(arg),如deleteDir(c:/temp/skill),将删除这个skill文件夹,如果这是个空文件夹,且用

21、户具有删除它的权限。 删除文件函数deleteFile 获取指定文件夹下所有文件名函数getDirFiles 获取当前工作目录getWorkingDir 改变工作目录changeWorkingDir端口所有数据的输入输出都是经由一个被称为端口的东西实现的。 预定义的标准端口端口名 作用piport 标准输入端口,等同于C中的stdinpoport 标准输出端口,等同于C中的stdouterrport 错误输出端口,等同于C中的stderrptport 跟踪信息端口,等同于C中的stderr 打开端口 打开一个文件读取端口infile infile(/test/input.il)= port:/

22、test/input.il 打开一个文件输出端口outfile p = outfile(/test/out.il w) = port:/test/out.il 关闭端口close p = outfile(/test/out.il w) = port:/test/out.il close(p)I/O 输出 非格式化输出 print(hello) ; 输出 hello println(hello) ; 输出 hello加换行 格式化输出常见格式化输出规X格式 参数类型 输出结果%d fixnum 十进制整数%o fixnum 八进制整数%x fixnum 十六进制整数%f flonum 浮点数,格

23、式为-ddd.ddd%e flonum 浮点数,格式为-d.ddde-ddd%g flonum 不改变浮点数精度的情况下,以最少的空间表示%s string, symbol 输出字符串%c string, symbol 输出第一个字符%n fixnum, flonum 数字%L list 数据的默认形式输出%P list 点Point%B list Box示例printf(hello, %sWilly)=hello, Willyprintf(%d = %x2020)=20 = 14;把一个十进制书转换成16sprintf( sMsg hello, %sYou)= sMsg=hello, You

24、fprintf( port 1st line, %d words10); 输出1st line, 10 words到文件printf(file is %sc:text.il); 输出file is c:text.il,这里带了双引号 输入输入函数列表输入源 读取函数(评估版) 读取函数(未评估版) 操作函数File文件 load/loadi lineread infile/gets/getc/fscanf/closeString字符串 evalstring/loadstring/errsetstring linereadstring instring/gets/getc/fscanf/clos

25、e文件输入输出示例 创建文件并输出数据到该文件的函数procedure( DataOut() lData = list( (just105.5) (for2010.2) (test3015.0) (use4017.8) (done501.2); 定义数据列表lData fDataOut =strcat(getTempDir()./data.txt); 输出文件名和路径,%temp%/data.txt。 pDataOut =outfile( fDataOut w); 建立输出端口foreach( item lDatafprintf( pDataOut %s %d %0.2fn; 输出数据到文件端

26、口car(item)cadr(item) caddr(item); item=每一个在lData中的列表); end fprintf); end foreachclose( pDataOut ); 关闭端口printf(I- output data from lData list to file %s, done! fDataOut ); 输出提示信息); end procedure 从指定文件读取数据procedure( DataIn()prog(fDataIn pDataIn lData sWord nNum fNum);设置局部变量 fDataIn =strcat(getTempDir(

27、)./data.txt); 输入文件unless(isFile( fDataIn ); 如果文件不存在则跳转到函数末尾,结束函数printf(E- %s does not exist, double check please! fDataIn)go(SkipToEnd); 在prog中支持go操作) pDataIn =infile( fDataIn ); 建立输入端口 lData =nil 初始化列表变量while(fscanf( pDataIn %s %d %0.2f sWord nNum fNum ); 安照数据文件格式读取 lData =cons( list( sWord nNum fN

28、um ) lData ); end while; 读取完毕lData里的数据将和上例中的一样close( pDataIn ) SkipToEnd ); end prog); end procedure数字 整数进制列表: 前缀 示例十进制值二进制 0b或0B 0b1010 10八进制 0 012 10十进制 10十六进制 0x或0X 0x11 17 浮点数和其它的编程语言一样,如1.0,1.,0.5,.5,1e6 比例因子 比例因子 字符 全名 比例 示例 Y Yotta 1.00E+24 10Y 10e+25 Z Zetta 1.00E+21 10Z 10e+22 E Exa 1.00E+1

29、8 10E 10e+19 P Peta 1.00E+15 10P 10e+16 T Tera 1.00E+12 10T 10e+13 G Giga 1.00E+09 10G 10e+10 M Mega 1.00E+06 10M 10e+7 k or K kilo 1.00E+03 10k 10e+4 % percent 1.00E-02 5% 0.05 m milli 1.00E-03 5m 5.0e-3 u micro 1.00E-06 1.2u 1.2e-6 n nano 1.00E-09 1.2n 1.2e-9 p pico 1.00E-12 1.2p 1.2e-12 f femto 1

30、.00E-15 1.2f 1.2e-15 a atto 1.00E-18 1.2a 1.2e-18 z zepto 1.00E-21 1.2z 1.2e-21 y yocto 1.00E-24 1.2y 1.2e-24 常用的skill函数通常整数和浮点数在一个表达式中计算的时候,结果默认是浮点数。 判断数字类型numberp(data),判断data是不是数字类型;fixp(data),判断data是不是整型数;floatp(data),判断data是不是浮点数; 示例: numberp( 5 ) = t, fixp( 5 ) = t, 和integer(5)一样 floatp( 5 ) =

31、 nil,(t, nil分别代表真值和假值)。 浮点数、整数转换round(data),转换浮点数到最近的整数;fix(data),转换浮点数到不大于它的最大的整数float(data),转换整数到相等大小的浮点数 示例:round(1.8) = 2, round(1.4) = 1 fix(1.8) = 1, fix(1.4) = 1 float(2) = 2.0 字符串转换成数字atoi(data), 转换字符串到对应的整数atof(data), 转换字符串到对应的浮点数 示例:atoi(“3s”) = 3, atof(“3s”)= 3.0 其它数学运算函数abs, cos, atan, l

32、og具体请参考skill函数参考书sklangref。字符skill中没有一个专门的类型叫char,字符通常都是用symbol类型代表,如 type(A)=symbol。(skill中的symbol相当于C语言中的变量)可以使用ASCII来申明一个字符, 比如 char=120, char=p。一些特殊的字符(转义序列) new-line (line feed) n horizontal tab t vertical tab v backspace b carriage return r form feed f backslash double quote ASCII code ddd (oc

33、tal) ddd字符串 字符串定义字符串是字符序列,比如”123”, “abs”。字符串用双引号来定义,就像C语言一样。可以直接打印的字符(处双引号本身)都可以直接被直接定义成字符串, 如”a”, “01”。需要借助转义字符()才可以打印的字符,以及双引号被定义成字符串时都需要和转义字符一起, 如”, “” 分别定义了字符串” 和。 字符串限制直接赋值的字符串长度不能超过8191,但是在程序运行过程中的字符串长度没有限制。 常用函数 判断字符串类型stringp(data), 判断是否为字符串; 合成,分开,提取strcat( s_string1 s_string2 ), 合成所有提供的字符串

34、生成一个新的字符串substring(s_string index length), 从指定位置提取特定长度的字符parseString(s_string breakchar), 用特定字符将原字符串断开buildString(l_string breakchar), 用特定的字符将给定的字符串列表合成字符串 示例 strcat(“a”“1 b”“ 3 c”) = “a1 b 3 c”; substring(“abcdef” 3 2) = “cd”; parseString(“a-bc-def”“-“) = ( “a”“bc”“def” ) buildString( (“1”“23”“4”“5

35、a”) “+”) = “1+23+4+5a” 字符串长度、比较strlen(s_string),得到字符串长度strcmp(s_string1 s_string2),比较2个字符串的大小equal(s_string1 s_string2),判断2个字符串是否相等 示例 strlen(“abc”) = 3 strcmp(“abc”“abb”) = 1, strcmp(“abc”“abc”) = 0 equal( “abc”“abb” ) = nil 输出与格式化println( “hello” )=”hello”, 输出hello;printf(“folat num is %0.2f” 10.2

36、)=”float num is 10.20。 其它symbolToString,timeToString 参考skill函数文档逻辑值 t 表示逻辑真值 nil 表示逻辑假值数组 array 申明一个数组申明数组需要用到关键字declare,如declare(week7), 申明了一个能包含7个元素的数组week。数组元素从week0到week7-1也即week6。 赋值与读取给数组的元素赋值, 如week0=”Mon”;读取数组的一个元素,如week0 = ”Mon” 特殊性skill中数组不同于其它语言的一点就是数组中的元素可以不是同一种类型,也即数组中可以既有字符串,又有数字等等。 常用

37、的函数arrayp,判断是否为数组类型。列表 listskill中最常用到的一种类型就是列表,列表是一系列元素的结合,元素不必是同一个类型。比如(1 “as”“1”)就是一个包含了三个元素1、“as”和“1”的列表,而且这列表中这三个元素的位置上固定了的,比如说第二个元素就一定是”as”。 申明列表申明列表有2种方式一种使用关键字list,如a=list(“ab”“c”“de”),另一种用单引号”,如a=(“ab”“c”“de”),这2种方式定义的列表是一样的,这里都是定义了一个包含3个元素的列表。 常用操作列表函数 访问列表元素car(list), cdr(list),分别获取列表的第一个元

38、素和列表除第一个元素以外的元素列表car和cdr可以组合在一起使用,如cadr(list)car(cdr(list),得到列表的第二个元素nth(index list),获取指定位置的列表元素 nth(0 list)car(list)member( item list ),查询列表中是否包含指定元素 示例 a=( 1 3 5 7 9 ) car(a) = 1 cdr(a) = (3 5 7 9 ) cadr(a) = 3 nth(4 a) = 9 member( 5 a ) =(5 7 9) member( 4 a ) = nil 添加和移除元素cons( item list ),将单个元素插

39、入到列表的最前面成为列表的第一个元素;append1(item list),和cons正好相反,将元素插入到列表的最末尾;append(list1 list2),合并2个列表为一个;remove(item list),从列表中删除指定的元素。 示例 a=(1 3 5 7 9) cons( 2 a )=(2 1 3 5 7 9) append1( a 2 ) = (1 3 5 7 9 2 ) append( a (“a”“bc”)=(1 3 5 7 9 “a”“bc”) remove( 5 a )=( 1 3 7 9 ) 列表元素排序sort(list parefunc),根据比较函数来给列表排

40、序,比较函数可以自己定义;reverse(list),反向排列列表 示例 a=(5 3 7 0 9) sort( a lessp )=(0 3 5 7 9) reverse(a)=(9 0 7 3 5) 其它length,sortcar,tableToList,listp,last请参考skill函数文档 关联列表列表中的每个元素都是一个子列表,且这些字列表由2个元素组成,也就是所谓的键值对,这样的列表称为关联列表。如( ( A 1 ) ( B 2 ) ( C 3 ) ),参考函数assoc。关联表格 table关联表格和数组类似,每一个表格相对应一个数值,同样在一个表格里面的数据类型可以是不

41、一样的,不同的是数组的索引值是数字如 declare(week7), week0=”Mon”,而列表的索引值可以是任何值,如table = makeTable(“new table”), table1=”hello”, table“yes”=”sure”。 申明表格申明表格使用关键字makeTable,如table1=makeTable(“hello” 1),定义了表格table,这个表格的名字是”hello”,所有未初始化的表格元素的值都是1,table11=1, table1“a”=1。 常用函数tableToList(table),转换表格为列表形式,如tableToList(table

42、1)=(1 1) (“a” 1)tablep(table),判断是否为表格类型struct 待写Cadence数据库数据dbiddbid及database id,就是数据库中的标识,每个Cadence软件平台中的数据都有这样的一个dbid,skill函数就是通过这些id来操作数据库文件。比如说PCB Layout工具allegro,每一个在一个设计中的线路,电阻,网络都各自有个dbid,通过相应的函数可以直接读取到这个id。通过这个id可以得到这个id的相关信息,也可以得到相关信息的dbid定义函数Skill 中常用的2个定义函数的关键字是procedure,lambda。 procedureprocedure的基本语法,procedure( funame( args) expX)示例procedure( trAdd( x y ) ;定义了包含2个参数的函数trAdd printf( Adding %d and %d . %d n x y x+y ) x+y ;默认的返回值)= trAddtrAdd( 6 7 ) = 13 ;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!