畢業(yè)論文-自定義計算機語言編譯器_第1頁
畢業(yè)論文-自定義計算機語言編譯器_第2頁
畢業(yè)論文-自定義計算機語言編譯器_第3頁
畢業(yè)論文-自定義計算機語言編譯器_第4頁
畢業(yè)論文-自定義計算機語言編譯器_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙 IV 太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙 PAGE PAGE 17摘要漢語編程一直是所有以漢語為母語的程序員的夢想。作為以漢語為母語的程序員,每次編程時最發(fā)愁的事可能就是文檔中大段大段的英語,想要找到相應(yīng)功能的方法總是非常頭痛。中國傳統(tǒng)文化中易經(jīng)八卦的思想又非常符合現(xiàn)代編程中的思想。高級計算機語言程序中任何標(biāo)識都可以使用中文字、詞、詞組和句子的語言文法,又有與中文相匹配的語言語法規(guī)則可稱為漢語編程語言,使用這種語言編寫的程序的過程就是中文編程。漢語編程不但可以使編程更加普及,也能使編程效率提高。本論文研究的是基于漢語的自定義計算機編程語言N語言編譯器,N語言以

2、C語言為基礎(chǔ),在此上加入了一些關(guān)鍵字替換等,以一個單一的漢字來替換有好幾個字符的英語單詞,簡化編程過程,提高編程效率。N語言編譯器以linux下的Qt搭建界面框架,采用C+編寫,主要實現(xiàn)了一個源(N語言)到源(C語言)的編譯器及主要的語法高亮、函數(shù)折疊、查找、替換、重排版、自動補全等功能。本論文主要介紹了這一課題的編寫背景、所實現(xiàn)的功能以及具體的開發(fā)過程。關(guān)鍵詞:漢語編程;C語言;編譯器;C+A New Programming language And Its CompilerAbstractProgramming in Chinese is always a dream of all the

3、 programmers who use Chinese as their mother language. As one of the programmer who uses Chinese as the first language, every time when I program, the most trouble thing is when I looking in the document for a proper way to achieve my goal, there always been tons of billions of English which annoyed

4、 me so so much to find out the right way to implement my functions. The Zhouyi philosophy in traditional Chinese culture is very similar to the modern programming. Any high-level computer programming language can be used to identify the text , words , phrases and sentences of the language grammar ,

5、but also to match with the Chinese language grammar rules may be called Chinese programming language. The process of using this kind of language can called programming in Chinese. Programming in Chinese can not only make programming more popular, but also improve the efficiency of programming.This g

6、raduation thesis tells about a self-defined programming language that based on Chinese : the compiler of N. Program language N is based on C programming language, exchange some key word, replace the long English word by a single Chinese character, to simplify the programming process, improve the eff

7、iciency of programming. This compiler for N is based on Qt of Linux to draw the interface, is programmed by C+. It is a compiler changes program language N to program language C. It is a simple compiler had this function: basic syntax highlight, function folding, find and replace, re-layout and auto

8、-complete, etc. This thesis introduces the background of this topic, the function it can do and the specific progress of programming this compiler.Keywords: Chinese programming language; C Language; complier; C+ 太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙目錄 TOC o 1-3 u 摘要 PAGEREF _Toc390366963 h IAbstract PAGEREF _Toc39036696

9、4 h II1 緒 論 PAGEREF _Toc390366965 h 11.1 N語言的定義 PAGEREF _Toc390366966 h 11.2 N編譯器 PAGEREF _Toc390366967 h 11.3 漢語編程意義 PAGEREF _Toc390366968 h 11.4 開發(fā)技術(shù) PAGEREF _Toc390366969 h 22 需求分析 PAGEREF _Toc390366970 h 32.1 可行性研究 PAGEREF _Toc390366971 h 32.1.1 技術(shù)可行性 PAGEREF _Toc390366972 h 32.1.2 經(jīng)濟(jì)可行性 PAGEREF

10、 _Toc390366973 h 52.1.3 時間可行性 PAGEREF _Toc390366974 h 52.2 系統(tǒng)的功能要求 PAGEREF _Toc390366975 h 52.2.1 基本功能 PAGEREF _Toc390366976 h 52.2.2 附加功能 PAGEREF _Toc390366977 h 62.3 系統(tǒng)的性能要求 PAGEREF _Toc390366978 h 72.3.1 可靠性要求 PAGEREF _Toc390366979 h 72.3.2 時間要求 PAGEREF _Toc390366980 h 72.3.3 穩(wěn)定性要求 PAGEREF _Toc39

11、0366981 h 73 關(guān)鍵技術(shù) PAGEREF _Toc390366982 h 83.1 Qt 概述 PAGEREF _Toc390366983 h 83.2 Qt模塊 PAGEREF _Toc390366984 h 83.3 Qt圖形用戶界面 PAGEREF _Toc390366985 h 93.4 Qt信號與槽機制 PAGEREF _Toc390366986 h 93.5 布局管理 PAGEREF _Toc390366991 h 103.6 Main Window PAGEREF _Toc390366998 h 103.7 Graphics View PAGEREF _Toc39036

12、7007 h 113.8 Qt元對象系統(tǒng) PAGEREF _Toc390367013 h 114 概要設(shè)計 PAGEREF _Toc390367021 h 134.1 系統(tǒng)總體結(jié)構(gòu) PAGEREF _Toc390367022 h 134.2 N語言的定義 PAGEREF _Toc390367023 h 134.3 C語言編輯器 PAGEREF _Toc390367024 h 144.4 N語言編譯功能的集成 PAGEREF _Toc390367025 h 144.5 字符編碼問題 PAGEREF _Toc390367026 h 145 詳細(xì)設(shè)計與實現(xiàn) PAGEREF _Toc390367027

13、 h 175.1 自定義計算機編程語言-N語言 PAGEREF _Toc390367028 h 175.2 編譯器詳細(xì)設(shè)計 PAGEREF _Toc390367029 h 175.2.1 語法分析部分 PAGEREF _Toc390367030 h 175.2.2 N語言的編譯功能 PAGEREF _Toc390367031 h 205.2.3 main PAGEREF _Toc390367032 h 205.2.4 其他附加功能 PAGEREF _Toc390367033 h 215.3 系統(tǒng)主要運行界面 PAGEREF _Toc390367034 h 225.4 關(guān)鍵代碼 PAGEREF

14、_Toc390367035 h 276 系統(tǒng)測試 PAGEREF _Toc390367036 h 306.1 測試方法 PAGEREF _Toc390367037 h 306.2 測試用例 PAGEREF _Toc390367038 h 306.2.1 對C語言編譯功能的測試 PAGEREF _Toc390367039 h 306.2.2 對N語言編譯的測試 PAGEREF _Toc390367040 h 316.2.3 對編輯器功能的手動測試 PAGEREF _Toc390367041 h 346.3 測試結(jié)果 PAGEREF _Toc390367042 h 35結(jié)論 PAGEREF _To

15、c390367043 h 36參考文獻(xiàn) PAGEREF _Toc390367044 h 37致謝 PAGEREF _Toc390367045 h 38外文資料 PAGEREF _Toc390367046 h 39中文翻譯 PAGEREF _Toc390367047 h 74太原理工大學(xué)本科畢業(yè)設(shè)計(論文) 太原理工大學(xué)畢業(yè)設(shè)計(論文)用紙 PAGE PAGE 98HYPERLINK l _Toc2182490361 緒 論1.1 N語言的定義N語言是一種自定義的編程語言,基于C語言基本語法及實現(xiàn),用簡潔明了易于編寫便于記憶的單個漢字替換了繁雜長度驚人編寫不便的英文關(guān)鍵字,簡化了編程過程。如將i

16、f-else改為若-其,減少輸入過程,便于觀察編寫。方便了許多不懂英語的兒童或者其他人能夠在無需多學(xué)一門外語的情況下進(jìn)行編程,領(lǐng)略編程的魅力,有利于編程思想的普及,促進(jìn)漢語母語國家計算機教育的發(fā)展。基于C語言一方面是由于大部分試驗型的編程語言都會將C語言作為輸出,而且C語言是很多計算機語言學(xué)習(xí)的入門語言;另一方面是因為C語言不依賴于任何虛擬機,不像java一樣需要依賴于JVM或者C#需要.NET Framework,在大部分計算機上都有C的編譯器可用。C語言是最基礎(chǔ)的面向人類的編程語言,便于實現(xiàn),有通用性,能被任何程序調(diào)用。本自定義計算機語言N語言在本地化方面改進(jìn)C語言的同時保留了C的字符如“

17、*”,“#”等,使得程序編寫過程中可以調(diào)用C語言豐富的庫函數(shù),同時也可以繼續(xù)操作指針,保留了C語言最令人心醉的特點。1.2 N編譯器本N語言編譯器產(chǎn)生的目標(biāo)程序為面向人類的程序設(shè)計語言C語言,它需要進(jìn)一步的轉(zhuǎn)換才能在計算機上直接執(zhí)行(本編譯器為gcc(GNU Compiler Collection,GNU編譯器套裝)/tcc(Tiny C Compiler,by Fabrice Bellard)。由于大多數(shù)計算機上都有如上C編譯器可用,這使得目標(biāo)程序(即C程序)可在所有這些系統(tǒng)上執(zhí)行,代價是需要一次額外的編譯才能得到最終可運行的目標(biāo)程序,類似于本N語言編譯器的編譯器也稱為“源到源的轉(zhuǎn)換器”。本

18、編譯器是在linux下用一個跨平臺C+圖形用戶界面應(yīng)用程序開發(fā)框架Qt搭建界面,方便地實現(xiàn)了很多功能,如復(fù)制-剪切-粘貼等,方便了編程過程,增加了用戶編程體驗。此編譯器實現(xiàn)的輔助功能有:編輯時的撤銷、重做、查找、替換,格式上的自動換行、自動縮進(jìn)、字體的調(diào)整,編譯過程的設(shè)置,對代碼進(jìn)行重新排版、顯示函數(shù)列表、快速注釋與反注釋、自動補全(主要應(yīng)用于C的編寫),還可以自定義界面區(qū)塊的顯示與否,選擇內(nèi)置的幾種配色方案等,算是一個功能還算齊全的編譯器。1.3 漢語編程意義如今的編程都是基于英語,想要編程起碼得掌握英語這門很可能會被高考拋棄的、繁雜且沒有規(guī)律的語言。即使學(xué)習(xí)了英語,龐大又混亂的英語詞庫又成

19、了擋在文檔和編碼實現(xiàn)之間的攔路虎。即使掌握了編程思想,過不了英語這一關(guān),很多時候連最基本的文檔都無法借鑒,對于那些擁有豐富API的編程環(huán)境更是如此,程序員只好自己想方法實現(xiàn)那些已有的東西,很是浪費時間。在一些有強大類庫支持的語言編碼中,文檔多是用英語寫成而且由于更新快,類數(shù)量較多,大多沒有中文翻譯的文檔,給英語非母語國家的編程人員的提高改進(jìn)造成了很大的困擾。漢語編程,比較知名的如“易語言”,一直都在努力地試著改變中國人編程的方式,想把編程的門檻降低到只要認(rèn)識漢字就能編程,能方便地掌握編程思想的地步。但是易語言的缺點是關(guān)鍵字還是一些由漢字組成的雙字詞或者更多字的詞,完全沒有將漢語優(yōu)美簡潔的特性以

20、及漢語龐大的字庫體現(xiàn)出來。N語言這個自定義編程語言就是基于此目的,將中國傳統(tǒng)文言文的簡明融入編程語言,試著將編程變成一件充滿藝術(shù)感的創(chuàng)作,讓更多人加入到全球信息化的浪潮,給學(xué)齡前兒童或是其他已經(jīng)沒有精力再學(xué)習(xí)英語的人一個編程的機會,體驗程序之美,學(xué)習(xí)并感受編程思想,有助于思維的發(fā)展。由于水平有限,這一設(shè)計僅僅是簡單地將C語言的關(guān)鍵字做了漢化處理,相信在經(jīng)驗逐漸增加的未來,這一語言會發(fā)展壯大。1.4 開發(fā)技術(shù)本N語言編譯器及編程語言N語言的設(shè)計和編寫借鑒了軟件工程的思想和開發(fā)流程進(jìn)行,從拿到題目時的需求分析開始,分析了本自定義計算機語言編譯器實現(xiàn)的可行性,接下來進(jìn)行概要設(shè)計,大致列出完成這一設(shè)計

21、所需的功能框架,然后在詳細(xì)設(shè)計以及編碼階段完成具體的自定義語言設(shè)計和編譯器的編碼,再進(jìn)一步迭代,增加功能,每輪都會進(jìn)行一定數(shù)量的測試,檢測程序問題,找出需要改進(jìn)的地方在下一輪的編碼中進(jìn)行改進(jìn)。本編譯器采用了跨平臺圖形用戶界面應(yīng)用程序開發(fā)框架Qt搭建基本的界面,用面向?qū)ο笳Z言C+實現(xiàn)了N語言轉(zhuǎn)C語言的編譯功能。詞法分析的過程用結(jié)構(gòu)體struct定義了語法行首指針,詞法分析,函數(shù)列表,參數(shù)表等結(jié)構(gòu),分析輸入的程序并實時加入高亮等功能,在將源程序編譯為目標(biāo)語言C語言后,采用了linux下的tcc(Tiny C Compiler,by Fabrice Bellard)編譯器(若檢測到環(huán)境中沒有集成tc

22、c,則采用gcc)來編譯目標(biāo)C語言程序,跳出shell顯示運行結(jié)果。2 需求分析漢語編程一直是幾乎所有以漢語為母語的程序員所想過的事情。在網(wǎng)上搜索“漢語編程”,會發(fā)現(xiàn)討論的人數(shù)還是比較多的,褒貶不一,很多人說現(xiàn)今的漢語編程只是單純地將英語單純翻譯成漢語,其他方面毫無新意。這確實是如今一個尷尬的事。表音的英語確實無法和表意的漢語相提并論,兩者單純地轉(zhuǎn)換確實會發(fā)生一些不愉快的事。還有就是現(xiàn)代漢語和古代漢語的區(qū)別。相對于古代漢語文言文的簡潔明了,現(xiàn)代漢語確實在表達(dá)方面稍微繁瑣了一點。由字符組成的編程語言說起來其實由言簡意賅的文言詞表示更適合。漢語編程的優(yōu)點:言簡意賅,易于表達(dá)。漢字不像英語那樣由單純

23、的26個字母組成,在字庫方面有著先天優(yōu)勢,能用單字來表示英語有時需要很長的一段單詞才能完成的意思。漢語組合性強,可以很輕易就實現(xiàn)擴展。漢語造詞能力較強,能在新事物面前保留長度不受限意義豐富的事物。漢語能在不顯著增加代碼量的情況下輕易就實現(xiàn)具有相同屬性的不同對象。漢語編程的缺點:漢語有多義性。有時漢語的同一句話會有不同的含義,但是這點在字符化的編程語言里由于有了種種規(guī)范,影響不是很大。編碼問題:在某些系統(tǒng)中漢字的編碼是一個大問題。如此次的Qt環(huán)境,編程時的注釋有很多都無法正常顯示,但是只要掌握了字符編碼的種種奧秘,編碼就不再是一個問題。HYPERLINK l _Toc2182490462.1 可

24、行性研究2.1.1 技術(shù)可行性自定義計算機語言編譯器,實現(xiàn)需要設(shè)計一門自定義計算機語言并實現(xiàn)此語言的編譯。在設(shè)計自定義語言的時候,初步的設(shè)想是綜合一下已有的各類編程語言的優(yōu)秀特性,完成一個近乎“全能”的編程語言。在初步學(xué)習(xí)總結(jié)的過程中主要學(xué)習(xí)了Go語言(google,2009)、Objective-C(Brad Cox,1980)、Python(Guido van Rossum,1991)、Zimbu(vim編寫者Bram Molenaar)等,總結(jié)了這幾種語言的主要特性如:go語言的數(shù)組切片、函數(shù)不定參數(shù)、用逗號case多個值、去掉break關(guān)鍵詞(自動加入break關(guān)鍵字); object

25、ive-c關(guān)于類方法和實例方法的+-標(biāo)識、方法名中插入?yún)?shù)、property和sythesize關(guān)鍵字來自動生成屬性的getter和setter;Python的dictionery類型實現(xiàn)鍵值對、快速枚舉的for(.in.)方法;Zimbu的“”符號分隔數(shù)字等增加易讀性。在初步設(shè)計語言的過程中忽然發(fā)現(xiàn)自身在編程實踐方面的欠缺,沒有長期經(jīng)驗的積累,不能針對特定的編程目的進(jìn)行有效的語言特性轉(zhuǎn)化,單單將語法上一些自認(rèn)為不錯的東西湊到一起沒有太大的意義。因此,想起了在進(jìn)行ios應(yīng)用編程時作為初學(xué)者,不熟悉API的時候查文檔時滿屏英語的費勁,便將目光轉(zhuǎn)向了編程本地化,設(shè)想設(shè)計一門給英語門外漢用的漢語編程

26、語言。設(shè)計一門漢語編程語言有國內(nèi)的如“易語言”可進(jìn)行借鑒,鑒于母語是漢語,對漢語的了解比較深刻,再結(jié)合一下之前學(xué)過的編程語言,設(shè)計自定義語言在技術(shù)上完全可行。自定義計算機語言的編譯器的實現(xiàn)需要產(chǎn)生目標(biāo)語言為C語言,所需完成的工作是界面的實現(xiàn)以及N語言到C語言的轉(zhuǎn)換。界面的實現(xiàn)主要選擇了大學(xué)期間學(xué)過的,比較熟悉的Qt,C+,完成對中文字符的轉(zhuǎn)換分析以及其他一些編程時在界面上的附加功能。Qt提供了很多內(nèi)置類便于對界面和功能進(jìn)行方便的操作。Qt有信號和槽機制,添加了Q_OBJECT宏,是對所有定義了信號和槽的類所必須的,這樣就可以實現(xiàn)Qt的信號和槽機制。Signal關(guān)鍵字實際上是一個宏,Qt中C+的

27、預(yù)處理器會在編譯程序找到它之前把它轉(zhuǎn)換成標(biāo)準(zhǔn)C+代碼。Slots關(guān)鍵字也是一個宏,也可以擴展成為C+編譯程序能夠處理的一種結(jié)構(gòu)形式。在信號和槽機制中,如果信號想要和槽成功連接,他們的參數(shù)必須有相同的順序和相同的類型,如果信號的參數(shù)比它所連接的槽的參數(shù)多,多余的參數(shù)會被忽略掉。而當(dāng)參數(shù)的類型不匹配,或者信號和槽有不存在的現(xiàn)象,Qt會發(fā)出警告。利用這點能夠進(jìn)行對編譯器界面的操作。closeEvent()是QWidget中的一個虛函數(shù),當(dāng)MainWindow被關(guān)閉時會自動調(diào)用??梢栽诰幾g器被關(guān)閉時進(jìn)行文件是否需要保存的判斷。Widget(窗口部件)是用戶界面里的一個可視化元素,該詞起源于“windo

28、w gadget”(窗口配件),相當(dāng)于windows中的控件(control)和容器(container)。利用這樣的控件,可以方便地實現(xiàn)所需編譯器的界面。Qt的程序和本地程序看起來一樣,它能通過所模擬平臺的視覺外觀實現(xiàn)與所在平臺風(fēng)格的統(tǒng)一,利用這一點,可以編寫出能夠移植到不同平臺使用的應(yīng)用程序。在頭文件中的前置聲明可以使得編譯過程變快,這一點對于類似本例這樣較為大的程序來說,能夠加快編譯后的運行速度。這個頭文件包含了Qt GUI類的定義,在程序中包含它可以不用包含一些具體控件,在頭文件中包含此頭文件后可以使針對界面的編程在需要用到很多內(nèi)置控件時無需導(dǎo)入很多的頭文件。字符串中使用“&”符號來表

29、示快捷鍵。利用這一點能夠進(jìn)行編譯器快捷鍵的實現(xiàn),使得編譯器更符合用戶通常的使用習(xí)慣。Qt提供了三個內(nèi)置檢驗器類:QIntValidator、QDoubleValidator和QRegExpValidator。QRegExpValidator帶了一個正則表達(dá)式“”Qt中為應(yīng)用程序提供圖片的方法有很多,如:把圖片保存在文件中,并且在運行時把他們載入;把XPM文件包含在源代碼中;使用Qt的資源機制(resource mechanism)。本例中交替使用了資源機制和載入文件的方法,資源機制比運行時再去載入文件的方法更方便,而且該方法也適用于所支持的任意文件格式。做法就是先創(chuàng)建一個資源文件,并且在識別該

30、資源文件的.pro文件中添加一行代碼:RESOURCES+=resources.qrc。在qrc中可以添加所需的圖片。這些資源文件會被編譯到應(yīng)用程序的可執(zhí)行文件中,引用時需要使用帶路徑前綴:/(冒號斜杠)的形式。QMainWindow中菜單欄的創(chuàng)建在Qt中被簡化為“動作”,一個“動作”就是一個可以添加到任意數(shù)量的菜單和工具欄上的項。步驟包括:創(chuàng)建并設(shè)置動作、創(chuàng)建菜單并且把動作添加到菜單上、創(chuàng)建工具欄并把動作添加到工具欄上。動作有一個快捷鍵、一個父對象、一個圖標(biāo)、一個加速鍵和一個狀態(tài)提示。QKeySequence:StandardKey是系統(tǒng)中用于特定功能的標(biāo)準(zhǔn)化鍵盤快捷鍵,能根據(jù)Qt運行的平臺

31、提供正確的快捷鍵。利用這一點可以創(chuàng)造出移植性良好的程序,在不同的平臺實現(xiàn)快捷鍵的本地化。QFileDialog:getSaveFileName,若用戶輸入的文件名已經(jīng)存在,則其會要求用戶確認(rèn)是否需要覆蓋該文件。如果想要在不提醒用戶的情況下直接覆蓋,需要給getSaveFileName()函數(shù)傳遞一個QFileDialog:DontConfirmOverwrite附加參數(shù)來實現(xiàn)這一行為。本例中默認(rèn)讓用戶自己判斷是否需要覆蓋。Qt中的每一個QWidget都有一個windowModified屬性。如果當(dāng)前的窗口的文檔有沒有保存的變化,它會是true,否則是false,表現(xiàn)在窗口名稱后的一個“*”。利

32、用這一點可以在編譯器的代碼編輯框?qū)崿F(xiàn)編輯和標(biāo)題欄顯示的同步,還可以利用它進(jìn)行文件是否編輯,是否需要保存的判斷。對話框:Qt中的“非模態(tài)”對話框是一種運行在應(yīng)用程序中,對于任何其他窗口都獨立的窗口。創(chuàng)建后需要調(diào)用show()、raise()和activateWindow()讓窗口顯示、成為頂層窗口和激活狀態(tài)?!澳B(tài)”的對話框窗口是一個在得到調(diào)用后會彈出并可以阻塞應(yīng)用程序的窗口,從而會從它被調(diào)用開始起妨礙其他的任意處理或者交互操作,直到該窗口關(guān)閉為止。通過show()調(diào)用的對話框是非模態(tài)對話框,在調(diào)用setModal()后才會變成模態(tài)的,而通過exec()調(diào)用的對話框是模態(tài)對話框。本例中采用的是e

33、xec()調(diào)用的,因為程序需要阻塞來判斷是否需要保存,而在此期間對代碼編輯框的改變將是錯誤的。readSetting()和writeSetting()會保存應(yīng)用程序存儲的設(shè)置。這些設(shè)置是與特定平臺相關(guān)的。在windows中它使用的是系統(tǒng)注冊表,UNIX中是文本文件等。QSeting構(gòu)造函數(shù)的參數(shù)是程序的組織名字和應(yīng)用程序的名字,利用此來查找這些設(shè)置所在的位置。它把設(shè)置的信息存儲為鍵值對(key-value pair)的形式。鍵與文件系統(tǒng)的路徑很相似,因此能使用路徑形式的語法指定子鍵的值,或者還能使用beginGroup()和endGroup()的形式。值可以是一個int、bool、double

34、、QString、QStringList或者其他QVariant所支持的其他類型,其中包括了已經(jīng)注冊過的自定義類型。在本例中可以利用這一功能實現(xiàn)了編譯器的設(shè)置(如代碼編輯框的顯示樣式)保存。由以上分析來看,本N語言的編譯器從技術(shù)上可行。2.1.2 經(jīng)濟(jì)可行性經(jīng)濟(jì)可行性主要是從對項目的經(jīng)濟(jì)支出上進(jìn)行分析評價的,一方面是支出的費用,包括編寫這個編譯器的成本,以及后期項目被人使用后會產(chǎn)生的效益。支出的費用主要是硬件的搭建及軟件的搭建,硬件方面采用了hp 6450b,軟件方面主要的系統(tǒng)是Ubuntu12.04 LTS以及Qt 5.0.2,從經(jīng)濟(jì)上分析可行。2.1.3 時間可行性根據(jù)本次畢業(yè)設(shè)計要求,時

35、間可行性需要滿足開發(fā)周期在從需求基本確定后到主要功能實現(xiàn)不超過三個月,根據(jù)分析本次畢業(yè)設(shè)計的需求,可以確定本例在時間上是可行的。2.2 系統(tǒng)的功能要求N語言編譯器要求實現(xiàn)目標(biāo)語言C語言的輸出功能、顯示編譯結(jié)果功能、顯示運行結(jié)果功能以及其他一些可以選擇增加的如語法高亮功能、查找功能等。實現(xiàn)的具體功能模塊如下:基本功能本部分列出的基本功能需要全部實現(xiàn)。(1) 目標(biāo)語言C語言輸出:要求對N語言編譯后的C語言的輸出是正確無誤可正常編譯的,輸出的C語言需要具有C語言一般格式(.c),可被C語言編譯器正常識別,正常讀取,正常編譯。對于中文關(guān)鍵字能進(jìn)行有效的轉(zhuǎn)換處理,對于中文輸入法產(chǎn)生的全角符號需要進(jìn)行正確

36、的轉(zhuǎn)換,使得目標(biāo)程序正確無誤。(2) 編譯結(jié)果的顯示:編譯結(jié)果需要能夠正常顯示,通常為人類可直接讀取的格式,對于本例,最好使用漢化的結(jié)果顯示編譯結(jié)果。對于正常編譯,需要顯示正常編譯的信息;對于程序中存在語法問題或警告等錯誤時,需要能夠進(jìn)行正常的錯誤顯示,標(biāo)明錯誤出現(xiàn)的地方,使用戶一目了然。(3) 運行結(jié)果的顯示:如果編譯的程序沒有錯誤,程序需要能夠顯示正常的運行結(jié)果,如打印正確的輸出,完成程序的所有功能。打印正確的輸出可以借助外部程序如shell來顯示。附加功能本部分列出的附加功能需要在實現(xiàn)以上基本功能的前提下選擇實現(xiàn)。語法高亮:語法高亮要針對關(guān)鍵字進(jìn)行相應(yīng)的語法高亮,需要有不同的顏色來顯示不

37、同的語法類型。在此例中應(yīng)該為標(biāo)準(zhǔn)關(guān)鍵字、一般關(guān)鍵字、注釋、常量、宏等。由于N語言關(guān)鍵字為單個漢字,因此N語言的關(guān)鍵字可以不進(jìn)行高亮顯示。函數(shù)折疊:函數(shù)折疊需要完成一個函數(shù)的可折疊功能,以此滿足一些長函數(shù)的編輯時的閱讀需求。另外,需要完成的是其他的一些如很長的if子句的折疊功能。在此例中,折疊后需要行號能正常顯示。自動完成:自動完成的功能需要在輸入C語言的關(guān)鍵字時可以對可能的關(guān)鍵字進(jìn)行提示以輔助輸入。這一功能的必要性體現(xiàn)在語言的API擴展時能夠讓用戶快捷高效地找到所需的東西,而省去了繁雜的記憶過程。重新排版:重新排版主要針對于標(biāo)準(zhǔn)C語言,能夠完成一些內(nèi)定的如“強制在括號前加空格”等排版功能,規(guī)范

38、了代碼格式,使得代碼的閱讀更加容易。撤銷-重做:撤銷-重做功能需要完成基本的撤銷-重做功能,最少實現(xiàn)一步的撤銷-重做功能,使用戶在誤刪代碼或者其他需求需要滿足的條件下進(jìn)行基本使用。復(fù)制-剪切-粘貼:復(fù)制-剪切-粘貼三個功能需要能正常利用剪切板進(jìn)行代碼的復(fù)制-剪切-粘貼,位置要正確無誤,內(nèi)容需要正確無誤。行號顯示:行號的顯示需要和代碼行一一對應(yīng),不出現(xiàn)錯行漏行等錯誤,在函數(shù)折疊時需要正常顯示。函數(shù)列表:在C語言編輯的時候需要能夠正確顯示程序中所出現(xiàn)的所有函數(shù),順序需要正確,能夠正常顯示。界面風(fēng)格:界面風(fēng)格在本例中主要指一些編輯界面顏色的變換,能根據(jù)用戶選擇改變程序字體顯示,能選擇程序內(nèi)置的幾種配

39、色方案進(jìn)行正常的代碼風(fēng)格變換。查找/查找-替換:查找/查找-替換功能需要完成第一是查找功能的正常實現(xiàn),在用戶輸入所需要查找的內(nèi)容后能在代碼中正確地突出顯示這些內(nèi)容,點擊“下一個”按鈕時能夠正常對下一個符合輸入字符的內(nèi)容進(jìn)行突出顯示;第二要求替換功能的實現(xiàn),在用戶輸入需要進(jìn)行替換的內(nèi)容和替換后的內(nèi)容后能夠一一在正確的位置進(jìn)行替換,在點擊“全部替換”按鈕后需要能夠進(jìn)行正常的全部替換??旖萱I:在完成以上功能后需要對以上功能加入快捷鍵,快捷鍵盡量以符合一般用戶使用習(xí)慣的快捷鍵進(jìn)行定義和實現(xiàn),如保存文件需要用“Ctrl+S”,編譯用“F5”,復(fù)制用“Ctrl+C”等,程序能夠最大程度地滿足不同平臺移植的

40、需要,盡量能夠在如MAC上使用其通用快捷鍵如保存文件的“Command+S”,編譯的“F5”,復(fù)制的“Command+C”等。2.3 系統(tǒng)的性能要求2.3.1可靠性要求編譯器在ubuntu 12.04 LTS,Qt 5.0.2(32 bit)環(huán)境下需要測試通過,能順利地完成N語言的編譯功能,對于N語言的語法錯誤等需要在編譯時正常顯示,能正確啟動shell顯示正確的運行結(jié)果。程序的輔助功能如“語法高亮”、“復(fù)制”、“剪切”、“粘貼”、“行號顯示”等功能能正常完成,“函數(shù)折疊”、“函數(shù)列表”等功能需要基本能用。然后在此環(huán)境下要求運行良好,不出現(xiàn)系統(tǒng)崩潰等狀況。2.3.2時間要求編譯器的啟動時間需要

41、控制在可接受的范圍內(nèi),通常以不會影響用戶的正常使用為準(zhǔn)線。編譯過程需要在目標(biāo)語言C語言輸出后,依靠tcc/gcc執(zhí)行時間,通常狀況下在用戶編寫的程序不復(fù)雜時,時間應(yīng)控制在可接受范圍內(nèi)。在N語言向目標(biāo)語言轉(zhuǎn)換的過程中花費的時間需要控制在可以接受的范圍內(nèi)。2.3.3穩(wěn)定性要求此系統(tǒng)需要運行良好,順利地完成需求定義的功能,不出現(xiàn)崩潰甚至死機等狀況。3 關(guān)鍵技術(shù)3.1 Qt 概述Qt是一個跨平臺的C+應(yīng)用程序開發(fā)框架。Qt被廣泛應(yīng)用于開發(fā)GUI程序,因此其在此種情況下會被稱為部件工具箱。Qt還可被應(yīng)用于非GUI程序,如控制臺工具、服務(wù)器等。Qt是Digia公司的產(chǎn)品,使用了標(biāo)準(zhǔn)的C+和特殊的代碼生成擴

42、展(元對象編譯器)(Meta Object Compiler,moc),還有一些宏。通過一種語言綁定,其他的編程語言也可以使用Qt。Qt還是一種自由的、開放源代碼的軟件,它是在GNU寬通通用許可證條款下發(fā)布的。Qt的所有版本都支持廣泛的編譯器,其中包括GCC的C+編譯器、Visual Studio等。Qt經(jīng)過了許多年的發(fā)展,不但有了完善的C+圖形庫,還在近年的版本中逐漸集成了數(shù)據(jù)庫、OpenGL庫、多媒體庫、網(wǎng)絡(luò)、腳本庫、XML庫、WebKit庫等,其核心庫也加入了進(jìn)程間通信、多線程等模塊,極大地豐富了Qt開發(fā)的大規(guī)模復(fù)雜跨平臺應(yīng)用程序能力,真正意義上實現(xiàn)了其研發(fā)宗旨:“Code Less,C

43、reate more;Deploy Anywhere.”。由于各家的編譯器功不一,水平良莠不齊,Qt為了跨平臺的兼容性,只能以“最低兼容規(guī)格”來設(shè)計。因此,Qt必須有RTTI、動態(tài)創(chuàng)建、Persistence/Serialization的基礎(chǔ)建設(shè),以及建構(gòu)出自己的容器組件。3.2 Qt模塊Qt提供的一般軟件開發(fā)的模塊有:QtCore-QtCore模塊。這是所有基于Qt的應(yīng)用程序基礎(chǔ),它提供了信號與槽對象間的通信機制、IO。事件和對象的處理、多線程等功能。QtGui。它包含了開發(fā)圖形用戶界面應(yīng)用程序所需的功能。使用其支持的各個平臺的原生圖形API。它還支持反鋸齒和矢量形變。還支持ARGB頂層wi

44、dget。QtMultimedia。它提供了用于多媒體內(nèi)容處理的QML類型集和C+類集。同時提供了訪問攝像頭以及音頻功能的API。它包含的Qt音頻引擎支持三維的音頻回放和管理。QtNetwork。它提供了網(wǎng)絡(luò)程序設(shè)計的功能。支持很多的通用協(xié)議如HTTP、FTP和DNS。還有對異步HTTP1.1的支持,還有較底層的TCP/IP和UDP協(xié)議,如QTcpSocket、QTcpServer和QUdpSocket。QtOpenGL。它提供在應(yīng)用程序中使用OpenGL和OpenGL ES加入了3D圖形。在Windows平臺上,它還支持Direct3D。QtOpenVG。它提供OpenVG繪圖支持的一個插件

45、。QtScript。它包含完全集成的ECMA標(biāo)準(zhǔn)腳本引擎、提供信號與槽機制,簡化了對象間通信和QtScript調(diào)試器。QtScriptTools,它是一個額外的Qt Script組件QtSql,它將數(shù)據(jù)庫集成至應(yīng)用程序。支持所有主要的數(shù)據(jù)庫驅(qū)動包括ODBC、MySQL、PSQL、SQLite、ibase、Oracle、Sybase、DB2。QtSvg,它支持SVG格式QtWebKit,它集成了WebKit,提供了HTML瀏覽器引擎,便于在原生應(yīng)用程序中嵌入網(wǎng)絡(luò)內(nèi)容和服務(wù)。QtXml,它提供了XML文檔的閱讀器還有編寫器、支持SAX和DOM。QtXmlPatternsl,它提供了XQuery和X

46、Path的引擎支持。Phonon,它集成了Phonon,支持跨平臺應(yīng)用程序播放音頻和視頻內(nèi)容。但是從Qt5開始不支持Phonon。Qt3Support,這個模塊提供兼容Qt 3.版本的程序庫QtDeclarative, 一個能讓QML界面流暢building的引擎。作業(yè)于Qt附帶工具的模塊:(1)QtDesigner,這是一個提供擴充Qt Designer的類型。(2)QtUiTools(3)QtHelp,它協(xié)助集成在線文件到應(yīng)用程序中。(4)QtTest,它提供單元測試框架和鼠標(biāo)和鍵盤模擬功能。集成Visual Studio和KDevelop。Qt提供的用于Unix開發(fā)的模塊:QtDBus。

47、Qt提供的用于Windows開發(fā)的模塊:QAxContainer;QAxServer。3.3 Qt圖形用戶界面Qt的圖形用戶界面的基礎(chǔ)是QWidget。Qt中所有類型的GUI組件,如按鈕、標(biāo)簽、工具欄等都派生自QWidget,而QWidget本身則是QObject的子類。Widget負(fù)責(zé)接收鼠標(biāo)、鍵盤還有來自窗口系統(tǒng)的其他事件,并描繪了自身在屏幕上的顯示。每一個GUI組件都是一個widget,widget還可以作為容器,在其中還包含其他的Widget。QWidget不是一個抽象類型。它可以被放置在一個已經(jīng)存在的用戶界面中;若是Widget沒有指定父Widget,當(dāng)它顯示時,它就是一個獨立的視窗

48、、或是一個頂層widget。QWidget顯示能力包含了透明化及Double-Buffering。Qt提供一種托管機制,當(dāng)Widget在創(chuàng)建時指定父對象,就可把自己的生命周期交給上層對象管理,當(dāng)上層對象被釋放時,自己也會被釋放。確保對象不再使用時都會被刪除。3.4 Qt信號與槽機制Qt利用信號與槽(signals/slots)機制取代傳統(tǒng)的callback來進(jìn)行對象間的溝通。當(dāng)操作事件發(fā)生時,對象會發(fā)提交一個信號(signal);而槽(slot)則是一個函數(shù)接受特定信號并且運行槽本身設(shè)置的動作。信號與槽之間,則通過QObject的靜態(tài)方法:connect來鏈接。信號在任何運行點上皆可發(fā)射,甚至

49、可以在槽里再發(fā)射另一個信號,信號與槽的鏈接不限定為一對一的鏈接,一個信號可以鏈接到多個槽或多個信號鏈接到同一個槽,甚至信號也可連接到信號。以往的callback缺乏類型安全,在調(diào)用處理函數(shù)時,無法確定是傳遞正確型態(tài)的參數(shù)。但信號和其接受的槽之間傳遞的數(shù)據(jù)型態(tài)必須要相符合,否則編譯器會提出警告。信號和槽可接受任何數(shù)量、任何型態(tài)的參數(shù),所以信號與槽機制是完全類型安全的。信號與槽機制也確保了低耦合性,發(fā)送信號的類型并不知道是哪個槽會接受,也就是說一個信號可以調(diào)用所有可用的槽。此機制會確保當(dāng)在連接信號和槽時,槽會接受信號的參數(shù)并且正確運行。3.5 布局管理布局管理類型是用于描述一個應(yīng)用程序的用戶界面中

50、的Widget是如何放置的。當(dāng)視窗縮放時,布局管理器會自動調(diào)整widget的大小、位置或是字號,確保他們相對的排列和用戶界面整體仍然保有可用性。Qt內(nèi)置的布局管理類型有:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。這些類型繼承自QLayout,但QLayout非繼承自QWidget而是直接源于QObject。他們負(fù)責(zé)widget的幾何管理。想要創(chuàng)建更復(fù)雜的版面配置,可以繼承QLayout來自定義版面配置管理。QHBoxLayout:配置widget成橫向一列;QVBoxLayout:配置widget成垂直一行;QGridLayout:在平面網(wǎng)

51、格中配置widget ;QFormLayout:配置widget用于兩欄標(biāo)簽-:field。3.6 Main WindowQt提供了下列主視窗管理和相關(guān)的用戶界面組件的類型:(1)QMainWindow:它提供了一個標(biāo)準(zhǔn)的應(yīng)用程序主視窗。當(dāng)中可以包括菜單、工具欄、狀態(tài)欄、中央窗口部件等組件。本例中編譯器的主界面MainWindow繼承了QMainWindow這一個類,在中央窗口部件中實現(xiàn)了代碼編輯的主要功能,在工具欄放置了一系列的圖標(biāo)進(jìn)行編譯器的一些輔助功能的實現(xiàn),在狀態(tài)欄顯示了當(dāng)前打開的文件名稱、目錄、光標(biāo)所在行和代碼總共的行數(shù)三項,在鼠標(biāo)指針懸在相應(yīng)功能圖標(biāo)的上方時,狀態(tài)欄會顯示相應(yīng)自定義

52、的提示信息。在創(chuàng)建這些功能時用到了QAction,先創(chuàng)建QAction,然后將其添加進(jìn)功能的列表進(jìn)行這些輔助功能的實現(xiàn)。QMainWindow如圖3-1所示。圖 3-1 QmainWindow結(jié)構(gòu)(2)QDockWidget:它提供了一個可用于創(chuàng)建彈簧工具調(diào)色板或輔助窗口的widget。Dock widgets可以移、關(guān)閉、浮動為外部視窗。本例中,查找/查找-替換功能利用了QDockWidget,實現(xiàn)了相應(yīng)功能。(3)QToolBar:提供了一個通用的工具欄widget,可以放入一些不同的action有關(guān)的工具,如按鈕、下拉列表、comboboxes和spin boxes。本例中的工具欄就是通

53、過QToolBar實現(xiàn)的。3.7 Graphics ViewGraphics View提供了用于管理和交互大量定制的2D圖形對象的平面以及可視化顯示對象的視圖widget,并支持縮放和旋轉(zhuǎn)功能。整個Graphics View框架提供一個以Item為基礎(chǔ)的model-view設(shè)計。由3個主要類型組成,分別是QGrphicsItem、QGraphicsScene和QGraphicsView。若干View可以顯示一個Scene,Scene中則包含幾個不同幾何形狀的Item。該框架包括一個事件傳播的架構(gòu),可以讓在Scene上的Item有雙精度的交互能力。Item能處理鍵盤事件,鼠標(biāo)按下、移動、釋放和雙

54、擊的事件,他們也可以跟蹤鼠標(biāo)的移動。Graphics View使用的BSP(二進(jìn)制空間劃分)樹可非??焖俚卣业絀tem,因此即使是包含百萬個Item的大型Scene,也能進(jìn)行實時圖形化顯示。KDE中的Plasma也是基于Graphics View實現(xiàn)的。3.8 Qt元對象系統(tǒng)Qt采用了一種機制使得它對C+進(jìn)行了擴展,并使用了這種機制創(chuàng)建了獨立的軟件組件。這些組件能夠綁定在一起,但是其中的任何一個組件對于它所要連接的組件的情況事先都一無所知。這種機制就被稱作“元對象系統(tǒng)”(meta-object system),它提供了兩項關(guān)鍵技術(shù):信號-槽(參見四、Qt信號與槽機制)已經(jīng)內(nèi)?。╥ntrospe

55、ction)。內(nèi)省功能對于信號和槽的實現(xiàn)是必須的,還允許開發(fā)人員在運行時獲得有關(guān)QObject子類的“元信息”(meta-information),這個元信息包括了一個含有對象的類名還有它所支持的信號和槽的列表。這一機制也支持屬性和文本翻譯,并對QtScript模塊打下基礎(chǔ)。標(biāo)準(zhǔn)的C+沒有對Qt元對象系統(tǒng)所需的動態(tài)元信息提供支持。因此Qt提供了一個獨立的moc工具來解決這一問題。Moc解析Q_OBJECT類的定義并且通過C+函數(shù)來提供可供使用的信息。Moc使用了C+實現(xiàn),因此Qt的元對象系統(tǒng)可以在任意C+編譯器上工作。它的工作原理如下:Q_OBJECT宏聲明了每個QObject子類中必須實現(xiàn)的

56、一些內(nèi)省函數(shù):metaObject()、tr()、qt_metacall()以及其他的一些函數(shù)。Qt的moc工具生成了用于由Q_OBJECT聲明的所有函數(shù)和所有信號的實現(xiàn)。Connect()和disconnect()這樣的Q_OBJECT的成員函數(shù)使用這些內(nèi)省函數(shù)完成他們的工作。4 概要設(shè)計 HYPERLINK l _Toc218249061 4.1 系統(tǒng)總體結(jié)構(gòu)本系統(tǒng)在設(shè)計時基本分為兩個部分。第一部分是設(shè)計一門自定義編程語言N語言,第二部分是實現(xiàn)N語言的編譯功能。N語言,是根據(jù)C語言基本語法等實現(xiàn)的一門漢語編程語言,將其關(guān)鍵字進(jìn)行單個漢字替換,簡化了編程過程。C語言編譯部分采用了計算機自帶的

57、gcc/tcc進(jìn)行C語言的編譯,完成編譯過程。漢語編程的意義相對來說還是比較重要的。漢語編程能使得許多沒有英語基礎(chǔ)的人也能很好地掌握編程方法、編程思想,能使得更多的人參與到編程這一意義深遠(yuǎn)的事件中來。漢語編程能使一個人在掌握一門外語之前就掌握邏輯分析思維方法,讓計算機的原理等被更多的人熟知。漢語編程更符合中國人的習(xí)慣,使它更容易被中國人接受。于此同時,C語言的保留關(guān)鍵字也得到了保留,使人們在用漢語編程的同時可以繼續(xù)利用C語言的關(guān)鍵字進(jìn)行編程,更加符合用戶習(xí)慣,也促使了漢語母語編程人員更快地向國際化發(fā)展。N語言的編譯器界面主要采用Qt搭建,利用Qt強大的可視化和豐富的內(nèi)置類,將編譯器界面和功能的

58、實現(xiàn)變得簡單高效。HYPERLINK l _Toc2182490614.2 N語言的定義N語言是一種基于C語言的中文編程語言。在世界最經(jīng)久不衰的C語言基礎(chǔ)上增加了漢語編程功能。N語言是一個簡單的自定義語言,除了替換關(guān)鍵字,其他方面和C語言沒有太大區(qū)別,優(yōu)點就是有利于編程的輸入控制和對語言的了解。漢語的優(yōu)點就在于它的簡潔明了,能用一個單字將英文字符中表音的一長串字母簡化,在輸入的時候優(yōu)點非常明顯。作為已經(jīng)發(fā)展了這么多年的表意字,漢語的優(yōu)點是被全世界承認(rèn)的。在二進(jìn)制下,逐漸有了機器碼,慢慢地演變成了匯編語言,接下來又出現(xiàn)了許多其他語言。C的產(chǎn)生雖然比較早,但由于它能操縱底層的特性,在現(xiàn)在仍然有著舉

59、足輕重的地位。漢語編程的優(yōu)勢還在于文化方面的優(yōu)勢。據(jù)說,當(dāng)時萊布尼茨二進(jìn)制的發(fā)明就是受到了陰陽思想的啟發(fā)。布維是一位漢學(xué)大師,他對中國的介紹是17、18世紀(jì)歐洲學(xué)界中國熱最重要的原因之一。布維是萊布尼茨的好友,一直與他保持著頻繁的書信往來。萊布尼茨曾將很多布維的文章翻譯成德文,發(fā)表刊行。正是布維向萊布尼茨介紹了周易和八卦的系統(tǒng),并說明了周易在中國文化中的權(quán)威地位。八卦是由八個符號組構(gòu)成的占卜系統(tǒng),而這些符號分為連續(xù)的與間斷的橫線兩種。這兩個后來被稱為“陰”、“陽”的符號,在萊布尼茨眼中,就是他的二進(jìn)制的中國翻版,但實際萊布尼茨是受中國陰陽太極影響,只不過他付出了諸多研究,推演出二進(jìn)制。他感到這

60、個來自古老中國文化的符號系統(tǒng)與他的二進(jìn)制之間的關(guān)系實在太明顯了,因此斷言:二進(jìn)制乃是具有世界普遍性的、最完美的邏輯語言。4.3 HYPERLINK l _Toc218249061C語言編輯器在確定了自定義語言N語言是由C語言轉(zhuǎn)化之后,首先要做的就是完成一個C語言的編輯器。本畢業(yè)設(shè)計在系統(tǒng)內(nèi)直接選擇集成了tcc或者gcc編譯器,將C語言進(jìn)行編譯。編輯器(Compiler for N)是由linux下的Qt實現(xiàn)的。Qt的主要技術(shù)已在上一章節(jié)中闡明,優(yōu)秀的圖形編輯使得本編輯器的實現(xiàn)變得較為簡單。首先在memorystruct頭文件中定義了語法行首指針、詞法分析、函數(shù)列表、參數(shù)表、行號表、補全表的結(jié)構(gòu)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論