




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、南華大學(xué) 編譯原理課程設(shè)計(jì)名:編譯代生 成器設(shè)計(jì) 專業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名 熊浩斌 班級(jí) 計(jì)算機(jī)01班 學(xué)號(hào) 20109440114 指導(dǎo)老師 陳星 實(shí)驗(yàn)地點(diǎn) 8 棟 2-209 完成日期:201362 一、課程設(shè)計(jì)的目的 編譯原理課程兼有很強(qiáng)的理論性和實(shí)踐性,是計(jì)算機(jī)專業(yè)的一門非常重要的專業(yè)基礎(chǔ)課 程,它在系統(tǒng)軟件中占有十分重要的地位,是計(jì)算機(jī)專業(yè)學(xué)生的一門主修課。為了讓學(xué)生能 夠更好地掌握編譯原理的基本理論和編譯程序構(gòu)造的基本方法和技巧,融會(huì)貫通本課程所學(xué) 專業(yè)理論知識(shí),提高他們的軟件設(shè)計(jì)能力,特設(shè)定該課程的課程設(shè)計(jì),通過設(shè)計(jì)一個(gè)簡(jiǎn)單的 PASCAL語言(EL語言)的編譯程序,提高
2、學(xué)生設(shè)計(jì)程序的能力,加深對(duì)編譯理論知識(shí)的理 解與應(yīng)用。 二、課程設(shè)計(jì)的要求 1、明確課程設(shè)計(jì)任務(wù),復(fù)習(xí)編譯理論知識(shí),查閱復(fù)印相關(guān)的編譯資料。 2、按要求完成課程設(shè)計(jì)內(nèi)容,課程設(shè)計(jì)報(bào)告要求文字和圖表工整、思路清晰、算法正 確。 3、寫出完整的算法框架。 4、編寫完整的編譯程序。 三、課程設(shè)計(jì)的內(nèi)容 課程設(shè)計(jì)是一項(xiàng)綜合性實(shí)踐環(huán)節(jié),是對(duì)平時(shí)實(shí)驗(yàn)的一個(gè)補(bǔ)充,課程設(shè)計(jì)內(nèi)容包括課程的 主要理論知識(shí),但由于編譯的知識(shí)量較復(fù)雜而且綜合性較強(qiáng),因而對(duì)一個(gè)完整的編譯程序不 適合平時(shí)實(shí)驗(yàn)。通過課程設(shè)計(jì)可以達(dá)到綜合設(shè)計(jì)編譯程序的目的。本課程的課程設(shè)計(jì)要求學(xué) 生編寫一個(gè)完整的編譯程序,包括詞法分析器、語法分析器以及實(shí)現(xiàn)
3、對(duì)簡(jiǎn)單程序設(shè)計(jì)語言中 的邏輯運(yùn)算表達(dá)式、算術(shù)運(yùn)算表達(dá)式、賦值語句、IF語句、While語句以及dowhile語句 進(jìn)行編譯,并生成中間代碼和直接生匯編指令的代碼生成器。 四、總體設(shè)計(jì)方案及詳細(xì)設(shè)計(jì) 總體設(shè)計(jì)方案: 1. 總體模塊 2. 表2.1各種單詞符號(hào)對(duì)應(yīng)的種別碼 單詞符號(hào) 種別碼 單詞符號(hào) 種別碼 bgin 1 : 17 If 2 18 The n 3 20 wile 4 21 do 5 23 lettet (letter|digit)* 10 = 24 dight dight* 11 = 25 + 13 ; 26 一 14 ( 27 * 15 ) 28 / 16 # 0 詳細(xì)設(shè)計(jì): 4
4、.1界面導(dǎo)入設(shè)計(jì) (1) 一共三個(gè)選項(xiàng): choice 1cifafe nxi choice 2yufafenxi choice 3zhon gjia ndaima (2) 界面演示 圖一 圖三 C: IDOCUIE *11 eno?oi桌百 t 已 st t ry. ex e chnire 1ifdfenxi choire 1vufenxi choice 3zhongjundaifui If wwWWtfWfrWfl H wttT1 H WWtf FWWIf frWWW R 齊F WWW“ TlrWWtTWTTW *Tff 1TWF丹WWW ! frWWWFit BWW lie lea ne
5、! ?! (cifafenxi) please input a strlnifCenid uith 1 tJ )i/n hi II ! 1,1 la ii mi .i ii, ii ui mi u i,11 in u ii u u in 11 i i【i ii u in u, bi i.i n la ii iim ! ! ii ii ti m ib ii hi ! m tm# U Htlt# Rtttflfl 北 m# -BHUfl wUtlt# tlmfl ?#ni choice 1iffenxi choke 2jufftfonxi choke 3kngjiAndaina l/e Leone
6、! f(cifAfenxi) please input a Eti*Lnj(eni uith Jf ):Ail Ifels 時(shí)卄!(ynf 才馴gi please input a string ei( uith); 4.2詞法分析程序 (2) 具體功能的具體設(shè)計(jì) 1、 cifafenxi( ) 首先設(shè)置 progn 來接收輸入的語句,以 #來結(jié)束; 調(diào)用掃描子程序 scaner1( ),每一次得到一個(gè)類型碼; 用 switch 判別相應(yīng)輸出; 直到 syn1=0 為止。 2、掃描子程序 scaner1( ) 掃描輸入的語句 首先設(shè)置 3個(gè)變量 : token1 用來存放構(gòu)成單詞符號(hào)的字符串;
7、suml用來存放整型單詞; syn1 用來存放單詞符號(hào)的類型碼。 有關(guān) scaner1() 中關(guān)鍵點(diǎn)解析: while(ch= )|(ch=n) ch=progp+; ;忽略空格 if(ch=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0) ch=progp+; ;判別標(biāo)識(shí)符 for(n=0;n=0) printf(Move %5s,Axn,fourComi.result); if(strcmp(fourComi.opera,+)=0) prin tf(Mov AX,%1sn,fourComi.arg1); prin tf(ADD Ax,%1sn,fourComi.arg
8、2); prin tf(Mov %1s,Axn,fourComi.result); if(strcmp(fourComi.opera,- )=0) prin tf(Mov AX,%1sn,fourComi.arg1); prin tf(SUB Ax,%1sn,fourComi.arg2); prin tf(Mov %1s,Axn,fourComi.result); if(strcmp(fourComi.opera,*)=0) prin tf(Mov AL,%1sn,fourComi.arg1); prin tf(MUL %1sn,fourComi.arg2); prin tf(Mov %1s,
9、Axn,fourComi.result); if(strcmp(fourComi.opera,/)=0) prin tf(Mov AX,%1sn,fourComi.arg1); printf(Dlv %1sn,fourComi.arg2); printf(Mov %1s,ALn,fourComi.result); if(strcmp(fourComi.opera,goto)=0) prin tf(jmp L%1sn ,i); 結(jié)果演示 五、課程設(shè)計(jì)的體會(huì)與總結(jié) 經(jīng)過一個(gè)星期的編譯原理課程設(shè)計(jì),本人在陳宏建老師的指導(dǎo)下,順利完成該課程 設(shè) 計(jì)。通過該課程設(shè)計(jì),收獲頗多。 詞法分析的基本任務(wù)是從字
10、符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào),其 基本思想是根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的種類,拼出相應(yīng)的單詞符號(hào)。通過本試驗(yàn)的 完成,更加加深了對(duì)詞法分析原理的理解。 通過本次試驗(yàn),了解了語法分析的運(yùn)行過程,主程序大致流程為:“置初值” 調(diào)用 scaner函數(shù)讀下一個(gè)單詞符號(hào) 調(diào)用IrParse結(jié)束。遞歸下降分析的大致流程為:“先判斷 是否為begin” 不是則“出錯(cuò)處理”,若是則“調(diào)用scaner函數(shù)” 調(diào)用語句串分析函數(shù) “判斷是否為end”不是則“出錯(cuò)處理”,若是則調(diào)用scaner函數(shù) “判斷syn=O #define MAX 100 char inputstream50; / 存
11、儲(chǔ)輸入句子 int temp1=0; /數(shù)組下標(biāo) int right1;/判斷輸出信息 int m2=0,sum2=0;/sum 用于計(jì)算運(yùn)算符的個(gè)數(shù) /m 用于標(biāo)記輸入表達(dá)式中字符的個(gè)數(shù) char JG=A; char strMAX;/ 用于存輸入表達(dá)式 int tokene=0;/ 左括號(hào)的標(biāo)志 char prog180,token18,ch1; int syn1,p1,m1,n1,sum1; char *rwtab16=begin,if,then,while,do,end; int r1 ; char prog80; / 存放所有輸入字符 char token8; / 存放詞組 char
12、 ch; / 單個(gè)字符 int syn,p,m,n,i; /syn: 種別編碼 double sum; int count; int isSignal; / 是否帶正負(fù)號(hào) (0 不帶, 1 負(fù)號(hào), 2 正號(hào)) int isError; int isDecimal; / 是否是小數(shù) double decimal; /小數(shù) int isExp; / 是否是指數(shù) int index; /指數(shù)冪 int isNegative; / 是否帶負(fù)號(hào) double temp; int temp2; int repeat; / 是否連續(xù)出現(xiàn) +,- int nextq; int kk; / 臨時(shí)變量的標(biāo)號(hào) in
13、t ntc,nfc,nnc,nnb,nna; char *rwtab9=main,int,float,double,char,if,else,do,while; struct char result10; / 字符串(字符數(shù)組) char arg110; char opera10; char arg210; fourCom20; / 結(jié)構(gòu)體數(shù)組 cifafenxi(); yufafenxi(); zhongjiandaima(); scaner1(); void e(); void e1(); void t(); void t1(); void f(); void lrparser(); vo
14、id staBlock(int *nChain); / 語句塊 void staString(int *nChain); / 語句串 void sta(int *nChain); / 語句 void fuzhi(); / 賦值語句 void tiaojian(int *nChain); / 條件語句 void xunhuan(); / 循環(huán)語句 char* E(); /Expresiion 表達(dá)式 char* T(); /Term 項(xiàng) char* F(); /Factor 因子 char *newTemp(); / 自動(dòng)生成臨時(shí)變量 void backpatch(int p,int t); /
15、 回填 int merge(int p1,int p2); / 合并 p1 和 p2 void emit(char *res,char *num1,char *op,char *num2); / 生成四元式 void scanner(); / 掃描 void lrparser() int nChain; nfc=ntc=1; nextq=1; if(syn=1) /main scanner(); if(syn=26) /( scanner(); if(syn=27) /) scanner(); staBlock( else printf( 缺少右括號(hào) n); else printf( 缺少左括
16、號(hào) n); else printf( 缺少 mainn); / := void staBlock(int *nChain) / 語句塊 if(syn=28) / scanner(); staString(nChain); /backpatch(*nChain,nextq); if(syn=29) / scanner(); / 讀下一個(gè) else printf( 缺少 號(hào) n); else printf(缺少號(hào)n”); /:= ; void staString(int *nChain) / 語句串 sta(nChain); backpatch(*nChain,nextq); while(syn=
17、31) /; scanner(); sta(nChain); /backpatch(*nChain,nextq-1); void sta(int *nChain) / 語句 if(syn=10) fuzhi(); /*nChain=0; else if(syn=6) /if tiaojian(nChain); else if(syn=8) /do xunhuan(); /-if() void tiaojian(int *nChain) char res10,num110,num210,op10; int nChainTemp; /- if(syn=6) /if scanner(); /strc
18、py(num1,E(); if(syn=26) /( scanner(); strcpy(num1,E(); if(syn=32) switch(syn) case 32: strcpy(op,); break; case 33: strcpy(op,=); break; case 34: strcpy(op,); break; case 35: strcpy(op,=); break; case 36: strcpy(op,=); break; case 37: strcpy(op,!=); break; default: printf(error); scanner(); strcpy(n
19、um2,E(); strcat(num1,op); strcat(num1,num2); /nfc=nextq+1; ntc=nextq; / 記住 if 語句位置 emit(0,if,num1,goto); nfc=nextq; /if 中表達(dá)式為假 emit(0,goto); nextq /第一個(gè) 0 已回填 backpatch(ntc,nextq); /ntc 鏈接的所有四元式都回填 if(syn=27) /) scanner(); staBlock( / 語句塊 *nChain=merge(nChainTemp,nfc); /:=do while void xunhuan() char
20、 res10,num110,num210,op10; int nChainTemp; if(syn=8) /do nnc=nextq; /記住 if 語句位置, emit 之后 nextq 就變了 /emit(0,if,num1,goto); scanner(); staBlock( / 語句塊 if(syn=9) /while scanner(); if(syn=26) /( scanner(); strcpy(num1,E(); if(syn=32) switch(syn) case 32: strcpy(op,); break; case 33: strcpy(op,=); break;
21、 case 34: strcpy(op,); break; case 35: strcpy(op,=); break; case 36: strcpy(op,=); break; case 37: strcpy(op,!=); break; default: printf(error); scanner(); strcpy(num2,E(); strcat(num1,op); strcat(num1,num2); nnb=nextq; emit(0,if,num1,goto); backpatch(nnb,nnc); nna=nextq; emit(0,goto); backpatch(nna
22、,nextq); if(syn=27) /) scanner(); void fuzhi() / 賦值語句只有 1 個(gè)操作數(shù) char res10,num10; /num 操作數(shù) if(syn=10) / 字符串 strcpy(res,token); / 結(jié)果 scanner(); if(syn=21) /= scanner(); strcpy(num,E(); emit(res,num,=,); else printf( 缺少 =號(hào) n); char* E() /Expression 表達(dá)式 char *res,*num1,*op,*num2; res=(char *)malloc(10);
23、 num1=(char *)malloc(10); op=(char *)malloc(10); num2=(char *)malloc(10); strcpy(num1,T(); while(syn=22)|(syn=23) /+ - if(syn=22) /+ strcpy(op,+); else strcpy(op,-); scanner(); strcpy(num2,T(); strcpy(res,newTemp(); emit(res,num1,op,num2); strcpy(num1,res); return num1; char* T() /Term 項(xiàng) char *res,*
24、num1,*op,*num2; res=(char *)malloc(10); num1=(char *)malloc(10); op=(char *)malloc(10); num2=(char *)malloc(10); strcpy(num1,F(); while(syn=24)|(syn=25) /* / if(syn=24) strcpy(op,*); else strcpy(op,/); scanner(); strcpy(num2,F(); strcpy(res,newTemp(); emit(res,num1,op,num2); strcpy(num1,res); return
25、 num1; char* F() /Factor 因子 char *res; res=(char *)malloc(10); if(syn=10) / 字符串 strcpy(res,token); scanner(); else if(syn=20) / 二進(jìn)制數(shù) itoa(int)sum,res,10); / 整數(shù)轉(zhuǎn)換為字符串 scanner(); else if(syn=26) /( scanner(); res=E(); if(syn=27) /) scanner(); else isError=1; else isError=1; return res; char *newTemp()
26、 char *p; char varTemp10; p=(char *)malloc(10); kk+; itoa(kk,varTemp,10); strcpy(p+1,varTemp); p0=T; return p; /將 p 所鏈接的每個(gè)四元式的第四個(gè)分量都回填t void backpatch(int p,int t) int w,circle=p; while(circle) /circle 不為 0 的時(shí)候 w=atoi(fourComcircle.result); / 四元式 circle 第四分量?jī)?nèi)容 /strcpy(fourComcircle.result,t); / 把 t
27、填進(jìn)四元式 circle 的第四分量 sprintf(fourComcircle.result,%d,t); circle=w; /w 記錄的是鏈條上下一個(gè)四元式,移動(dòng)! return; int merge(int p1,int p2) / 合并 p1 和 p2 char circle,nResult; if(p2=0) nResult=p1; else nResult=circle=p2; while(atoi(fourComcircle.result) / 四元式第四個(gè)分量不為 0 circle=atoi(fourComcircle.result); /strcpy(fourComcirc
28、le.result,p1); sprintf(fourComcircle.result,%s,p1); /目的是用 p1 的值覆蓋 0 return nResult; /p2 是頭, p1 覆蓋 0,接在 p2 后邊 void emit(char *res,char *num1,char *op,char *num2) strcpy(fourComnextq.result,res); strcpy(fourComnextq.arg1,num1); strcpy(fourComnextq.opera,op); strcpy(fourComnextq.arg2,num2); nextq+; voi
29、d scanner() sum=0; decimal=0; m=0; for(n=0;n=a) / 讀下一個(gè)字符 tokenm+=0; p-; / 回退一格 syn=10; / 標(biāo)識(shí)符 標(biāo)識(shí)符中的一個(gè) /如果是 begin,if,then,while,do,end for(n=0;n=0) ch=progp+; /10 的冪 /123e3 代表 123*10(3) /sum=sum*pow(10,index); 是錯(cuò)誤的 if(isNegative) sum=sum*pow(0.1,index); else sum=sum*pow(10,index); if(isSignal=1) sum=-
30、sum; isSignal=0; p-; syn=20; else switch(ch) case : m=0; tokenm+=ch; ch=progp+; if(ch=) syn=33; tokenm+=ch; else syn=32; p-; break; case =: m=0; tokenm+=ch; ch=progp+; if(ch=) syn=36; tokenm+=ch; else syn=21; p-; break; case +: temp2=progp; tokenm+=ch; if(temp2=0) ch=progp+; / 讀 - 下一個(gè)字符 repeat=0; go
31、to IsNum; / 轉(zhuǎn)到數(shù)字的識(shí)別 /如果重復(fù)出現(xiàn)符號(hào),才將后邊 if(temp2=+)|(temp2=-) / 預(yù)言會(huì)重復(fù) /ch=progp+; / 讀下一個(gè)字符 syn=23; break; 1*1. temp2=progp; tokenm+=ch; if(temp2=+) isSignal=2; repeat=1; else if(temp2=-) isSignal=1; repeat=1; syn=24; break; case /: syn=25; tokenm+=ch; break; case (: temp2=progp; tokenm+=ch; if(temp2=+) i
32、sSignal=2; repeat=1; else if(temp2=-) isSignal=1; repeat=1; syn=26; break; case ): syn=27; tokenm+=ch; break; case : syn=28; tokenm+=ch; break; case : syn=29; tokenm+=ch; break; case ,: syn=30; tokenm+=ch; break; case ;: syn=31; tokenm+=ch; break; case#: syn=0; tokenm+=ch; break; default: syn=-1; zh
33、ongjiandaima() p=0; count=0; isDecimal=0; index=0; repeat=0; kk=0; printf(nPlease input your source string:n); do ch=getchar(); progp+=ch; while(ch!=#); p=0; isError=0; scanner(); lrparser(); for(i=1;inextq;i+) / 循環(huán)輸出四元式 printf(n%dt,i); printf(%3s, %3s ,%3s , %3s )n,fourComi.opera,fourComi.arg1,four
34、Comi.arg2,fou rComi.result); if(strcmp(fourComi.opera,=)=0) printf(Move AX,%1sn,fourComi.arg1); printf(Move %5s,Axn,fourComi.result); if(strcmp(fourComi.opera,+)=0) printf(Mov AX,%1sn,fourComi.arg1); printf(ADD Ax,%1sn,fourComi.arg2); printf(Mov %1s,Axn,fourComi.result); if(strcmp(fourComi.opera,-)=
35、0) printf(Mov AX,%1sn,fourComi.arg1); printf(SUB Ax,%1sn,fourComi.arg2); printf(Mov %1s,Axn,fourComi.result); if(strcmp(fourComi.opera,*)=0) printf(Mov AL,%1sn,fourComi.arg1); printf(MUL %1sn,fourComi.arg2); printf(Mov %1s,Axn,fourComi.result); if(strcmp(fourComi.opera,/)=0) printf(Mov AX,%1sn,fourC
36、omi.arg1); printf(DIv %1sn,fourComi.arg2); printf(Mov %1s,ALn,fourComi.result); if(strcmp(fourComi.arg2,goto)=0 printf(jnc %1sn,fourComi.result); else printf(jmp %1sn,fourComi.result); return; void main() printf( n); printf( n); printf( II II II II II II II II II II II II II II II II II II II II II
37、II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a n); printf( choice
38、 1cifafenxin); printf( choice 2yufafenxin); printf( choice 3zhongjiandaimann); printf( a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
39、 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a n); scanf(%d, do switch(r1) case 1: cifafenxi(); scanf(%d, break; case 2:yufafenxi() ; scanf(%d, break; case 3:zhongjiandaima(); scanf(%d, break; default: printf(error,please input again); break; p1=0; printf( printf(n do Welcome!(cifafe
40、nxi) please input a string(end with #):/n); cifafenxi() while(r1!=0); scanf(%c, prog1p1+=ch1; while(ch1!=#); p1=0; do scaner1(); switch(syn1) case 11:printf( %-10d%5d )n,sum1,syn1); break; case -1:printf(you have input a wrong stringn); exit(0); default: printf( %-10s%5d )n,token1,syn1); break; whil
41、e(syn1!=0); scaner1() sum1=0; for(m1=0;m18;m1+)token1m1+=NULL; ch1=prog1p1+; m1=0; while(ch1= )|(ch1=n)ch1=prog1p1+; if(ch1=a)|(ch1=A) while(ch1=a)|(ch1=A)|(ch1=0) ch1=prog1p1+; p1-; syn1=10; for(n1=0;n1=0) ch1=prog1p1+; p1-; syn1=11; else switch(ch1) case :token1m1+=ch1; ch1=prog1p1+; if(ch1=) syn1=24; token1m1+=ch1; else syn1=23; p1-; break; case +: token1m1+=ch1; ch1=prog1p1+; if(ch1=+) syn1=17; to
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年紅外濾光片項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年男式勞保服項(xiàng)目可行性研究報(bào)告
- 2025年中國(guó)蒲地藍(lán)消炎片市場(chǎng)競(jìng)爭(zhēng)格局及投資戰(zhàn)略規(guī)劃報(bào)告
- 散熱器項(xiàng)目可行性研究報(bào)告
- 2025年天然筍尖行業(yè)深度研究分析報(bào)告
- 智能云倉物流項(xiàng)目建議書
- 《垂線與平行線》(共2課時(shí))(教學(xué)設(shè)計(jì))-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)蘇教版
- 基坑維護(hù)施工合同范本
- 2025年度智能房屋買賣合同與數(shù)字化房屋交易服務(wù)協(xié)議
- 凸緣型軟管行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 水刀除銹施工方案
- 英語-廣東省大灣區(qū)2025屆高三第一次模擬試卷和答案
- 2024年06月日照銀行社會(huì)招聘筆試歷年參考題庫附帶答案詳解
- 醫(yī)院培訓(xùn)課件:《靜脈采血法并發(fā)癥的預(yù)防及處理》
- 《修繕學(xué)習(xí)交底資料》課件
- 2024-2025學(xué)年高二上學(xué)期期末復(fù)習(xí)解答題壓軸題十七大題型專練(范圍:第四、五章)(含答案)
- 單層鋼結(jié)構(gòu)工業(yè)廠房施施工組織設(shè)計(jì)
- 投資公司組織架構(gòu)和運(yùn)作流程
- 筑牢安全防線共創(chuàng)平安校園
- 2024年大學(xué)生電子版三方協(xié)議書模板
- GB/T 44619-2024福壽螺檢疫鑒定方法
評(píng)論
0/150
提交評(píng)論