編譯原理課程設(shè)計(jì)_第1頁(yè)
編譯原理課程設(shè)計(jì)_第2頁(yè)
編譯原理課程設(shè)計(jì)_第3頁(yè)
編譯原理課程設(shè)計(jì)_第4頁(yè)
編譯原理課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、編譯原理課程設(shè)計(jì)報(bào)告太 原 學(xué) 院課程設(shè)計(jì)報(bào)告書(shū)課程名稱 編譯原理 設(shè)計(jì)題目 構(gòu)造LR(0)分析法語(yǔ)法分析器 專業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)13-4班 學(xué) 號(hào) 20130905405 姓 名 王芳芳 指導(dǎo)教師 吳海麗 2016年 12 月 15日1目 錄一、課題概述1二、系統(tǒng)分析221 本課程設(shè)計(jì)的知識(shí)點(diǎn)22.1.1 詞法編譯器功能22.1.2 詞法分析器的設(shè)計(jì)22.1.3 動(dòng)態(tài)模擬算法的基本功能22.1.4 LR分析器的構(gòu)成22. 2解決問(wèn)題的基本思路323 需解決的關(guān)鍵技術(shù)324 功能模塊框圖3三、系統(tǒng)設(shè)計(jì)431 算法描述43. 2 實(shí)現(xiàn)方法63.2.1 構(gòu)造分析表63.2.2程序設(shè)計(jì)關(guān)鍵63

2、.2.3 LR(0)項(xiàng)目集規(guī)范族的構(gòu)造633 詳細(xì)流程圖7四、代碼編寫8 4. 1 生成分析表代碼8 4. 2分析句子代碼10五、調(diào)試分析14六、運(yùn)行與調(diào)試15總 結(jié) 17參考文獻(xiàn)181、 課題概述 編譯原理是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)課程,其中包含大量軟件設(shè)計(jì)思想。通過(guò)課程設(shè)計(jì),實(shí)現(xiàn)一些重要的算法,或設(shè)計(jì)一個(gè)完整的編譯程序模型,能夠進(jìn)一步加深理解和掌握所學(xué)知識(shí),對(duì)提高自己的軟件設(shè)計(jì)水平具有十分重要的意義。語(yǔ)法分析是編譯過(guò)程的第二階段,是編譯器前端的核心組成部分,在編譯系統(tǒng)中起到了至關(guān)重要的作用。自底向上的語(yǔ)法分析與自頂向下的語(yǔ)法分析相比,對(duì)將要分析的源程序有著更大的分析空間,從而受到了廣泛的

3、運(yùn)用。 本次課程設(shè)計(jì)的目標(biāo)即是利用所學(xué)過(guò)的編譯原理的知識(shí),利用LR(0)分析法,用C語(yǔ)言寫出一個(gè)簡(jiǎn)單的LR(0)語(yǔ)法分析器。該語(yǔ)法分析器所要完成的功能是,對(duì)錄入的文法判斷它是否為L(zhǎng)R(0)文法,如果是輸出LR (0)分析表;在給定文法的情況下,能夠利用LR(0)分析表,對(duì)用戶輸入的一串字符串用LR(0)分析法進(jìn)行分析,判斷該字符串是否為符合給定文法的一個(gè)句子,建立文法及其LR分析表表示的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)并實(shí)現(xiàn)一個(gè)LR(0)的分析器。編譯器設(shè)計(jì)的編譯程序涉及到編譯五個(gè)階段中的三個(gè),即詞法分析器、語(yǔ)法分析器和中間代碼生成器。編譯程序的輸出結(jié)果包括詞法分析后的二元式序列、變量名表、狀態(tài)棧分析

4、過(guò)程顯示及四元式序列程序。整個(gè)編譯程序分為三部分:詞法分析部分、語(yǔ)法分析處理及四元式生成部分、輸出顯示部分。一個(gè)程序設(shè)計(jì)語(yǔ)言就是一個(gè)記號(hào)系統(tǒng),如同自然語(yǔ)言一樣,它的完整的定義應(yīng)包括語(yǔ)法和語(yǔ)義兩個(gè)方面。所謂一個(gè)語(yǔ)言的語(yǔ)法是指一組規(guī)則,用它可以形成和產(chǎn)生一個(gè)合適的程序。目前廣泛使用的手段是上下文無(wú)關(guān)文法,即用上下文無(wú)關(guān)文法作為程序設(shè)計(jì)語(yǔ)言語(yǔ)法的描述工具。LR分析法正是給出一種能根據(jù)當(dāng)前分析棧中的符號(hào)串(通常以狀態(tài)表示)和向右順序查看輸人串的k個(gè)(k>=0)符號(hào)就可惟一地確定分析器的動(dòng)作是移進(jìn)還是歸約和用哪個(gè)產(chǎn)生式歸約,因而也就能惟一地確定句柄。LR分析法的歸約過(guò)程是規(guī)范推導(dǎo)的逆過(guò)程,所以LR

5、分析過(guò)程是一種規(guī)范歸約過(guò)程。 二、系統(tǒng)分析2.1 本課程設(shè)計(jì)涉及的知識(shí)點(diǎn)2.1.1 詞法編譯器功能(1)導(dǎo)入任意文法,也可以自己輸入。(2)輸出文法的分析過(guò)程,以及判斷是否為L(zhǎng)R (0)文法,輸出分析表。(3)輸入句子,進(jìn)行語(yǔ)法分析。(4)輸出結(jié)構(gòu)樹(shù)。2.1.2 詞法分析器的設(shè)計(jì)(1)寫出該語(yǔ)言的詞法規(guī)則。(2)把詞法規(guī)則轉(zhuǎn)換為相應(yīng)的狀態(tài)轉(zhuǎn)換圖。(3)把各轉(zhuǎn)換圖的初態(tài)連在一起,構(gòu)成識(shí)別該語(yǔ)言的自動(dòng)機(jī)。(4)設(shè)計(jì)掃描器;把掃描器作為語(yǔ)法分析的一個(gè)過(guò)程,當(dāng)語(yǔ)法分析需要一個(gè)單詞時(shí),就調(diào)用掃描器。掃描器從初態(tài)出發(fā),當(dāng)識(shí)別一個(gè)單詞后便進(jìn)入終態(tài),送出二元式。2.1.3 動(dòng)態(tài)模擬算法的基本功能(1

6、)輸入LR分析表和一個(gè)句子。(2)輸出LR總控程序。(3)輸出依據(jù)句子構(gòu)對(duì)應(yīng)的語(yǔ)法樹(shù)的過(guò)程。(4)設(shè)計(jì)一個(gè)給定LR分析表,輸入一個(gè)句子,能由依據(jù)LR分析表輸出與句子對(duì)應(yīng)的語(yǔ)法樹(shù),能對(duì)語(yǔ)法樹(shù)生成過(guò)程進(jìn)行模擬。(5)輸入句子:bccd#。(6)根據(jù)文法產(chǎn)生的LR分析表。(7)輸出結(jié)果2.1.4 LR分析器的構(gòu)成一個(gè)LR分析器由個(gè)部分組成(1)總控程序,也可以稱為驅(qū)動(dòng)程序。對(duì)所有的LR分析器,總控程序都是相同的。(2)分析表或分析函數(shù)。不同的文法分析表將不同,同一個(gè)文法采用的LR分析器不同時(shí),分析表也不同,分析表又可以分為動(dòng)作(ACTION)表和狀態(tài)(GOTO)表兩個(gè)部分,它們都可用二維數(shù)組表示。(

7、3)分析棧,包括文法符號(hào)和相應(yīng)的狀態(tài)棧。它們均是先進(jìn)后出棧。分析器的動(dòng)作由棧頂狀態(tài)和當(dāng)前輸入符號(hào)所決定(LR(0)分析器不需向前查看輸入符號(hào))。2.2解決問(wèn)題的基本思路1、用構(gòu)造一個(gè)狀態(tài)轉(zhuǎn)換函數(shù)實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換。2、再通過(guò)函數(shù)構(gòu)造一個(gè)移進(jìn)歸約函數(shù)實(shí)現(xiàn)移進(jìn)規(guī)約動(dòng)作。3、采用構(gòu)造一個(gè)打印LR分析器的工作過(guò)程函數(shù)實(shí)現(xiàn)輸出。 在規(guī)范規(guī)約的過(guò)程中,一方面記住已移進(jìn)和規(guī)約出的整個(gè)符號(hào)串,另一方面根據(jù)所用的產(chǎn)生式推測(cè)可能碰到的輸入符號(hào)。每一項(xiàng)ACTION(s,a)所規(guī)定的動(dòng)作不外是下述四種可能之一:(1)移進(jìn)(2)規(guī)約(3)接受(4)報(bào)錯(cuò)。2.3 需解決的關(guān)鍵技術(shù)(1)詞法編譯器。(2)交互式面向?qū)ο蟮脑~法編譯

8、器基本功能是。(3)根據(jù)規(guī)約規(guī)則對(duì)字符進(jìn)行歸約。 (4)符合條件時(shí)采取移進(jìn)動(dòng)作。2.4 功能模塊框圖運(yùn)行程序給出該程序所運(yùn)用的文法和LR分析表用戶輸入字符串程序給出結(jié)果圖1 功能模塊框圖三、系統(tǒng)設(shè)計(jì)3.1 算法描述1、已知文法G(1) EE+T(2) ET(3) TT*F(4) TF(5) F(E)(6) Fi2、LR(0)分析表的構(gòu)造算法如下:假設(shè)已構(gòu)造出LR(0)項(xiàng)目集規(guī)范族為:C=I0,I1, , In,其中Ik為項(xiàng)目集的名字,k為狀態(tài)名,令包含S·S項(xiàng)目的集合Ik的下標(biāo)k為分析器的初始狀態(tài)。那么分析表的ACTION表和GOTO表構(gòu)造步驟為:(1) 若項(xiàng)目A·a屬于I

9、k且轉(zhuǎn)換函數(shù)GO(Ik,a)= Ij,當(dāng)a為終結(jié)符時(shí)則置ACTIONk,a為Sj,其動(dòng)作含意為將終結(jié)符a移進(jìn)符號(hào)棧,狀態(tài)j進(jìn)入狀態(tài)棧,(相當(dāng)狀態(tài)k時(shí)遇a轉(zhuǎn)向狀態(tài)j)。(2) 若項(xiàng)目A· 屬于Ik,則對(duì)任何終結(jié)符a 和'#'號(hào)置ACTIONk,a和ACTIONk,#為"rj",j為在文法G中某產(chǎn)生式A的序號(hào)。rj動(dòng)作的含義是把當(dāng)前文法符號(hào)棧頂?shù)姆?hào)串歸約為A,并狀態(tài)棧指針從棧頂向下移動(dòng)|的長(zhǎng)度 , 文法符號(hào)棧從棧頂彈出|個(gè)符號(hào),非終結(jié)符A變?yōu)楫?dāng)前面臨的符號(hào)。(3) 若GO(Ik,A)Ij,則置GOTOk,A為"j",其中A為非終結(jié)

10、符,表示當(dāng)前狀態(tài)為"k"時(shí),遇文法符號(hào)A時(shí)狀態(tài)應(yīng)轉(zhuǎn)向j,因此A移入文法符號(hào)棧,j移入狀態(tài)棧。(4) 若項(xiàng)目SS·屬于Ik,則置ACTIONk,#為"acc",表示接受。(5) 凡不能用上述方法填入的分析表的元素,均應(yīng)填上"報(bào)錯(cuò)標(biāo)志"。為了表的清晰我們僅用空白表示錯(cuò)誤標(biāo)志。根據(jù)這種方法構(gòu)造的LR(0)分析表不含多重定義時(shí),稱這樣的分析表為L(zhǎng)R(0)分析表,能用LR(0)分析表的分析器稱為L(zhǎng)R(0)分析器,能構(gòu)造LR(0)分析表的文法稱為L(zhǎng)R(0)文法。3、 產(chǎn)生如下所示的LR分析表 STATEACTIONGOTOabcd#ET

11、F0S2S311acc2S4S1063S5S474S4S1085S5S1196r1r1r1r1r17r2r2r2r2r28r3r3r3r3r39r5r5r5r5r510r4r4r4r4r411r6r6r6r6r6 表 1 LR分析表這張分析表包括兩個(gè)部分,一是“動(dòng)作”(ACTION)表,另一是“狀態(tài)轉(zhuǎn)換”(GOTO)表。ACTION(S,a)規(guī)定了當(dāng)狀態(tài)S面臨輸入符號(hào)a時(shí)應(yīng)采取什么動(dòng)作。GOTO(S,X)規(guī)定了狀態(tài)S面對(duì)文法符號(hào)X(終結(jié)符或非終結(jié)符)時(shí)下一狀態(tài)是什么。顯然,GOTO(S,X)定義了一個(gè)以文法符號(hào)為字母表的DFA。其中,S0為分析器的初態(tài);為句子的左括號(hào);a1a2an為輸入串;其

12、后的為結(jié)束符(句子右括號(hào))。分析過(guò)程每步的結(jié)果可表示為:(S0S1Sm,#X1X2Xm ai, ai+1an#)。3.2 實(shí)現(xiàn)方法3.2.1 構(gòu)造分析表LR分析器實(shí)質(zhì)上是一個(gè)帶先進(jìn)后出存儲(chǔ)器(棧)的確定有限狀態(tài)自動(dòng)機(jī)。LR分析器的每一步工作是由棧頂狀態(tài)和現(xiàn)行輸入符號(hào)所唯一決定的。構(gòu)造一個(gè)int型二維數(shù)組table139,用于存放LR分析表。并初始化。作者這樣規(guī)定:011 表示 狀態(tài)Sj,其中0對(duì)應(yīng)S0,1對(duì)應(yīng)S12126 表示 規(guī)約Rj,其中21對(duì)應(yīng)R1,22對(duì)應(yīng)R212 表示 “接受”。-1 表示 規(guī)約出錯(cuò),報(bào)錯(cuò)。3.2.2程序設(shè)計(jì)關(guān)鍵(1)在輸入串(句子)輸入的過(guò)程中,涉及到一個(gè)壓棧的問(wèn)題

13、。但是輸入串壓入的字符順序剛好與原理中的字符串模型剛好相反,這樣需要先彈出的反而在棧底。為了既要保證字符串輸入,又要讓輸入的字符串存儲(chǔ)順序與輸入的字符串相反。采取以下措施:先將輸入的字符串壓入符號(hào)棧symbol中,然后符號(hào)棧彈出的字符再壓入輸入串棧instr中,這樣實(shí)現(xiàn)了輸入串的倒序存儲(chǔ)。(2)狀態(tài)棧和符號(hào)棧輸出(遍歷)過(guò)程均采取自棧底到棧頂?shù)捻樞?,而輸入串棧則是采取自棧頂?shù)綏5椎捻樞蜉敵觥?.2.3 LR(0)項(xiàng)目集規(guī)范族的構(gòu)造識(shí)別活前輟的NFA我們可以利用子集法將其確定化。對(duì)確定化后的DFA如果把每個(gè)子集中所含狀態(tài)集對(duì)應(yīng)的項(xiàng)目寫在新的狀態(tài)中。對(duì)于構(gòu)成識(shí)別一個(gè)文法活前綴的DFA項(xiàng)目集(狀態(tài))

14、的全體稱為這個(gè)文法的LR(0)項(xiàng)目集規(guī)范族,我們可以分析每個(gè)狀態(tài)中項(xiàng)目集的構(gòu)成,不難發(fā)現(xiàn)如下規(guī)律:若狀態(tài)中包含形如A·B的項(xiàng)目,則形如B·的項(xiàng)目也在此狀態(tài)內(nèi)。例如:0狀態(tài)中項(xiàng)目集為S·E,E·aA, E·bB?;仡櫽蒒FA確定化到DFA時(shí),E·aA和E·bB正是屬于S·E的閉包中。因而,可引入閉包函數(shù)(CLOSURE)來(lái)求DFA一個(gè)狀態(tài)的項(xiàng)目集。若文法G已拓廣為G,而S為文法G的開(kāi)始符號(hào),拓廣后增加產(chǎn)生式SS。如果I是文法G的一個(gè)項(xiàng)目集,定義和構(gòu)造I的閉包CLOSURE(I)如下:(1) I的項(xiàng)目均在CLOSURE

15、(I)中。(2) 若A·B屬于CLOSURE(I),則每一形如B·的項(xiàng)目也屬于CLOSURE(I)。(3) 重復(fù)(2)直到不出現(xiàn)新的項(xiàng)目為止。即CLOSURE(I)不再擴(kuò)大。由此,我們可以很容易構(gòu)造出初態(tài)的閉包,即S·S屬于I,再按上述三點(diǎn)求其閉包。3.3 詳細(xì)流程圖初始化狀態(tài)棧,符號(hào)棧,輸入串棧輸入串各字符壓棧 求下一狀態(tài)符號(hào)ii = goto_char(status_p,instr_p)規(guī)約出錯(cuò)!異常中止!i = = -1 ?規(guī)約成功!退出i = = 12 ?規(guī)約動(dòng)作:1 求出i對(duì)應(yīng)規(guī)約規(guī)則右部字符串長(zhǎng)度x = ri-21.y2 在符號(hào)棧和狀態(tài)棧中彈出x個(gè)字符

16、。然后將該規(guī)約規(guī)則左部壓入輸入串棧i>0 && i<=11 移進(jìn)動(dòng)作:1 將現(xiàn)狀態(tài)i壓棧push(status_p,i)2 將當(dāng)前輸入串字符壓入符號(hào)棧a = pop(instr_p)push(symbol_p,a)打印該步工作過(guò)程圖3.1 LR分析器設(shè)計(jì)流程圖圖2 LR分析器設(shè)計(jì)流程圖四、代碼編寫4.1 生成分析表代碼void CLR0ForWinDlg:OnGtable() CTableDlg dlg;dlg.SetControlInfo(IDC_EXPLORER1, RESIZE_BOTH);dlg.SetControlInfo(IDOK, ANCHORE_BO

17、TTOM | ANCHORE_RIGHT);dlg.SetControlInfo(IDC_EXPORT, ANCHORE_BOTTOM | ANCHORE_RIGHT);dlg.SetControlInfo(IDC_ANALYZE, ANCHORE_BOTTOM | ANCHORE_RIGHT);string temp = ""CString t;for(int i = 0; i < m_vtlist.GetCount(); i+)m_vtlist.GetText(i,t);/temp.push_back(t.GetAt(0);temp += t.GetAt(0);d

18、lg.g.SetVt(temp);temp = ""for(i = 0; i < m_vnlist.GetCount(); i+)m_vnlist.GetText(i,t);/temp.push_back(t.GetAt(0);temp += t.GetAt(0);dlg.g.SetVn(temp);m_startedit.GetWindowText(t);if (t = "")MessageBox("輸入的文法有誤,請(qǐng)檢查!", "錯(cuò)誤",MB_OK | MB_ICONSTOP);return;dlg.g.

19、SetStart(t.GetAt(0);temp = ""for(i = 0; i < m_plist.GetCount(); i+)temp = ""m_plist.GetText(i,t);for(int j = 0; j < t.GetLength(); j +)/temp.push_back(t.GetAt(j);temp += t.GetAt(j);dlg.g.AddPrecept(temp);if(dlg.g.IsGrammarLegal()dlg.g.GenerateLR0Table();dlg.DoModal();elseMe

20、ssageBox("輸入的文法有誤,請(qǐng)檢查!", "錯(cuò)誤",MB_OK | MB_ICONSTOP);4.2分析句子代碼void CAnalyzeDlg:OnButton1() / TODO: Add your control notification handler code hereUpdateData(TRUE);m_pTree->m_tree.DeleteAllItems();for(int i = 0; i < m_input.GetLength(); i +)if (!m_g.IsInVt(m_input.GetAt(i)Mess

21、ageBox("輸入的句子不全部由終結(jié)符組成", "錯(cuò)誤", MB_OK | MB_ICONSTOP);return;assert(TreeStack.empty();m_input += "#"char szTempPathMAX_PATH; char szTempNameMAX_PATH; if (m_strTempFilename != ""):DeleteFile(m_strTempFilename.c_str();:GetTempPath(100,szTempPath);:GetTempFileName(

22、szTempPath,"LR0",0,szTempName);m_strTempFilename = szTempName;CStdioFile out;out.Open(szTempName, CFile:modeCreate | CFile:modeWrite);out.WriteString("<html>n");out.WriteString("<head>n");out.WriteString("<title>Untitled Document</title>n&qu

23、ot;);out.WriteString("<meta http-equiv="Content-Type" content="text/html; charset=gb2312">n");out.WriteString("</head>n");out.WriteString("<body bgcolor="#FFFFFF" text="#000000">n");out.WriteString("<tabl

24、e border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">n");out.WriteString("<tr>n<td nowrap>&nbsp;步驟&nbsp;</td>n<td nowrap>&nbsp;狀態(tài)棧</td>n<td nowr

25、ap>&nbsp;符號(hào)棧&nbsp;</td>n<td nowrap>&nbsp;輸入串&nbsp;</td>n<td nowrap>&nbsp;ACTION&nbsp;</td>n<td nowrap >&nbsp;GOTO&nbsp;</td>n </tr>n");vector <int> Status;vector <char> Symbol;int iStep = 1;int iPos =

26、 0;Status.push_back(0);Symbol.push_back('#');Pair ToDo;bool bErrorFlag = false;bool bGoOn = true;while (bGoOn) && (!bErrorFlag)assert(iPos < m_input.GetLength();assert(Status.size() = Symbol.size();ToDo = m_g.GetAction(Status.back(), m_input.GetAt(iPos);int i, j;switch (ToDo.one)c

27、ase 'S':out.WriteString(GetStepInfo(iStep, Status, Symbol, m_input.Right(m_input.GetLength() - iPos), ToDo, -1);Symbol.push_back(m_input.GetAt(iPos);Status.push_back(ToDo.two);iPos+;break;case 'R':j = m_g.GetGoTo(StatusStatus.size()-m_g.GetPrecept(ToDo.two).GetRight().length()-1, m_g

28、.GetPrecept(ToDo.two).GetLeft()0);assert(j != -1);out.WriteString(GetStepInfo(iStep, Status, Symbol, m_input.Right(m_input.GetLength() - iPos), ToDo, j);for(i = 0; i < m_g.GetPrecept(ToDo.two).GetRight().length(); i+)Status.pop_back();Symbol.pop_back();Symbol.push_back(m_g.GetPrecept(ToDo.two).Ge

29、tLeft()0);Status.push_back(j);TreeStack.push(ToDo.two);break;case 'a':if (m_input.GetAt(iPos) = '#')out.WriteString(GetStepInfo(iStep, Status, Symbol, m_input.Right(m_input.GetLength() - iPos), ToDo, -1);bGoOn = false;elsebErrorFlag = true;break;case 0:bErrorFlag = true;break;default

30、:assert(false);iStep+;out.WriteString("</table>");if (bErrorFlag)out.WriteString("<p><font color="#FF3300">分析失敗,輸入的字符串是不符合預(yù)定文法的!</font></p>n");/m_pTree->m_tree.DeleteAllItems();while(!TreeStack.empty()TreeStack.pop();elseout.WriteString("<p><font color="#009900">分析完成,輸入的字符串是預(yù)定文法的句子</font></p>n");/HTREEITEM h = m_pTree->m_tree.GetRootItem();/ExpandTree(h);MakeTree();out.WriteString("</body>n</html>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論