




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、报告成绩编译原理课程设计项目名称 PL/0语言的扩充 学 院 计算机学院 专业班级 学 号 姓 名 指导教师 2013 年 1 月 3 日 TOC o 1-5 h z u HYPERLINK l _Toc345177671 一 课程设计目的 PAGEREF _Toc345177671 h 0 HYPERLINK l _Toc345177672 二 课程设计要求 PAGEREF _Toc345177672 h 0 HYPERLINK l _Toc345177673 基本内容: PAGEREF _Toc345177673 h 0 HYPERLINK l _Toc345177674 选做内容: PA
2、GEREF _Toc345177674 h 0 HYPERLINK l _Toc345177675 已实现的功能: PAGEREF _Toc345177675 h 0 HYPERLINK l _Toc345177676 三 编译环境与工具 PAGEREF _Toc345177676 h 0 HYPERLINK l _Toc345177677 四 结构设计说明 PAGEREF _Toc345177677 h 0 HYPERLINK l _Toc345177678 1PL/0编译程序的结构图 PAGEREF _Toc345177678 h 0 HYPERLINK l _Toc345177679 2
3、PL/0编译程序的过程或函数的功能表 PAGEREF _Toc345177679 h 1 HYPERLINK l _Toc345177680 3PL/0编译程序的总体流程图 PAGEREF _Toc345177680 h 1 HYPERLINK l _Toc345177681 4PL/0编译程序的中间代码 PAGEREF _Toc345177681 h 2 HYPERLINK l _Toc345177682 5PL0的编译程序的过程和函数的功能 PAGEREF _Toc345177682 h 3 HYPERLINK l _Toc345177683 五 课程设计的设计与步骤 PAGEREF _T
4、oc345177683 h 3 HYPERLINK l _Toc345177684 1扩充赋值运算:+= -= *= /= + 和- - PAGEREF _Toc345177684 h 5 HYPERLINK l _Toc345177685 2增加Pascal的FOR语句 PAGEREF _Toc345177685 h 15 HYPERLINK l _Toc345177686 3一维数组 PAGEREF _Toc345177686 h 17 HYPERLINK l _Toc345177687 六 调试测试 PAGEREF _Toc345177687 h 19 HYPERLINK l _Toc3
5、45177688 1.+= -= *= /= + -的测试 PAGEREF _Toc345177688 h 19 HYPERLINK l _Toc345177689 2.FOR语句的测试 PAGEREF _Toc345177689 h 21 HYPERLINK l _Toc345177690 3.数组的调试 PAGEREF _Toc345177690 h 22 HYPERLINK l _Toc345177691 4综合调试 PAGEREF _Toc345177691 h 23 HYPERLINK l _Toc345177692 七 课程设计总结 PAGEREF _Toc345177692 h
6、25 HYPERLINK l _Toc345177693 【参考文献】 PAGEREF _Toc345177693 h 26课程设计目的在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。课程设计要求基本内容:(1)扩充赋值运算:*= 和 /=(2)扩充语句(Pascal的FOR语句):FOR := TO DO FOR := DOWNTO DO 其中,语句的循环变量的步长为2,语句的循环变量的步长为-2。(3)增加运算:+ 和 -。选做内容:(1)增加类型: 字符类型; 实数
7、类型。(2)扩充函数: 有返回值和返回语句; 有参数函数。(3)增加一维数组类型(可增加指令)。(4)其他典型语言设施。已实现的功能:(1)扩充赋值运算:*=和 /= (另外也扩充了+= 和 -=)(2)扩充语句(Pascal的FOR语句):FOR := TO DO FOR := DOWNTO DO (3)增加运算:+ 和 -。(4)增加一维数组类型(可增加指令)。编译环境与工具编译环境:Microsoft Windows 7 (64bit)编译工具:Microsoft Visual C+ 6.0结构设计说明1PL/0编译程序的结构图图4-1 PL/0编译程序的结构图PL/0源程序词法分析程序
8、语法语义分析程序代码生成目标代码表格管理程序出错管理程序2PL/0编译程序的过程或函数的功能表过程或函数名简要功能说明pl0主程序error出错处理,打印出错位置和错误编码getsym词法分析,读取一个单词getch漏掉空格,读取一个字符gen生成目标代码,并送入目标程序区test测试当前单词符号是否合法block分程序分析处理过程enter登录名字表position(函数)查找标识符在名字表中的位置constdeclaration常量定义处理vardeclaration变量说明处理listode列出目标代码清单statement语句处理expression表达式处理term项处理factor
9、因子处理condition条件处理interpret对目标代码的解释执行程序base(函数)通过静态链求出数据区的基地址表4-1 PL/0编译程序的过程或函数的功能表3PL/0编译程序的总体流程图图4-2 PL/0编译程序的总体流程图4PL/0编译程序的中间代码对PL/0编译程序的目标代码的指令格式描述如下: f l a其中f代表功能码,l表示层次差,a的含意对不同的指令有所区别,见下面对每条指令的解释说明:Lit 0 a将常数值取到栈顶,a为常数值lod l a将变量值取到栈顶,a为偏移量,l为层差sto l a将栈顶内容送入某变量单元中,a为偏移量,l为层差cal l a调用过程,a为过程
10、地址,l为层差int 0 a在运行栈中为被调用的过程开辟a个单元的数据区jmp 0 a无条件跳转至a地址jpc 0 a条件跳转,当栈顶布尔值非真则跳转至a地址,否则顺序执行opr 0 0过程调用结束后,返回调用点并退栈opr 0 1栈顶元素取反opr 0 2次栈顶与栈顶相加,退两个栈元素,结果值进栈opr 0 3次栈顶减去栈顶,退两个栈元素,结果值进栈opr 0 4次栈顶乘以栈顶,退两个栈元素,结果值进栈opr 0 5次栈顶除以栈顶,退两个栈元素,结果值进栈opr 0 6栈顶元素的奇偶判断,结果值在栈顶opr 0 7opr 0 8次栈顶与栈顶是否相等,退两个栈元素,结果值进栈opr 0 9次栈
11、顶与栈顶是否不等,退两个栈元素,结果值进栈opr 0 10次栈顶是否小于栈顶,退两个栈元素,结果值进栈opr 0 11次栈顶是否大于等于栈顶,退两个栈元素,结果值进栈opr 0 12次栈顶是否大于栈顶,退两个栈元素,结果值进栈opr 0 13次栈顶是否小于等于栈顶,退两个栈元素,结果值进栈opr 0 14栈顶值输出至屏幕opr 0 15屏幕输出换行opr 0 16从命令行读入一个输入置于栈顶表4-2 PL/0编译程序的目标指令5PL0的编译程序的过程和函数的功能Pl0:主程序Error:出错处理,打印出错位置和错误编码Getsym:词法分析,读取一个单词Getch:漏掉空格,读取一个字符Gen
12、:生成目标代码,并送入目标程序区Test:测试当前单词符号是否合法Block:分程序分析处理过程Enter:登陆名字表Position:查找标识符在名字表中的位置Constdeclaration:常量定义处理Vardeclaration:变量说明处理Listcode:列出目标代码清单Statement:语句部分处理Expression:表达式处理Term:项处理Factor:因子处理Condition:条件处理Interpret:对目标代码的解释执行程序Base:通过静态链求出数据区的基地址课程设计的设计与步骤本次课程设计是在实验的基础上,在实验中,已经实现对PL/0作以下修改扩充:(1)增加
13、单词:保留字 ELSE,FOR,STEP,UNTIL,RETURN 运算符 +=,-=,+,-,(2)修改单词:不等号# 改为 (3)增加条件语句的ELSE子句在课程设计中,因为关键字增加到了18个,所以令 # define norw 18。SYMBOL扩展为48个值。在pl0.h中做了如下更改,具体如下(粗体部分为课程设计更改部分):enum symbol nul, ident, number, plus, minus, times, slash, oddsym, eql, neq,lss, leq, gtr, geq, lparen,rparen, comma, semicolon,per
14、iod, becomes,beginsym, endsym, ifsym, thensym, whilesym,writesym, readsym, dosym, callsym, constsym,varsym, procsym, elsesym, forsym, stepsym, untilsym, returnsym,plusbecomes, dplus, minusbecomes, dminus, and, or, not,lepa,ripa,slashbecomes,timesbecomes,;#define symnum 48 符号和关键字扩展(粗体部分为课程设计更改部分):ssy
15、m+=plus;ssym-=minus;ssym*=times;ssym/=slash;ssym(=lparen;ssym)=rparen;ssym=eql;ssym,=comma;ssym.=period;/ssym#=neq; 去掉#,改为ssym;=semicolon;ssym!=not; /非ssym=lepa;/一维数组的左括号ssym=ripa;/一维数组的右括号/*设置保留字名字,按照字母顺序,便于折半查找*/strcpy(&(word00),begin);strcpy(&(word10),call);strcpy(&(word20),const);strcpy(&(word30
16、),do);strcpy(&(word40),else);strcpy(&(word50),end);strcpy(&(word60),for);strcpy(&(word70),if);strcpy(&(word80),odd);strcpy(&(word90),procedure);strcpy(&(word100),read);strcpy(&(word110),return);strcpy(&(word120),step);strcpy(&(word130),then);strcpy(&(word140),until);strcpy(&(word150),var);strcpy(&(w
17、ord160),while);strcpy(&(word170),write);/*设置保留字符号*/wsym0=beginsym;wsym1=callsym;wsym2=constsym;wsym3=dosym;wsym4=elsesym;wsym5=endsym;wsym6=forsym;wsym7=ifsym;wsym8=oddsym;wsym9=procsym;wsym10=readsym;wsym11=returnsym; wsym12=stepsym;wsym13=thensym;wsym14=untilsym;wsym15=varsym;wsym16=whilesym;wsym1
18、7=writesym;设置指令名称(粗体部分为课程设计更改部分):strcpy(&(mnemoniclit0),lit);strcpy(&(mnemonicopr0),opr);strcpy(&(mnemoniclod0),lod);strcpy(&(mnemonicsto0),sto);strcpy(&(mnemoniccal0),cal);strcpy(&(mnemonicinte0),int);strcpy(&(mnemonicjmp0),jmp);strcpy(&(mnemonicjpc0),jpc);strcpy(&(mnemonicgar0),gar);strcpy(&(mnemo
19、nicsar0),sar);strcpy(&(mnemonicshd0),shd);strcpy(&(mnemonicdel0),del);strcpy(&(mnemonicjud0),jud);strcpy(&(mnemonictra0),tra);1扩充赋值运算:+= -= *= /= + 和- -:=+=-=*=/=+-+-变量表达式表达式+a或者-aa+或者a-图5-1 扩充赋值运算:+= -= *= /= + 和- -1)在symbol增加字符:Plusbecomes:+=Minusbecomes:-=Slashbecomes:*=Timesbecomes:/=2)对取字符getsy
20、m()函数进行扩充,具体如下(粗体部分为更改部分):int getsym()./此处省略部分未修改过的代码else if(ch=+) /读到加号getchdo; /再读一个字符if(ch=) /读到等号,则与+号构成加等sym=plusbecomes;getchdo;else if(ch=+) /读到加号,则与加号构成+sym=dplus;getchdo; elsesym=plus; /那就是一个单独的加号else if(ch=-) /读到减号getchdo;if(ch=) /读到等号,则与减号构成减等sym=minusbecomes;getchdo;else if(ch=-) /读到减号,则
21、与减号构成-sym=dminus;getchdo;elsesym=minus; /那就是一个单独的减号else if(ch=*) getchdo;if(ch=) /读到乘号,则与减号构成乘等sym=timesbecomes;getchdo;elsesym=times; /那就是一个单独的乘else if(ch=/) getchdo;if(ch=) /读到乘号,则与减号构成除等sym=slashbecomes;getchdo;elsesym=slash; /那就是一个单独的除./此处省略部分未修改过的代码3)对statemen函数进行扩展int statement(bool* fsys,int
22、* ptx,int lev)./此处省略部分未修改过的代码 if(sym=ident) i=position(id,*ptx); if(i=0) error(11); else if(tablei.kind!=variable&tablei.kind!=array) error(12); i=0; else getsymdo; if(sym=lepa)/如果是数组getsymdo; /处理里的表达式memcpy(nxtlev,fsys,sizeof(bool)* symnum);nxtlevripa=true;expressiondo(nxtlev,ptx,lev);gendo(tra,0,t
23、ablei.size);/生成将数组下标范围入栈指令gendo(jud,0,0);/判断下标合法性if(sym!=ripa)error(26);getsymdo; if(sym=becomes)/赋值:= getsymdo;flag=1; else if(sym=plusbecomes)/加赋值+=getsymdo;flag=2;else if(sym=minusbecomes)/减赋值-=getsymdo;flag=3;else if(sym=dplus)/+getsymdo;flag=4;else if(sym=dminus)/-getsymdo;flag=5;else if(sym=ti
24、mesbecomes)/*=getsymdo;flag=6;else if(sym=slashbecomes)/ /=getsymdo;flag=7; else error(13); if(i!=0)if(flag=1) /:=memcpy(nxtlev,fsys,sizeof(bool)* symnum);expressiondo(nxtlev,ptx,lev);else if(flag=2)/+=memcpy(nxtlev,fsys,sizeof(bool)* symnum);expressiondo(nxtlev,ptx,lev);gendo(lod,lev-tablei.level,t
25、ablei.adr);/先取值到栈顶gendo(opr,lev-tablei.level,2);/执行加法else if(i!=0&flag=3)/-=memcpy(nxtlev,fsys,sizeof(bool)* symnum);expressiondo(nxtlev,ptx,lev);gendo(lod,lev-tablei.level,tablei.adr);/先取值到栈顶gendo(opr,lev-tablei.level,3);/执行减法gendo(opr,lev-tablei.level,1);/取反else if(i!=0&flag=4) /+if(tablei.kind=va
26、riable)gendo(lod,lev-tablei.level,tablei.adr);/先取值到栈顶gendo(lit,lev-tablei.level,1);/将值为1入栈gendo(opr,lev-tablei.level,2);/加法,即加1if(tablei.kind=array)gendo(gar,lev-tablei.level,tablei.adr);gendo(lit,lev-tablei.level,1);gendo(opr,lev-tablei.level,2);else if(i!=0&flag=5)/-if(tablei.kind=variable)gendo(l
27、od,lev-tablei.level,tablei.adr);/先取值到栈顶gendo(lit,lev-tablei.level,1);/将值为1入栈gendo(opr,lev-tablei.level,3);/减法,即-1if(tablei.kind=array)gendo(gar,lev-tablei.level,tablei.adr);gendo(lit,lev-tablei.level,1);gendo(opr,lev-tablei.level,3);else if(i!=0&flag=6)/*=memcpy(nxtlev,fsys,sizeof(bool)* symnum);exp
28、ressiondo(nxtlev,ptx,lev);gendo(lod,lev-tablei.level,tablei.adr);/先取值到栈顶gendo(opr,lev-tablei.level,4);/乘法else if(i!=0&flag=7) / /=;gendo(lod,lev-tablei.level,tablei.adr);/先取值到栈顶memcpy(nxtlev,fsys,sizeof(bool)* symnum);expressiondo(nxtlev,ptx,lev);gendo(opr,lev-tablei.level,5);/除法if(tablei.kind=array
29、) /数组,根据偏移地址存入数组gendo(sar,lev-tablei.level,tablei.adr);gendo(del,0,0);/赋值语句需将存入数组后栈顶为偏移地址出栈else /变量gendo(sto,lev-tablei.level,tablei.adr); /根据变量地址存入变量 else if(sym=dplus) /+变量getsymdo;if(sym=ident)/后面跟的是变量i=position(id,*ptx);if(i=0)error(11);elseif(tablei.kind!=variable&tablei.kind!=array) /+后没跟变量,出错
30、error(12);i=0;else /+后跟变量,处理生成中间代码if(tablei.kind=variable)gendo(lod,lev-tablei.level,tablei.adr);/先取值到栈顶gendo(lit,0,1);/将值为1入栈gendo(opr,0,2);/加法,即+1,栈顶加次栈顶gendo(sto,lev-tablei.level,tablei.adr);/出栈取值到内存getsymdo;else if(tablei.kind=array) /后跟数组getsymdo;if(sym=lepa)getsymdo;memcpy(nxtlev,fsys,sizeof(b
31、ool)* symnum);nxtlevripa=true;expressiondo(nxtlev,ptx,lev);gendo(tra,0,tablei.size); /生成将数组下标范围入栈指令gendo(jud,0,0); /判断下标合法性if(sym!=ripa)error(26); /缺少elsegendo(gar,lev-tablei.level,tablei.adr);gendo(lit,0,1);gendo(opr,0,2);gendo(sar,lev-tablei.level,tablei.adr);gendo(del,0,0);getsymdo;elseerror(27);
32、/缺少else if(sym=dminus)/-变量getsymdo;if(sym=ident) /后面跟的是变量i=position(id,*ptx);if(i=0)error(11);elseif(tablei.kind!=variable&tablei.kind!=array) /-后没跟变量,出错error(12);i=0;else /-后跟变量,处理生成中间代码if(tablei.kind=variable)/后跟变量gendo(lod,lev-tablei.level,tablei.adr);/先取值到栈顶gendo(lit,0,1); /将值为1入栈gendo(opr,0,3);
33、/加法,即-1,栈顶减次栈顶gendo(sto,lev-tablei.level,tablei.adr);/出栈取值到内存getsymdo;else if(tablei.kind=array)/后跟数组变量getsymdo;if(sym=lepa)getsymdo;memcpy(nxtlev,fsys,sizeof(bool)* symnum);nxtlevripa=true;expressiondo(nxtlev,ptx,lev);gendo(tra,0,tablei.size);/生成将数组下标范围入栈指令gendo(jud,0,0);/判断下标合法性if(sym!=ripa)error(
34、26);/缺少elsegendo(gar,lev-tablei.level,tablei.adr);gendo(lit,0,1);gendo(opr,0,3);gendo(sar,lev-tablei.level,tablei.adr);gendo(del,0,0);getsymdo;elseerror(27);/缺少 ./此处省略部分未修改过的代码2增加Pascal的FOR语句本次课程设计中要求扩充的是Pascal的FOR语句:FOR := TO DO FOR := DOWNTO DO ,流程图如下:for变量:=表达式to/downto表达式do语句图5-2 增加Pascal的FOR语句1
35、)在symbol增加字符FORSYM。strcpy(KWORD10,for); WSYM 10= forsym;strcpy(KWORD22,to); WSYM22=tosym;strcpy(KWORD 7,downto); WSYM 7=downtosym;2)对statement函数进行扩充int statement(bool* fsys,int * ptx,int lev)./此处省略部分未修改过的代码else if(sym= forsym)getsymdo;if(sym=ident) / ident为变量的符号i=position(id,*ptx);if(i=0)error(11);e
36、lseif(tablei.kind!=variable) /赋值语句中,赋值号左部标识符属性应是变量error(12);i=0;elsegetsymdo;if(sym!=becomes) error(13);else getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum); if(nxtlevtosym=true) / tosymelse nxtlevdowntosym=true; / downtosymexpressiondo(nxtlev,ptx,lev); /处理赋值语句右部的表达式gendo(sto,lev-tablei.level,table
37、i.adr); /保存初始值getsymdo;cx1=cx; /保存循环开始点memcpy(nxtlev,fsys,sizeof(bool)*symnum);if(sym=dosym)getsymdo;statement(fsys,ptx,lev); /循环体处理gendo(lod,lev-tablei.level,tablei.adr); /将循环变量取出放在栈顶gendo(opr,0,2); /循环变量加长gendo(sto,lev-tablei.level,tablei.adr); /将栈顶的值存入循环变量gendo(jmp,0,cx1);/无条件跳转到循环开始点codecx2.a=cx
38、; /回填循环结束点的地址else error(29); /for语句中少了doelseerror(19); /for后面为赋值语句,赋值语句左部是变量,缺少变量./ 此处省略部分未修改过的代码3一维数组1)设置一维数组的左右括号:ssym=lepa; /一维数组的左括号ssym=ripa; /一维数组的右括号2)增加指令:strcpy(&(mnemonicgar0),gar); strcpy(&(mnemonicsar0),sar);strcpy(&(mnemonicshd0),shd);strcpy(&(mnemonicdel0),del);strcpy(&(mnemonicjud0),j
39、ud);strcpy(&(mnemonictra0),tra);enum fctlit, opr, lod, sto, cal, inte, jmp, jpc, gar, sar, shd, del, jud, tra,;由于指令有原来的8条拓展到了14条,故进行如下修改#define fctnum 14增加的指令意义如下:gar:根据栈顶的偏移地址从数组中取值到新的栈顶sar:根据次栈顶的偏移地址把栈顶的值存入数组shd:将栈顶的值下移到次栈顶,栈顶出栈,即次栈顶成为栈顶del:出栈顶jud:判断数组下标合法性tra:将数组的下标范围入栈,gendo(tra,0,数组下标最大值);3)增加标
40、识符类型属性:enum object constant, variable, procedur, array, /数组; 4)在block函数中添加如下代码:for(i=tx0+1;i=tx;i+) switch(tablei.kind) case constant: /*常量名字*/ ./此处省略部分未修改过的代码 case variable: /*变量名字*/ ./此处省略部分未修改过的代码 case procedur: /*过程名字*/ ./此处省略部分未修改过的代码case array:/数组变量printf(%d var-array %s ,i,);printf
41、(lev=%d addr=%d size=%dn,tablei.level,tablei.adr,tablei.size);fprintf(fas,%d var-array %s,i,); fprintf(fas,lev=%d addr=%d size=%dn,tablei.level,tablei.adr,tablei.size);5)在enter()函数添加如下代码:switch(k)case constant: /*常量名字*/./此处省略部分未修改过的代码case variable: /*变量名字*/./此处省略部分未修改过的代码case procedur: /*
42、过程名字*/./此处省略部分未修改过的代码case array: /*数组名字*/table(*ptx).level=lev;table(*ptx).adr=(*pdx)-arraysize;table(*ptx).size=arraysize;break;6)在Vardeclaration()函数中添加数组的变量声明,代码如下:int vardeclaration(int * ptx,int lev,int * pdx) ./此处省略部分未修改过的代码case gar: /根据栈顶的偏移地址从数组中取值到新的栈顶st=sbase(i.l,s,b)+i.a+st-1; /偏移地址为上一层过程的
43、基址+当前指令的层次+栈顶的偏移地址t+;break;case sar:/根据次栈顶的偏移地址把栈顶的值存入数组t-;sbase(i.l,s,b)+i.a+st-1=st;/t-;break;case shd:/将栈顶的值保存到次栈顶t-;st-1=st;break;case del:/将栈顶的值出栈t-;break;case jud:/判断数组下标的合法性t-;if(st-1=st) error(28);printf(n运行问题出错,程序退出!请输入任意数字退出:);scanf(%d,&p);exit(1);break;case tra:/将数组的下标范围入栈st=i.a;t+;break;./ 此处省略部分未修改过的代码 调试测试1.+= -= *= /= + -的测试 图6-1 测试文件pl0_1.txt 图6-2 += -= *= /= + -的测试结果1图6-2 += -= *= /= + -的测试结果22.FOR语句的测试图6-4 FOR语句的测试文件pl0.tx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国牧机监测行业市场深度研究及投资战略咨询报告
- 群落结构塑造-洞察及研究
- 吉大工程热力学讲义第13章 化学热力学基础
- 云南国土资源职业学院《国际物流管理》2023-2024学年第二学期期末试卷
- 曲靖职业技术学院《中药分析(实验)》2023-2024学年第二学期期末试卷
- 成都航空职业技术学院《高新企业园区安全》2023-2024学年第二学期期末试卷
- 四川轻化工大学《计量经济学(双语)》2023-2024学年第二学期期末试卷
- 重庆交通大学《数值代数与计算方法》2023-2024学年第二学期期末试卷
- 建筑节能优化策略-洞察及研究
- 职业道德考试题及答案
- 岗位练兵中药专业前一百题测试(一)测试题
- 土地项目测算表_模板
- 中华传统文化教育学生学习能力评价量化表
- 服装色彩设计(PPT57页)课件
- DLT 596-2021 电力设备预防性试验规程
- 内分泌系统疾病病例分析
- 铝箔轧制油过滤技术
- 专项审计报告模板(青岛市高新技术企业认定专用)
- 成都市所有的药房.doc
- 基于BIM模型技术交底应用
- 产品设计和开发控制程序
评论
0/150
提交评论