版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理课程设计报告编译原理课程设计报告 课程名称课程名称_编译原理编译原理_ _ 题目名称题目名称 学生学院学生学院_ _ _ 计算机学院计算机学院_ 专业班级专业班级_ 学学 号号_ _ 学生姓名学生姓名_ _ _ _ _ _ 指导教师指导教师_ _ 20122012 年年 1 1 月月 1515 日日 目录目录 一课程设计目地一课程设计目地 4 4b5E2RGbCAP 二课程设计要求二课程设计要求 4 4p1EanqFDPw 1.1.基本内容基本内容 4DXDiTa9E3d 3.3.本人在课程设计中已实现地功能本人在课程设计中已实现地功能 4RTCrpUDGiT 四结构设计说明四结构设计
2、说明 4 45PCzVD7HxA 1.PL/01.PL/0 编译程序地结构图编译程序地结构图 5jLBHrnAILg 2.PL/0 编译程序地过程或函数地功能表编译程序地过程或函数地功能表 5xHAQX74J0X 3.PL/0 编译程序地总体流程图编译程序地总体流程图 5LDAYtRyKfE 4.词法分析词法分析 6Zzz6ZB2Ltk 5.语法分析语法分析 7dvzfvkwMI1 6.语义分析语义分析 8rqyn14ZNXI 7.中间代码生成中间代码生成 9EmxvxOtOco 8.语法错误处理语法错误处理 9SixE2yXPq5 五设计过程五设计过程 10106ewMyirQFL 1.增加
3、运算增加运算: *=和和/=10kavU42VRUs 2.2.增加增加 PascalPascal 地地 FORFOR 语句语句: :11y6v3ALoS89 八课程设计总结八课程设计总结 1717M2ub6vSTnP 一课程设计目地一课程设计目地 在分析理解一个教学型编译程序(如 PL/0)地基础上,对其词法分析程序、语 法分析程序和语义处理程序进行部分修改扩充.达到进一步了解程序编译过程 地基本原理和基本实现方法地目地.0YujCfmUCw 二课程设计要求二课程设计要求 1.1.基本内容基本内容 (1)扩充赋值运算:*= 和 /= (2)扩充语句 (Pascal 地 FOR 语句): FOR
4、 := TO DO FOR := DOWNTO DO 其中,语句地循环变量地步长为 2, 语句地循环变量地步长为-2. 2.2.选做内容选做内容 (1)增加类型: 字符类型; 实数类型. (2)扩充函数: 有返回值和返回语句; 有参数函数. (3)增加一维数组类型(可增加指令). (4)其他典型语言设施. 3.3.本人在课程设计中已实现地功能本人在课程设计中已实现地功能 (1)扩充赋值运算:*= 和 /= (2)扩充语句 (Pascal 地 FOR 语句): FOR := TO DO FOR := DOWNTO DO 三课程设计环境与工具三课程设计环境与工具 (1)计算机及操作系统:PC 机,
5、Windows 7 (2)实现工具:C+Builder6 (3) 教学型编译程序:PL/0 四四结构设计说明结构设计说明 1.PL/01.PL/0 编译程序地结构图编译程序地结构图 eUts8ZQVRd Pl0 源源 程程 序序 词法分析程序词法分析程序 语法分析程序语法分析程序 代码生产程序代码生产程序 目目 标标 程程 序序 表表 格格 管管 理理 程程 序序 出出 错错 处处 理理 程程 序序 2.PL/0 编译程序地过程或函数地功能表编译程序地过程或函数地功能表 过程或函数名简要功能说明 pl0 主程序 error 出错处理,打印出错位置和错误编码 getsym 词法分析,读取一个单词
6、 getch 漏掉空格,读取一个字符 gen 生成目标代码,并送入目标程序区 test 测试当前单词符号是否合法 block 分程序分析处理过程 enter 登录名字表 position(函数)查找标识符在名字表中地位置 constdeclaration 常量定义处理 vardeclaration 变量说明处理 listode 列出目标代码清单 statement 语句处理 expression 表达式处理 term 项处理 factor 因子处理 condition 条件处理 interpret 对目标代码地解释执行程序 base(函数)通过静态链求出数据区地基地址 3.PL/0 编译程序地
7、总体流程图编译程序地总体流程图 sQsAEJkW5T 启动 置初值 调用 getsym 取单词 调用 block 过程 是否为源程序结束符 源程序是否有错误 调用解释过程 interpret 解 释执行目标执行目标程序 结束 出错 打印错误 N N Y Y 4.词法分析词法分析 词法分析是编译地第一个阶段,它地主要任务是从左向右逐个字符地对源 程序进行扫描,产生一个个单词序列用于语法分析.PL/0 词法分析程序 GETSYM 地功能是为语法分析提供单词用地,是语法分析地基础,把输入地字符串形式 地源程序分割成一个个单词符号.经过词法分析程序分析出来地单词,对语言固 有地单词只给出类别存放在全程
8、变量 SYM 中,而对用户定义地单词(标识符或 常数)既给出类别又给值,其类别放在 SYM 中,值放在全程变量 ID 或全程变量 NUM 中,全部单词种类由编译程序定义地纯量类型 SYMBOL 给出,称为语法词汇 表.GMsIasNXkA 词法分析器地分析过程:调用 GETSYM 时,它通过 GETCH 过程从源程序中获 得一个字符.如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个 单词,查保留字表,如果查到为保留字,则把 SYM 变量赋成相应地保留字类型 值;如果没有查到,则这个单词应是一个用户自定义地标识符(可能是变量名、 常量名或是过程地名字) ,把 SYM 置为 IDENT,
9、把这个单词存入 ID 变量.查保留 字表时使用了二分法查找以提高效率.如果 Getch 获得地字符是数字,则继续用 Getch 获取数字,并把它们拼成一个整数或实数,然后把 SYM 置为 INTEGER, 并把拼成地数值放入 NUM 变量.如果识别出其它合法地符号(比如:赋值号、大 于号、小于等于号等) ,则把 SYM 则成相应地类型.如果遇到不合法地字符,把 SYM 置成 NUL.TIrRGchYzg 词法分析程序 GETSYM 将完成下列任务: (1)滤空格 (2)识别保留字 (3)识别标识符 (4)拼数 (5)拼复合词 (6)输出源程序 5.语法分析语法分析 PL/0 编译程序地语法分析
10、采用了自顶向下地递归地子程 序法.语法分析同时也根据程序地语义生成相应三元代码, 并提供了出错处理地机制.语法分析主要由分程序分析过程 (BLOCK) 、常量定义分析过程(ConstDeclaration) 、变量 定义分析过程(Vardeclaration) 、语句分析过程 (Statement) 、表达式处理过程(Expression) 、项处理过 程(Term) 、因子处理过程(Factor)和条件处理过程 (Condition)构成.这些过程在结构上构成一个嵌套地层次 结构.除此之外,还有出错报告过程(Error) 、代码生成过 程(Gen) 、测试单词合法性及出错恢复过程(Test)
11、 、登录 名字表过程(Enter) 、查询名字表函数(Position)以及列 出类 PCODE 代码过程(Listcode)作过语法分析地辅助过程. 7EqZcWLZNX 由 PL/0 地语法图可知:一个完整地 PL/0 程序是由分程 序和句号构成地.因此,本编译程序在运行地时候,通过主 程序中调用分程序处理过程 block 来分析分程序部分(分程 序分析过程中还可能会递归调用 block 过程) ,然后,判断 最后读入地符号是否为句号.如果是句号且分程序分析中未 出错,则是一个合法地 PL/0 程序,可以运行生成地代码, 否则就说明源 PL/0 程序是不合法地,输出出错提示即可. 程序 分
12、程序 语句 条件 表达式 项 因子 PL/0 语法调用关系图 lzq7IGf02E 6.语义分析语义分析 PL/0 地语义分析主要进行以下检查: (1) 是否存在标识符先引用未声明地情况; (2) 是否存在己声明地标识符地错误引用; (3) 是否存在一般标识符地多重声明. 7.中间代码生成中间代码生成 目标代码类 pcode 是一种假想栈式计算机地汇编语言. 8.语法错误处理语法错误处理 PL/0 编译程序对语法错误地处理采用两种办法: (1)对于一些易于校正地错误,如丢了逗号、分号等,指出出错地位置, 加以校正,继续进行分析. (2)对于难于校正地错误,给出错误地位置与性质,跳过后面一些单词
13、, 直到下一个可以进行正常语法分析地语法单位.zvpgeqJ1hk 错误类型如下: 0 过程开始部分说明不正确 1 常数说明中=写成:= 2 常数说明中=后应为整数或实数或字符 3 常数说明中地标识符后应是= 4const, var, procedure 后应为标识符 5 漏掉了,或; 6 过程说明后地符号不正确(应该是语句开始符,或过程定义符) 7 应是语句开始符 8 程序体内语句部分地后跟符不正确 9 程序结尾丢了句号. 10 语句间漏了; 11 标识符未说明 12 赋值语句中,赋值号左部标识符属性应是变量 13 变量后应是“:=” “*=” “/=” 14call 后应为标识符 15ca
14、ll 后标识符属性应为过程 16 条件语句中丢了then 17 丢了end或; 18while 型循环语句丢了do 19 语句后地符号不正确 20 应为关系运算符 21 表达式内标识符属性不能是过程 22 表达式中漏掉右括号( 23 因子后地非法符号 24 表达式地开始符不能是此符号 31 数越界 32read 语句括号中地标识符不是变量 NrpoJac3v1 TEST SYM 在 S1 中? 打印出错编号 n S1:=S1+S2 SYM 在 S1 中? GETSYM 返回 Y Y N N TEST 测试过程流程图 五设计过程五设计过程 1.增加运算增加运算: *=和和/= 这两个操作都是一种
15、对变量进行赋值地形式,其合法地语句形式地语法图如下所示: 2.2.增加增加 PascalPascal 地地 FORFOR 语句语句: : a)格式如下:)格式如下: FOR := TO DO FOR := DOWNTO DO 其中,语句地循环变量地步长为 2, 语句地循环变量地步长为-2. b)添加语句)添加语句 for 语句地语句语法图如下: 编程实现:编程实现: 新增 4 个保留字和 2 个运算符,合计 8 个单词.故 const NORW = 18; /* # OF RESERVED WORDS */ const WNUM = 39; /* 单词总数 */ 其中保留字ELSE,FOR,T
16、O,DOWNTO 分别对应 ELSESYM,FORSYM,TOSYM,DOWNTOSYM,RETURNSYM;1nowfTG4KI 运算符 *= ,/= 分别对应 TIMESBECOMES, SLASHBECOMES. typedef enum NUL, IDENT, NUMBER, PLUS, MINUS, TIMES,fjnFLDa5Zo SLASH, ODDSYM, EQL, NEQ, LSS, LEQ, GTR, GEQ, LPAREN, RPAREN, COMMA, SEMICOLON, PERIOD, BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSY
17、M, WHILESYM, WRITESYM, READSYM, DOSYM, CALLSYM, CONSTSYM, VARSYM, PROCSYM, PROGSYM, ELSESYM,ELSESYM, FORSYM,FORSYM, TOSYM,TOSYM, DOWNTOSYM,DOWNTOSYM, TIMESBECOMES,TIMESBECOMES, SLASHBECOMESSLASHBECOMES SYMBOL; char *SYMOUT = NUL, IDENT, NUMBER, PLUS, MINUS, TIMES,tfnNhnE6e5 SLASH, ODDSYM, EQL, NEQ,
18、LSS, LEQ, GTR, GEQ,HbmVN777sL LPAREN, RPAREN, COMMA, SEMICOLON, PERIOD,V7l4jRB8Hs BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSYM,83lcPA59W9 WHILESYM, WRITESYM, READSYM, DOSYM, CALLSYM,mZkklkzaaP CONSTSYM, VARSYM, PROCSYM, PROGSYM, ELSESYM,ELSESYM, FORSYM,FORSYM, TOSYM,TOSYM, DOWNTOSYM,DOWNTOSYM, TIMESBEC
19、OMES,TIMESBECOMES, SLASHBECOMESSLASHBECOMES ; strcpy(KWORD 1,BEGIN); strcpy(KWORD 2,CALL);AVktR43bpw strcpy(KWORD 3,CONST); strcpy(KWORD 4,DO);ORjBnOwcEd strcpy(KWORDstrcpy(KWORD 5,DOWNTO);5,DOWNTO); strcpy(KWORDstrcpy(KWORD 6,ELSE);6,ELSE);2MiJTy0dTT strcpy(KWORD 7,END); strcpy(KWORDstrcpy(KWORD 8,
20、FOR);8,FOR);gIiSpiue7A strcpy(KWORD 9,IF); strcpy(KWORD10,ODD);uEh0U1Yfmh strcpy(KWORD11,PROCEDURE);strcpy(KWORD12,PROGRAM);IAg9qLsgBX strcpy(KWORD13,READ); strcpy(KWORD14,THEN); strcpy(KWORD15,TO);strcpy(KWORD15,TO);WwghWvVhPE strcpy(KWORD16,VAR); strcpy(KWORD17,WHILE);asfpsfpi4k strcpy(KWORD18,WRI
21、TE); WSYM 1=BEGINSYM; WSYM 2=CALLSYM; WSYM 3=CONSTSYM; WSYM 4=DOSYM; WSYMWSYM 5=DOWNTOSYM;WSYM5=DOWNTOSYM;WSYM 6=ELSESYM;6=ELSESYM; WSYM 7=ENDSYM; WSYMWSYM 8=FORSYM;8=FORSYM; WSYM 9=IFSYM; WSYM10=ODDSYM; WSYM11=PROCSYM; WSYM12=PROGSYM; WSYM13=READSYM; WSYM14=THENSYM; WSYM15=TOSYM;WSYM15=TOSYM; WSYM1
22、6=VARSYM; WSYM17=WHILESYM; WSYM18=WRITESYM; SSYM+=PLUS; SSYM-=MINUS; SSYM*=TIMES; SSYM/=SLASH; SSYM(=LPAREN; SSYM)=RPAREN; SSYM=EQL; SSYM,=COMMA; SSYM.=PERIOD; SSYM;=SEMICOLON; else if (CH=*) GetCh(); if (= = CH) SYM=TIMESBECOMES; GetCh(); else SYM=SSYM*; else if (CH=/) GetCh(); if (= = CH) SYM=SLAS
23、HBECOMES; GetCh(); else SYM=SSYM/; void TERM(SYMSET FSYS, int LEV, int FACTOR(SymSetUnion(FSYS,SymSetNew(TIMES,SLASH), LEV,TX); while (SYM=TIMES | SYM=SLASH | SYM=TIMESBECOMESSYM=TIMESBECOMES) BkeGuInkxI MULOP=SYM; GetSym(); FACTOR(SymSetUnion(FSYS,SymSetNew(TIMES,SLASH,TIMESBECOMESTIMESBECOMES),LEV
24、,TX); if (MULOP=TIMES) GEN(OPR,0,4);PgdO0sRlMo else GEN(OPR,0,5); /*TERM*/; intint flagflag = = 0;0;/标记处理地flag; void STATEMENT(SYMSET FSYS,int LEV,int switch (SYM) case IDENT: i=POSITION(ID,TX); if (i=0) Error(11); else if (TABLEi.KIND!=VARIABLE) /*ASSIGNMENT TO NON- VARIABLE*/h8c52WOngM Error(12);
25、i=0; GetSym(); ifif (SYM=BECOMES(SYM=BECOMES | SYM=TIMESBECOMESSYM=TIMESBECOMES | SYM=SLASHBECOMES)SYM=SLASHBECOMES) /处处 理乘等、除等理乘等、除等v4bdyGious ifif (SYM=TIMESBECOMES)(SYM=TIMESBECOMES) GEN(LOD,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR);GEN(LOD,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR); /先把先把 值存入栈值存入栈J0bm4qMpJ9 fl
26、agflag = = 1;1; /标记标记 最后要处理乘后存储值最后要处理乘后存储值XVauA9grYP ifif (SYM=SLASHBECOMES)(SYM=SLASHBECOMES) GEN(LOD,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR);GEN(LOD,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR); /先把先把 值存入栈值存入栈bR9C6TJscw flagflag = = 2;2; /标记标记 最后要处理除法后存储值最后要处理除法后存储值pN9LBDdtrd GetSym();GetSym(); elseelse Error(13
27、);Error(13); EXPRESSION(FSYS,LEV,TX);EXPRESSION(FSYS,LEV,TX); switchswitch (flag)(flag) casecase 1:1: /标标 记为记为1 1地时候处理乘法地时候处理乘法DJ8T7nHuGT GEN(OPR,0,4);flagGEN(OPR,0,4);flag = = 0;0; break;break; casecase 2:2: /标标 记为记为2 2地时候处理除法地时候处理除法QF81D7bvUA GEN(OPR,0,5);flagGEN(OPR,0,5);flag = = 0;0; break;break
28、; default:default: flagflag = = 0;0; break;break; ifif (i!=0)(i!=0) GEN(STO,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR);GEN(STO,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR);4B7a9QFw9h break;break; casecase FORSYM:FORSYM: GetSym();GetSym(); ifif (SYM(SYM = IDENT)IDENT) i i = = POSITION(ID,TX);POSITION(ID,TX); ifif (0(0
29、 = i)i) Error(11);Error(11); elseelse ifif (VARIABLE(VARIABLE !=!= TABLEi.KIND)TABLEi.KIND) Error(12);Error(12); i i = = 0;0; cscs = = i;i; GetSym();GetSym(); ifif (BECOMES(BECOMES = SYM)SYM) GetSym();GetSym(); elseelse Error(13);Error(13); EXPRESSION(SymSetUnion(SymSetNew(TOSYM,DOWNTOSYM),FSYS),LEV
30、,TX);EXPRESSION(SymSetUnion(SymSetNew(TOSYM,DOWNTOSYM),FSYS),LEV,TX);ix6iFA8xoX ifif (0(0 !=!= cs)cs) GEN(STO,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR);GEN(STO,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); elseelse Error(12);Error(12); ifif (TOSYM(TOSYM = SYM)SYM) GetSym();GetSym(); CX1CX1 = = CX;CX; EXPRESSION(
31、SymSetAdd(DOSYM,FSYS),LEV,TX);EXPRESSION(SymSetAdd(DOSYM,FSYS),LEV,TX); ifif (DOSYM(DOSYM = SYM)SYM) GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR);GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); GEN(OPR,0,11);GEN(OPR,0,11); CX2CX2 = = CX;CX; GEN(JPC,0,0);GEN(JPC,0,0); GetSym();GetSym(); STATEMENT(SymSe
32、tUnion(SymSetNew(SEMICOLON,ENDSYM),FSYS),LEV,TX);STATEMENT(SymSetUnion(SymSetNew(SEMICOLON,ENDSYM),FSYS),LEV,TX);wt6qbkCyDE GEN(LIT,0,2);GEN(LIT,0,2); GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR);GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); GEN(OPR,0,2);GEN(OPR,0,2); GEN(STO,LEV-TABLEcs.vp.LEVEL,TA
33、BLEcs.vp.ADR);GEN(STO,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); GEN(JMP,0,CX1);GEN(JMP,0,CX1); CODECX2.ACODECX2.A = = CX;CX; elseelse ifif (DOWNTOSYM(DOWNTOSYM = SYM)SYM) GetSym();GetSym(); CX1CX1 = = CX;CX; EXPRESSION(SymSetAdd(DOSYM,FSYS),LEV,TX);EXPRESSION(SymSetAdd(DOSYM,FSYS),LEV,TX); ifif (DOSYM(D
34、OSYM = SYM)SYM) GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR);GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); GEN(OPR,0,13);GEN(OPR,0,13); CX2CX2 = = CX;CX; GEN(JPC,0,0);GEN(JPC,0,0); GetSym();GetSym(); STATEMENT(SymSetUnion(SymSetNew(SEMICOLON,ENDSYM),FSYS),LEV,TX);STATEMENT(SymSetUnion(SymSetNew(SEMI
35、COLON,ENDSYM),FSYS),LEV,TX);Kp5zH46zRk GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR);GEN(LOD,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); GEN(LIT,0,2);GEN(LIT,0,2); GEN(OPR,0,3);GEN(OPR,0,3); GEN(STO,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR);GEN(STO,LEV-TABLEcs.vp.LEVEL,TABLEcs.vp.ADR); GEN(JMP,0,CX1);GEN(JMP,0,
36、CX1); CODECX2.ACODECX2.A = = CX;CX; elseelse Error(36);Error(36); break;break; 六运行界面六运行界面 七调试测试七调试测试 此代码可以同时测试所有实现地功能: PROGRAM EX01; VAR A,B,C,I; BEGIN A:=2; B:=8; C:=4; A*=C; WRITE(A); B/=C; WRITE(B); FOR I:=1 TO 9 DO WRITE(I); FOR I:=10 DOWNTO 1 DO WRITE(I); END. 八课程设计总结八课程设计总结 本次课程设计要对课程内容了解很透,否则实现起来很困难. 在经过一番努力之后,终于完成了课程地基本内容,实现了赋值运算 *=和/=地扩充以 及 Pascal 地 FOR 语句.但由于时间关系,而且选做内容难度更加大,未能实现其中地内容, 虽有些遗憾,但自己已经很努力去做这门课程设计了,也问心无愧了.Yl4HdOAA61 通过这次实验,我对编译原理这门课程有了更深刻地理解,同时也提升了自己地代码 分析能力和动手编程能力. 版权申明 本文部分内容
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 焊接专机装配工安全文化评优考核试卷含答案
- 浮选工QC管理考核试卷含答案
- 初中七年级心理健康教学设计:我的生活好帮手
- 初中英语七年级上册Unit 3单元整体教学设计:基于新中考导向的核心素养落实
- 初中八年级道德与法治《奉法者强则国强》教学设计
- 高二化学选择性必修1第1课时反应热与焓变教学设计
- 高三地理中国工业区域协同发展教学设计
- 内燃机装配工岗前竞争考核试卷含答案
- 互联网地图服务作业员岗中环保及安全考核试卷含答案
- 炭素混捏工安全知识宣贯强化考核试卷含答案
- 急救知识科普宣传
- Ⅱ度烧伤创面治疗专家共识(2024版)
- 压力容器材料代用规范与实践
- 天府特资(四川)投资管理有限公司2026年招聘笔试参考题库及答案详解
- 2026部编人教版二年级语文上册全册教案教学设计
- 2026年地产运营AI 解决方案合同
- 邀请招标文件
- 化工企业设备检修作业安全安全管理制度(AQ3026-2026)1408
- 中核集团2026届校园招聘笔试备考题库及答案解析
- 新22J01 工程做法图集
- 少先队入队学少先知识做先锋少年课件
评论
0/150
提交评论