

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> Online C Complier</p><p><b> 摘要</b></p><p> C語言在1970年由丹尼斯.里奇研制出來后發(fā)展至今,以它高效、靈活、功能豐富、表達力強和較高的移植性等特點,廣泛用于系統(tǒng)與應用軟件的開發(fā),2012年反超Java重登寶座,在程序員中說起Hello World,可能就想起C語言了,同時在計算機二級考試中
2、,也有C語言的科目,所以在學習C語言的人當中不僅僅是程序員,還有很大一部分是對計算機知識,特別是編程語言了解相對較少的學生和社會人群。因此,需要一個相對簡易,易理解的C語言編譯和學習環(huán)境提供給這種人群。</p><p> 本論文研究的是C語言在線編譯器,包含了C語言的編譯器,加入了C語言的學習資料,示例代碼,供初學者使用。系統(tǒng)架構是基于B/S的系統(tǒng),在前端使用了JS,JQUERY,AJAX,CSS,HTML作為
3、布局和業(yè)務邏輯,由于C語言在線編譯器的特殊性,前端技術也承擔了一部分的C語言編譯的技術,大量使用了正則表達式,來操作C語言代碼字符。后臺使用JAVA語言開發(fā),使用LL1算法,詞法分析來完成C語言的語法分析,應用struts機制和頁面交互,后臺主要用于代碼編譯、錯誤提示,前端主要用于代碼執(zhí)行。論文主要介紹了本課題的開發(fā)背景、所完成的功能和以及具體的開發(fā)過程。</p><p> 關鍵詞:C語言;編譯器;LL1算法;
4、正則表達式 </p><p><b> Abstract</b></p><p> C language developed by Dennis Ritchie in 1970, development has to express thecharacteristics of strong and high portability, efficient, flex
5、ible, feature-rich, widelyused for system and application software development, 2012overtake re-board the throne of Java programmers talk about the Hello World may think of the C language, while in the computer two exami
6、nations, but also the subjects of the C language, not just in learning the C language programmers.there are a large part of computerknowled</p><p> Keywords: C Language; complier; LL1 Algorithm, Regular exp
7、ressions目錄</p><p><b> 摘要I</b></p><p> AbstractII</p><p><b> 第一章 概 述1</b></p><p> 1.1 C在線編譯器的定義1</p><p> 1.2 web應用價值1</
8、p><p> 1.3 C在線編譯器意義1</p><p> 1.4 開發(fā)技術1</p><p> 第二章 需求分析3</p><p> 2.1 可行性研究3</p><p> 2.1.1 技術可行性3</p><p> 2.1.2 經濟可行性3</p><
9、p> 2.2 系統(tǒng)的功能要求3</p><p> 2.3 系統(tǒng)的性能要求4</p><p> 2.3.1可靠性要求4</p><p> 2.3.2時間要求4</p><p> 2.3.3并發(fā)處理能力要求4</p><p> 第三章 關鍵技術5</p><p> 3
10、.1 Ajax概述5</p><p> 3.2 Servlet概述5</p><p> 3.3 Jquery概述5</p><p> 3.4 正則表達式6</p><p> 3.5 LL1算法6</p><p><b> 3.6 編譯器6</b></p><
11、;p> 第四章 概要設計8</p><p> 4.1系統(tǒng)總體結構8</p><p> 4.2代碼編輯模塊8</p><p> 4.3代碼分析器模塊9</p><p> 第五章 詳細設計與實現10</p><p> 5.1代碼編輯模塊10</p><p> 5.1.
12、1 頁面設計10</p><p> 5.2 類設計10</p><p> 5.2.1 代碼分析器類圖11</p><p> 5.3代碼生成器模塊和代碼執(zhí)行模塊13</p><p> 第六章 系統(tǒng)測試15</p><p> 6.1 測試方法15</p><p> 6.2 測
13、試用例15</p><p> 6.3 測試結果16</p><p><b> 總結17</b></p><p><b> 致謝18</b></p><p><b> 參考文獻19</b></p><p><b> 第一章 概
14、 述</b></p><p> 1.1 C在線編譯器的定義</p><p> C語言是眾多編程語言中的姣姣者,每年都有很多高校學生以及一部分社會人群在學習C語言,但是傳統(tǒng)的雖然功能強大,但是相對復雜,并且C語言本身也相對較難[1],對于剛入門的新手,會有一定的心里壓力,同時隨著互聯網的普及,許多互聯網應用都給我們帶來了極大的便利,結合互聯網和傳統(tǒng)的C語言編譯器,就產生了有特
15、色的C語言在線編譯器,只要能上網,不需要安裝任何的編譯環(huán)境和軟件就能夠寫C語言程序,編譯C語言程序,執(zhí)行C語言程序,同時也提供了大量的C語言學習資料以及示例代碼,讓C語言初學者們能夠輕松簡單快樂的學習C語言。 </p><p> 1.2 web應用價值</p><p> 傳統(tǒng)應用指的是僅僅能運行在pc上的,單用戶操作的應用,例如我們每天都會接觸的Office軟件,他們功能強大,但是僅僅
16、只能應用在PC機上,無法和別人共享,在使用他們之前,你必須安裝對應的軟件,他會占用你一定的硬盤空間和內存,即有一定的消耗。但是如果將傳統(tǒng)的應用換成互聯網應用[2],那么它所產生的消耗就少得多,你僅僅需要能上網,就能夠使用,而且隨著web技術的發(fā)展,新技術的成熟,比如Html5,互聯網應用所產生的用戶體驗也完全不亞于傳統(tǒng)的應用,在功能上也能夠接近傳統(tǒng)應用。所以,將一切的傳統(tǒng)應用轉換成互聯網應用都是合適的,甚至是您的操作系統(tǒng),在互聯網應用上
17、的更高一層就是云,這也是今后云計算,云存儲的發(fā)展方向。</p><p> 1.3 C在線編譯器意義</p><p> C語言在線編譯器,不需要安裝任何的編譯環(huán)境和軟件就能夠寫C語言程序,編譯C語言程序,執(zhí)行C語言程序。用戶能夠快速的開始編寫C語言程序[3],不需要承擔傳統(tǒng)編譯器所帶來的內存消耗和硬盤存儲空間的消耗,同時C語言在線編譯器集學習和編寫代碼為一體,邊學習邊實踐是最好的學習方式
18、,同時,用戶可以到任何一個可以上網的PC上編寫代碼,學習C語言,不需要費時去安裝和配置傳統(tǒng)的編譯環(huán)境。</p><p><b> 1.4 開發(fā)技術</b></p><p> 本系統(tǒng)是嚴格的按照“軟件工程”的思想和開發(fā)流程進行的[4],采用B/S架構[5],前端使用Ajax、jquery,html、css將頁面顯示和頁面邏輯處理和頁面數據剝離開來,結合Javascr
19、ipt,給予了頁面動態(tài)效果[6],增強了用戶體驗。后臺分為邏輯處理模塊和前端交互模塊,把業(yè)務邏輯和數據交互拆分開來,便于后期的維護。</p><p> 在軟件工程開發(fā)思想的指導下,使用了最優(yōu)秀的開發(fā)工具Intellij,,使用SeverLet和Ajax技術[7],采用Tomcat7.0作為Web服務器。</p><p><b> 第二章 需求分析</b></
20、p><p> 根據調查顯示至今年四月份開始至今,C語言是世界上使用的最多的語言,C語言如此受歡迎已經能夠足夠說明C語言本身的優(yōu)點吸引著開發(fā)人員去使用它,也使廣大人群去學習它,同時在計算機二級考試中,也有C語言的科目。</p><p> 學習總是需要和實踐相結合,在學習C語言過程中需要大量的代碼編寫,這就需要一個對于新手來說簡單、方便的編譯器,來為學習C語言的人群減輕學習壓力,但是如今在PC
21、上運行的C語言編譯器大多數比較復雜,C語言學習者還需要花心思去熟悉C語言編譯環(huán)境。</p><p> 在學習C語言的人當中不僅僅是程序員,還有很大一部分是對計算機知識了解相對薄弱的學生和社會人群。同時,這類人群的學習環(huán)境復雜,并不是每個人都擁有PC,他們可能去網吧,朋友家去練習,而且各個操作系統(tǒng)也存在差異,這樣傳統(tǒng)編譯器就帶來了些麻煩,因為到一個新的環(huán)境去學習,你就可能需要下載安裝軟件,而這個是一個相對耗費時間
22、和精力的過程。因此,脫離系統(tǒng)環(huán)境的的C語言編譯環(huán)境提供給這類人群。</p><p><b> 2.1 可行性研究</b></p><p> 2.1.1 技術可行性</p><p> 在大學,學習了Java[8]、Web、編譯原理等關鍵性的技術[9],為我之后的學習和寫這個系統(tǒng)打下了堅實的基礎,同時這些技術也實際應用過,增加了我能夠寫好這個
23、系統(tǒng)的信心。這些技術已經相當成熟,遇見的問題可以通過技術資料、搜索引擎解決。</p><p> 大學也培養(yǎng)了我的自學能力,對于陌生的知識能夠較快的接受和理解,并將他們投入實戰(zhàn)應用。</p><p> 學校學習了軟件工程、軟件需求與分析等課程,加上在公司實習積累的經驗,使得我能夠做好需求分析,架構設計等工作,為編寫軟件打下了基礎[6]。</p><p> 2.1
24、.2 經濟可行性</p><p> 經濟可行性主要是從對項目的經濟上進行分析評價的,一方面是支出的費用,包括編寫這個系統(tǒng)的成本,以及后期系統(tǒng)上線后需要服務器等硬件支持和網站維護的花費,另一個是取得的收益,在網站積累用戶后,可以和C語言培訓機構合作,加入培訓機構的廣告來獲取廣告費用。</p><p> 2.2 系統(tǒng)的功能要求</p><p> C語言編譯器要實現
25、C語言語法檢驗功能、C語言代碼轉換功能、運行結果功能、C語言在線學習功能。其具體功能模塊如下: </p><p> C語言語法檢驗模塊:通過該模塊可以對用戶編寫的C語言進行代碼掃描,檢驗C語言程序語法錯誤。</p><p> C語言代碼轉換模塊:通過該模塊可以實現將C語言代碼轉換為JS代碼。</p><p> 運行結果模塊:通過該模塊可以實現將由C語言代碼轉換
26、過來的JS代碼運行輸出結果。</p><p> C語言在線學習模塊:通過該模塊提供C語言學習資料以及示例代碼,供用戶學習[8]。</p><p> 2.3 系統(tǒng)的性能要求</p><p> 2.3.1可靠性要求</p><p> 系統(tǒng)沒有后臺數據庫,不需要考慮后臺數據的完整性以及數據安全,同時系統(tǒng)大量的功能實現是由Javascript
27、去完成的,以及使用了Ajax技術,減少了頁面和后臺的訪問,減少了惡意的Doc攻擊,也使得系統(tǒng)可以接受龐大的用戶同時訪問。</p><p><b> 2.3.2時間要求</b></p><p> 在不考慮網絡狀況的情況下,系統(tǒng)響應時間應較迅速,一般控制在0.1秒以內。</p><p> 2.3.3并發(fā)處理能力要求</p>&l
28、t;p> 系統(tǒng)能夠支持同時間多用戶的訪問要求,并且保證運行的順暢。</p><p><b> 第三章 關鍵技術</b></p><p> 3.1 Ajax概述</p><p> 傳統(tǒng)的Web應用允許用戶端填寫表單(form),當送出表單時就向Web服務器發(fā)送一個請求。服務器接收并處理傳來的表單,然后送回一個新的網頁,但這個做法浪費
29、了許多帶寬,因為在前后兩個頁面中的大部分HTML代碼基本上是相同的。由于每次應用的溝通都需要向服務器發(fā)送請求,應用的回應時間就依賴于服務器的回應時間。這導致了用戶界面的回應比本機應用慢得多。</p><p> 與此不同,AJAX應用可以僅向服務器發(fā)送并取回必需的數據,它使用SOAP或其它一些基于XML的頁面服務接口(接口),并在客戶端采用JavaScript處理來自服務器的回應。因為在服務器和瀏覽器之間交換的數
30、據大量減少(大約只有原來的5%),結果我們就能看到回應(服務器回應)更快的應用(結果)。同時很多的處理工作可以在發(fā)出請求的客戶端機器上完成,所以Web服務器的處理時間也減少了。</p><p> 3.2 Servlet概述</p><p> Servlet是一種服務器端的Java應用程序,具有獨立于平臺和協議的特性,可以生成動態(tài)的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP
31、客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。 Servlet是位于Web 服務器內部的服務器端的Java應用程序,與傳統(tǒng)的從命令行啟動的Java應用程序不同,Servlet由Web服務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機。</p><p> 3.3 Jquery概述</p><p> jQuery是一個跨瀏覽器的 Ja
32、vaScript庫的設計,簡化了客戶端腳本的HTML。簡單的說jQuery是使用最流行的JavaScript庫。jQuery是開源碼軟件, jQuery的語法專門設計,以使它更容易來瀏覽一個文檔,選擇DOM元素,創(chuàng)建動畫,處理事件,開發(fā)Ajax應用程序。jQuery還提供了插件開發(fā)創(chuàng)造能力的JavaScript庫。這使開發(fā)人員能夠創(chuàng)建抽象為低層次的互動和動畫,先進的特效和高層次,主題能夠部件。jQuery庫的模塊化方法允許創(chuàng)建強大的動態(tài)
33、網頁和Web應用程序。</p><p> 微軟和諾基亞宣布其平臺上捆綁jQuery的,微軟采用它最早在ASP.NET AJAX框架和ASP.NET MVC框架,而諾基亞已經融入他們的Web運行時構件開發(fā)平臺。</p><p><b> 3.4 正則表達式</b></p><p> 正則表達式(Regular Expression、rege
34、x或regexp,縮寫為RE),也譯為正規(guī)表示法、常規(guī)表示法,在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規(guī)則的字符串的單個字符串。在很多文本編輯或其他工具里,正則表達式通常被用來檢索和/或替換那些符合某個模式的文本內容。許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎[12]。</p><p><b> 3.5 LL1算法<
35、;/b></p><p> LL(1)是預測分析器,</p><p> 第一個L代表掃描模式是自左向右的,第二個L代表分析模式是最左推導。至于括號中的1代表在分析中最多向前看一個輸入字符。LL(1)的組成包括總控程序,分析棧和分析表,其中分析表是LL(1)分析器的核心。First集合以及后面講到的Follow集合都與分析表有關。分析棧:存放分析過程中的文法符號(待匹配和已經推導
36、的串)。分析表:判斷當前用那條文法進行推導總控程序:做大的調度工作</p><p> 關于LL(1)文法的性質如下:⑴任何LL(1)文法是無二義性的。⑵若一文法中的非終結符含有左遞歸,則它必然是非LL(1)文法。⑶非LL(1)語言是存在的。⑷存在一種算法,它能判定任一文法是否為LL(1)文法。⑸存在一種算法,它能判定任意兩個LL(1)文法是否產生相同的語言。⑹不存在這樣的算法,它能判定上下文無關
37、語言能否由LL(1)文法產生。</p><p><b> 3.6 編譯器</b></p><p> 編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優(yōu)化和目標代碼生成。</p><p> 編譯器是將一種語言翻譯為另一種語言的計算機程序。編譯器將源程序(source lan
38、guage) 編寫的程序作為輸入,而產生用目標語言(target language )編寫的等價程序。</p><p> 編譯器編譯程序的流程:</p><p> 掃描程序(scanner)</p><p> 在這個階段編譯器閱讀源程序(通常以析程序字符流的形式表示)。</p><p> 語法分析程序(parser )</p&g
39、t;<p> 語法分析程序從掃描程序中獲取記號形式的源代碼,并完成定義程序結構的語法分析 (syntax analysis ),這與自然語言中句子的語法分析類似。語法分析定義了程序的結構元素及其關系。通常將語法分析的結果表示為分析樹(parse tree)或語法樹(syntax tree)[13]。</p><p> 語義分析程序(semantic analyzer )</p>&
40、lt;p> 程序的語義就是它的“意思”,它與語法或結構不同。程序的語義確定程序的運行,但是大多數的程序設計語言都具有在執(zhí)行之前被確定而不易由語法表示和由分析程序分析的特征。</p><p> 代碼生成器(code generator)</p><p> 代碼生成器得到中間代碼(IR),并生成目標機器的代碼</p><p><b> 第四章 概
41、要設計</b></p><p><b> 4.1系統(tǒng)總體結構</b></p><p> 系統(tǒng)從縱向上分為兩層,即前端和后臺,前端處理數據顯示,以及部分的業(yè)務邏輯,包括代碼的初步審查、代碼生成、代碼執(zhí)行,后臺主要負責代碼分析的業(yè)務邏輯,前端和后臺通過Ajax結合Severlet來進行數據通訊。系統(tǒng)的框架如圖4.1所示。</p><p&
42、gt;<b> 4.2代碼編輯模塊</b></p><p> 代碼編輯模塊主要用于得到用戶輸入的代碼,并對用戶輸入關鍵字提示,其工作流程如圖3.2所示。</p><p> 4.3代碼分析器模塊</p><p> 代碼分析模塊主要處理從前臺傳遞過來的代碼,對代碼進行詞法分析和語法分析,判斷用戶的代碼的正確性,如果用戶輸入的代碼有誤,能夠識
43、別出錯誤的位置,并將錯誤信息返回給前臺,其工作流程如圖3.3所示</p><p> 4.4代碼生成器模塊和代碼執(zhí)行模塊</p><p> 代碼生成模塊主要處理編譯通過的代碼,利用正則表達式將原來的C語言代碼轉換成Javascript代碼并將生成的javascript代碼推送到頁面,讓瀏覽器去執(zhí)行,將結果顯示在頁面上,其工作流程如圖3.4所示</p><p>
44、第五章 詳細設計與實現</p><p><b> 5.1代碼編輯模塊</b></p><p> 代碼編輯模塊主要用于得到用戶輸入的代碼,并對用戶輸入關鍵字提示。</p><p> 5.1.1 頁面設計</p><p> 1.使用Div實現TextArea</p><p> 在代碼編輯模塊
45、中,是使用了Div元素來模擬TextArea,因為TextArea中的內容只允許是文字,同時,對文字的字體和顏色的設置會應用到整個TextArea中的文字內容,不能對局部調整,但是我的需求是希望能對代碼中的關鍵字進行高亮顯示,并改變顏色,所以TextArea不能夠滿足我的需求。在Div中我可以任意插入Html元素,同時也可以是用CSS樣式調整,使得Div的外觀和TextArea差不多,甚至比TextArea更加美觀[14],多以就選擇了
46、Div。</p><p> 2.頁面大小有限,而且頁面中還有其他很多元素,例如標題,結果顯示模塊等,如何,然而用戶編寫的代碼量是不確定的,如何能夠滿足用戶能夠編寫任意量的代碼?</p><p> 在頁面中使用分頁,用戶在本頁編輯滿了后,可以點擊下一頁繼續(xù)編輯,同時系統(tǒng)保證頁面不跳轉,代碼不丟失,用戶可以編寫任意長度的代碼,上下翻頁非常方便,在編輯也下方顯示當前頁頁碼,可以讓用戶隨時了解
47、當前所在的位置。</p><p><b> 5.2 類設計</b></p><p> 對用戶輸入的代碼進行初步的判斷,提示用戶是否輸入了關鍵字,以及出入關鍵字的準確性,并將關鍵字高亮顯示[15],顯示藍色,顯示1秒后,刪除包裝關鍵字的標簽,然后重新組裝上關鍵字。</p><p><b> 關鍵字定義:</b><
48、/p><p> keyWord=["printf","print","int","float","double","bool","void","long","switch","case""else"
49、,"struct","enum","return","short","const","typedef","extern","continue","while","do","default","for"
50、,"static","if"];</p><p><b> 判斷是否是關鍵字</b></p><p> function isKeyWord(n) {}</p><p> 獲取最后當前編輯代碼塊的一個單詞(依照用戶敲入空格為準)</p><p> function getL
51、astWord(n) {return lastword;}</p><p><b> 將最后關鍵字裁減掉</b></p><p> function cutLastWord(n) {}</p><p><b> 改變關鍵字的顏色</b></p><p> function dealKeyWo
52、rdColor() {}</p><p> 刪除已經唄改變顏色的關鍵字,然后補上正常的關鍵字</p><p> function removeKeyword() {}</p><p> 用于將字體設置成原來的樣式</p><p> function resetWord(n) {return word;}</p><
53、p> 包裝keyword,使得代碼符合Html執(zhí)行的要求</p><p> function packKeyWord(keyword) {return word;}</p><p> 從文本中找出所有的單詞</p><p> function getWordList(code1) {}</p><p> 5.2.1 代碼分析器
54、類圖</p><p> 代碼分析器主要由詞法分析器和語法分析器構成,其類圖結構如圖5.1所示。</p><p> 代碼預處理:由功能類CodeAnalyser構成,CodeAnalyser類圖如圖5.2所示。</p><p> 該類索引傳入的C語言代碼,并將找到的字符進行分類處理</p><p> letterProcessor()用
55、于處理字符為字母的情況</p><p> digitProcessor()用于處理字符為數字的情況</p><p> otherProcessor()用于處理字符為特殊字符的情況</p><p> analyse調用上述的方法,分析取得的字符,重構C語言代碼。</p><p> 詞法分析:由功能類WordAnalyser構成,Word
56、Analyser類圖如圖5.3所示。</p><p> 圖5.3 WordAnalyser類圖</p><p> isKeyWord()用于判斷是否為關鍵字</p><p> isOperator()用于判斷是否為操作符</p><p> isDelimit()用于判斷是否為界符</p><p> andly
57、se()調用上述三個函數,從UserCollection提取定義好的字符,來進行比較判斷,并進行處理。</p><p> 語法分析器:由功能了LL1Module構成,LL1Module類圖如圖5.4所示</p><p> 圖5.4 LL1Module類圖</p><p> LL1()中使用LL1算法進行語法分析,自定義棧來存儲文法,并對輸入字符串進行匹配掃描,
58、來判斷合法性。</p><p> 四元式:由功能類FourYuanStyle構成,用于分析四元式,處理C語言的語法,FourYuanStyle類圖如圖5.5所示、</p><p> 圖5.5 FourYuanStyle類圖</p><p> fourYuanStyle()初始化四元式,四元式的定義在SYS類中</p><p> get
59、FourYuan()獲取已經初始化完成的四元式數組</p><p> analyse()分析code,拆分出可構的四元式,并存入靜態(tài)的四元式數組中,被用于CodeProcessor類</p><p> 5.3代碼生成器模塊和代碼執(zhí)行模塊</p><p> 代碼生成模塊主要處理編譯通過的代碼,利用正則表達式將原來的C語言代碼轉換成Javascript代碼并將生成
60、的javascript代碼推送到頁面[16],讓瀏覽器去執(zhí)行,將結果顯示在頁面上。如圖5.6.</p><p> 圖5.6 代碼生成流程圖</p><p> 代碼轉換器:使用CtoJava.js來完成這個功能模塊</p><p><b> 參與的函數如下:</b></p><p> 刪除原C代碼的函數頭</
61、p><p> function deleteMain(code) { return code;}//刪除指</p><p> 刪除指定索引處的字符</p><p> function deleteIndex(code, position) { return code;}</p><p> 查找到在code中指定字符的最后一個的
62、位置</p><p> function findLastChar(code, char) { return position;}</p><p> 處理printf串,轉換成可以被Javascript的代碼</p><p> function deal_printf(code) { return code;}</p><p&g
63、t; function replacePrintf(position, length, codeTemp1) { }</p><p> 生成Javascript寫到頁面的輸出語句</p><p> function getPrintfString(printf_position) { return null;}</p><p><b>
64、 對輸出語句進行轉換</b></p><p> function printfProcess(printf_position) { }</p><p> 生成js 寫入homepage</p><p> function makeJavaJs(code) { }</p><p><b> 第六章 系統(tǒng)
65、測試</b></p><p><b> 6.1 測試方法</b></p><p> 在編寫代碼分析模塊時,進行了大量的單元測試,檢驗代碼分析的可靠性,以及是否能夠提示正確的錯誤信息,后期和前端頁面結合是進行了集成測試,保證數據在前端和后臺之間傳遞的完整性[17],把單元測試穿插在編碼過程中進行并及時改正了所發(fā)現的錯誤[18],在系統(tǒng)完成進行驗收測試時,
66、選擇可具有代表性的C語言代碼對系統(tǒng)功能進行測試,驗證C語言在線編譯器是否達到開發(fā)目標。</p><p><b> 6.2 測試用例</b></p><p> 根據用例測試的目的是在系統(tǒng)測試過程中,驗證系統(tǒng)各個功能是否可以完成預期目標,以及在測試中出現錯誤時如何改正以達到其擬定功能。</p><p> 對代碼編譯模塊的測試:</p&g
67、t;<p> 以下對給出系統(tǒng)的功能的測試用例。</p><p><b> 輸入錯誤C語言代碼</b></p><p> #include”studio.h”</p><p> int main(){</p><p><b> int a=10;</b></p>
68、<p> int c,d,b=10; </p><p> int x,y; </p><p> if(a>c){a=c+d+y;</p><p><b> a=b;</b></p><p><b> x=y-b;</b></p><p>
69、}else //此處少了一個“{”</p><p><b> a=c;</b></p><p><b> }</b></p><p> while(a>c){</p><p><b> a=c;</b></p><p><b&g
70、t; }</b></p><p> printf("a的值為:");</p><p> printf("%d",a);</p><p><b> }</b></p><p><b> $</b></p><p>
71、 頁面執(zhí)行結果:編譯失敗,在第9行出現錯誤</p><p><b> 輸入正確C語言代碼</b></p><p> #include”studio.h”</p><p> int main(){</p><p><b> int a=10;</b></p><p>
72、 int c,d,b=10; </p><p> int x,y; </p><p> if(a>c){a=c+d+y;</p><p><b> a=b;</b></p><p><b> x=y-b;</b></p><p><b> }
73、else{</b></p><p><b> a=c;</b></p><p><b> }</b></p><p> while(a>c){</p><p><b> a=c;</b></p><p><b> }
74、</b></p><p> printf("a的值為:");</p><p> printf("%d",a);</p><p><b> }</b></p><p><b> $</b></p><p> 頁面執(zhí)行
75、結果:編譯通過,結果:a的值為:10</p><p> 對C語言學習模塊的測試:</p><p> 點擊C語言學習的各個章節(jié),能夠成功跳轉到相應的學習內容。</p><p> 點擊C語言示例代碼,能夠顯示各個示例代碼</p><p><b> 6.3 測試結果</b></p><p>
76、通過C語言在線編譯器各種功能的測試,該系統(tǒng)基本達到了開發(fā)之初所擬定的目標,實現了C語言在線編譯器的預期功能。</p><p><b> 總結</b></p><p> 在大學的四年中,有很多自己想去實踐的東西,但是在技術上遇見很多問題,所以總是不能夠實現自己的想法,隨著各種相關的課程的開放,自己的自學能力的提高,漸漸的相信自己的實力,只要肯去鉆研,就能夠解決所有的
77、問題。本次畢業(yè)設計是對大學四年學過的“c++程序設計語言“、“Java程序設計語言”、“Web編程技術”、“數據庫原理”、“軟件工程”、“軟件測試”等課程的一個具體實踐,是一個理論結合實踐的過程,也是對自己自學能力的一個肯定。作為一項畢業(yè)設計的任務,C語言在線編譯器的設計與實現目標是實現一個在瀏覽器上運行的C語言編譯器。在設計與開發(fā)的過程中,我充分利用所學知識,遇見不懂的技術就去學習,遇見問題就百度、谷歌解決,將理論聯系實踐,使自己對所
78、學的知識有一個更深刻的理解,并為以后的實際工作積累了實踐經驗。由于時間倉促和技術所限,該系統(tǒng)存在一些不足之處,有待進一步改進和完善。</p><p> 本次的畢業(yè)設計,也是對自己大學四年的學習的一個總結和檢驗。設計之初,進行需求分析,搜集了大量的素材,來判斷C語言在線編譯器的可行性。在前期工作完成之后,各種C語言本地編譯環(huán)境進行了研究,使得之后的C語言在線編譯器能夠盡量滿足C語言入門學者的需求。設計階段,寫代碼
79、,調程序,反反復復出現問題。在這期間我學會了很多,也得到了許多寶貴的經驗。我切實體會到了在軟件系統(tǒng)開發(fā)過程中,最重要也最困難的工作就是需求分析,需求分析是系統(tǒng)開發(fā)能否取得成功的關鍵。而對于整個開發(fā)過程,需要合理的進度安排和很好的邏輯協調能力,這種解決問題的能力鍛煉和思考問題的模式都使我受益匪淺,相信從本次的畢業(yè)設計中體會到的會影響我今后的程序員生涯。</p><p><b> 致謝</b>
80、</p><p> 本次畢業(yè)設計,首先要感謝我的指導老師xx老師,xx對本次畢業(yè)設計給與了很大的幫助,并為具體開發(fā)以及論文的書寫提出了許多寶貴意見,她嚴謹仔細的治學態(tài)度深深的影響了我,在此對xx的幫助表示衷心的感謝!此外還要感謝在本次畢業(yè)設計中幫助過我的同學們,沒有老師及同學的幫助和指導是不可能順利完成本次的設計任務的。感謝信息工程學院的領導以及老師為我們創(chuàng)造的良好的學習環(huán)境。</p><p
81、><b> 參考文獻</b></p><p> [1] 徐寶文 鄭國良程序設計語言發(fā)展回顧與展望[N].計算機世界報 1995.13.</p><p> [2] 姚慧廣,趙岳松.Web編程中MVC模型的應用[J].微機發(fā)展,2002,12(3):9~10.</p><p> [3] 汪松松 基于在線服務模式的程序編譯平臺的研究[J
82、].浙江 經貿職業(yè)技術學院 2011</p><p> [4] 張海藩.軟件工程導論[M](第5版).北京:清華大學出版社,2008:91~183.</p><p> [5] Johnson. J2EE Development Frameworks [J]. Computer Science, 2005, 1(39): 121-145.</p><p> [6
83、] 尼古拉斯.澤卡斯,李松峰,曹力.JavaScript高級程序設計(第二版)[M].人民郵電出版社, 2010:39-203</p><p> [7] Alessandro Marchetto,Filippo Ricca.Paolo Tonella.A case study-based comparison of web testing echniques applied to AJAX web a
84、pplications[J].International Journal on Software Tools for Technology Transfer,2008,35(6):477~492.</p><p> [8] 徐白雁.JAVA程序設計語言及其應用[J].計算機與信息技術,1996,4(4):32~34.</p><p> [9] 張素琴 編譯原理[M].北京 清華大學出版
85、社 2005:325-374</p><p> [10] Malcolm Davis. Struts--an open source MVC implementation[J]. IBM System Journal, 2006, 44(2): 33-37.</p><p> [11] 鄧凱元 基于Verilog的正則表達式編譯器的實現[J].北京信息科技大學 光電信息與通訊工程學院
86、2012</p><p> [12] Bi-Xin Li,Xiao-Cong Fan,Jun Pang,Jian-jun Zhao.A model for slicing JAVA programs hierarchically[J].Journal of Computer Science and Technology,2004,18(6):848~858.</p><p> [13]
87、 楊毅夫 面向深度包檢測的正則表達式匹配技術[J].北京 中國科學院計算機技術研究所 2009</p><p> [14] Ian Somerville. Software engineering[M].北京:機械工業(yè)出版社,2004:73~84.</p><p> [15] Vlad Nae,Jordan Herbert,Radu Prodan,Thomas Fahringer.An
88、 Information System for Real-Time Online Interactive Applications[J].Euro-Par 2008 Workshops-Parallel</p><p> [16] Greg Little,Robert C.Miller.Keyword programming in Java[J].Automated Software Engineering,2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文-c語言在線編譯器
- c語言編譯器設計與實現畢業(yè)論文設計
- 編譯原理課程設計___c語言編譯器的實現畢業(yè)論文
- 小型c語言編譯器設計
- 編譯原理課程的設計--c語言編譯器
- C語言安全編譯器研究.pdf
- 編譯原理課程設計--c語言編譯器實現
- 編譯原理課程設計--c語言編譯器實現
- c語言編譯器實現-編譯原理課程設計
- 編譯原理課程設計____c語言編譯器的實現-
- 編譯原理課程設計---c語言編譯器的實現
- 畢業(yè)設計(論文)c語言編譯器的設計開發(fā)-字節(jié)代碼格式設計與實現
- c-編譯器設計文檔
- 基于c語言的線性分組碼編譯器設計
- 畢業(yè)論文--c語言在線學習系統(tǒng)
- c語言編譯器前端的設計與實現課程設計
- c語言自定義計算機語言編譯器最終版
- DSP-2400的C語言編譯器的設計及實現.pdf
- 基于ASIP的專用C語言編譯器的設計與實現.pdf
- c語言自定義計算機語言編譯器最終版.doc
評論
0/150
提交評論