(計算機應(yīng)用技術(shù)專業(yè)論文)re控制程序源代碼自動生成程序的研究與實現(xiàn).pdf_第1頁
(計算機應(yīng)用技術(shù)專業(yè)論文)re控制程序源代碼自動生成程序的研究與實現(xiàn).pdf_第2頁
(計算機應(yīng)用技術(shù)專業(yè)論文)re控制程序源代碼自動生成程序的研究與實現(xiàn).pdf_第3頁
(計算機應(yīng)用技術(shù)專業(yè)論文)re控制程序源代碼自動生成程序的研究與實現(xiàn).pdf_第4頁
(計算機應(yīng)用技術(shù)專業(yè)論文)re控制程序源代碼自動生成程序的研究與實現(xiàn).pdf_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

(計算機應(yīng)用技術(shù)專業(yè)論文)re控制程序源代碼自動生成程序的研究與實現(xiàn).pdf.pdf 免費下載

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

文檔簡介

摘要 r e 控制程序源代碼自動生成程序的研究與實現(xiàn) 摘要 隨著計算機技術(shù)的快速發(fā)展與日益成熟 當(dāng)今社會對軟件產(chǎn)品的 需求也一直處于增長的趨勢 對軟件質(zhì)量的要求也越來越嚴格 一方 面要滿足巨大的軟件需求 同時又要能有效應(yīng)對需求變更和應(yīng)用系統(tǒng) 的升級等問題 以此來保證軟件的質(zhì)量 提高軟件的生產(chǎn)效率 降低 開發(fā)成本和縮短開發(fā)周期 若只依靠程序員手工編碼 不僅要耗費大 量的時間和精力 而且還存在許多不穩(wěn)定 難以預(yù)料的因素 造成程 序的不可靠 針對于此 軟件工程領(lǐng)域提出了源代碼自動化生成的軟 件開發(fā)方法 為了對程序自動生成技術(shù)和以此為基礎(chǔ)的軟件開發(fā)方法進行研 究 本課題結(jié)合項目的實際需要 討論了一個基于o r a dr e n d e r e n g i n e r e 的渲染引擎控制程序源代碼自動生成的設(shè)計思想與實現(xiàn)技 術(shù) 提出了編寫一個依據(jù)r e 控制系統(tǒng)所提供的命令說明文本來生成源 代碼的自動生成系統(tǒng) 該生成系統(tǒng)以控制命令的說明文檔作為輸入 通過編寫文檔分析程序 按照設(shè)計的正則表達式規(guī)則 利用表驅(qū)動的 方式 分析出文檔中命令的結(jié)構(gòu)化數(shù)據(jù) 并動態(tài)創(chuàng)建x m l 格式的代碼 模板 最終系統(tǒng)根據(jù)模板自動生成控制程序的源代碼 通過實際使用證明 該代碼自動生成系統(tǒng)能夠自動分析命令協(xié)議 生成r e 控制程序源代碼 從而解決了靠手工編寫無法應(yīng)對的r e 頻繁 升級 命令數(shù)量龐大以及命令協(xié)議變化等一系列問題 極大地減少了 編程人員的工作量 提高了軟件的開發(fā)效率 關(guān)鍵詞 文檔 源代碼自動生成 正則表達式 結(jié)構(gòu)化數(shù)據(jù) x m l 模 板 a b s t 認c t r e s e a r c ha n di m p l e m e n t a t i o no f r e n d e re n g i n eco n t r o l l e r sa u t o s o u r c eco d eg e n e r a t o r a b s t r a c t w i t ht h er a p i dd e v e l o p m e n ta n dt h ei n c r e a s i n gm a t u r i t yo fc o m p u t e r t e c h n o l o g y t o d a y t h ed e m a n df o rs o f t w a r ep r o d u c t sh a sb e e ni nag r o w t h s t a t e a n dt h er e q u i r e m e n t st os o f t w a r eq u a l i t ya r ea l s or i s i n g t om e e tt h e h u g ed e m a n do fs o f t w a r ea n da tt h es a m et i m et or e s p o n de f f e c t i v e l yt o d e m a n dc h a n g e sa sw e l la s a p p l i c a t i o nu p g r a d e s a u t o m a t e dg e n e r m i o n m e t h o d o l o g yo fs o u r c ec o d eh a sb e e na d v a n c e di nt h ea r e ao fs o f t w a r e e n g i n e e r i n g t h em e t h o dc a ne n s u r et h eq u a l i t yo ft h es o f t w a r e i m p r o v e s o f t w a r ep r o d u c t i v i t ya n dr e d u c es o f t w a r ed e v e l o p m e n tc y c l e sa n dc o s t s b e c a u s ei fo n l yt or e l yo nh a n d c o d i n g n o to n l yi tt a k e sp r o g r a m m e r sal o t o ft i m ea n de f f o r t b u ta l s ot h e r ea r es t i l lm a n yu n s t a b l ea n du n p r e d i c t a b l e f a c t o r sw h i c hr e s u l t i n gi nu n r e l i a b l ep r o c e d u r e i no r d e rt or e s e a r c ho n a u t o m a t i c a l l yg e n e r a t i n g s o u r c ec o d e t e c h n o l o g ya n dt h em e t h o do fs o f t w a r ed e v e l o p m e n tb a s e do nt h e t e c h n o l o g y w i t ht h ea c t u a ln e e d so fap r o j e c t t h ei s s u ed i s c u s s e dt h e d e s i g n i n gi d e aa n dr e a l i z a t i o nt e c h n o l o g yo fa u t os o u r c ec o d eg e n e r a t o r b a s e do no r a dr e n d e re n g i n ec o n t r o l l e r a n dr e a l i z e dt h es o u r c ec o d e g e n e r a t i o ns y s t e m t h es y s t e mt o o kad o c u m e n t a t i o no fc o n t r 0 1c o m m a n d s a si n p u t c o n f o r m e dt op r e d e t e r m i n e dr e g u l a r e x p r e s s i o nr u l e s a n a l y z e dt h e s t r u c t u r e dd a t ao fc o m m a n d s a n dt h e nd y n a m i c a l l yg e n e r a t e dx m l b a s e d c o d et e m p l a t e s f i n a l l y t h i ss y s t e ma u t o m a t i c a l l yg e n e r a t e dt h es o u r c e c o d eo fc o n t r o l l e ri na c c o r d a l i c ew i t ht h et e m p l a t e s b yp u t t i n gt h es y s t e mi n t oa c t u a lu s e i tp r o v e dt h a tt h eg e n e r a t i n g s y s t e mc a na u t o m a t i c a l l ya n a l y z et h ec o m m a n dp r o t o c o l a n dg e n e r a t e m 北京化工大學(xué)碩士學(xué)位論文 s o u r c ec o d eo fr ec o n t r o l l e r a sar e s u l t i ts o l v e dar a n g eo fi s s u e s w h i c h a r ef a i l u r et oc o p ew i t hf r e q u e n tu p g r a d e sb yh a n d ah u g en u m b e ro f o r d e r sa sw e l la st h ec h a n g e so fc o m m a n dp r o t o c 0 1 a l s o t h es y s t e m g r e a t l yr e d u c e st h ew o r k l o a do fp r o g r a m m e r s a n di m p r o v e st h es o f t w a r e d e v e l o p m e n te f f i c i e n c y k e y w o r d s d o c u m e n t a u t o s o u r c ec o d e g e n e r a t i o n r e g u l a r e x p r e s s i o n s s t r u c t u r e dd a t a x m l b a s e dt e m p l a t e s i v 北京化工大學(xué)位論文原創(chuàng)性聲明 本人鄭重聲明 所呈交的學(xué)位論文 是本人在導(dǎo)師的指導(dǎo)下 獨 立進行研究工作所取得的成果 除文中已經(jīng)注明引用的內(nèi)容外 本論 文不含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的作品成果 對本文的 研究做出重要貢獻的個人和集體 均已在文中以明確方式標(biāo)明 本人 完全意識到本聲明的法律結(jié)果由本人承擔(dān) 作者簽名 位垂蓮日期 型哇塑絲旦 關(guān)于論文使用授權(quán)的說明 學(xué)位論文作者完全了解北京化工大學(xué)有關(guān)保留和使用學(xué)位論文的 規(guī)定 即 研究生在校攻讀學(xué)位期間論文工作的知識產(chǎn)權(quán)單位屬北京 化工大學(xué) 學(xué)校有權(quán)保留并向國家有關(guān)部門或機構(gòu)送交論文的復(fù)印件 和磁盤 允許學(xué)位論文被查閱和借閱 學(xué)??梢怨紝W(xué)位論文的全部 或部分內(nèi)容 可以允許采用影印 縮印或其它復(fù)制手段保存 匯編學(xué) 位論文 保密論文注釋 本學(xué)位論文屬于保密范圍 在上年解密后適用本 授權(quán)書 非保密論文注釋 本學(xué)位論文不屬于保密范圍 適用本授權(quán) 書 作者簽名 醢至彗 日期 碰車復(fù)旦壟旦 導(dǎo)師簽名 嘭葉 日期 型生塑蘭里 第一章緒論 1 1 課題背景 第一章緒論 隨著社會的發(fā)展和科技的進步 計算機已滲透到人類生活的方方面面 人們 對軟件產(chǎn)品的依賴程度也不斷提高 面對龐大的軟件需求 同時又要保證軟件項 目的質(zhì)量 減少重復(fù)編碼 提高勞動生產(chǎn)率 代碼生成自動化是必由之路 l l 近 年來 一些代碼自動生成框架和技術(shù)受到軟件技術(shù)人員和工程人員的重視 成為 軟件產(chǎn)業(yè)界所關(guān)注的焦點之一 并因此出現(xiàn)了許多比較成熟的代碼生成框架技術(shù) 例如l e x y a c d 2 m d a 3 1 a n d r o m d a 4 s t r u c t s 5 等 其中 l c x y a c c 是最早 用于自動化編寫編譯程序的工具 這些代碼自動生成技術(shù)各自在不同程度上改變 了傳統(tǒng)的開發(fā)方式 使軟件開發(fā)效率得到了極大地提高 同時保證了軟件質(zhì)量 加強了軟件的可重用性和可維護性 上述的通用代碼生成技術(shù) 在提高程序員的軟件開發(fā)效率 降低軟件的開發(fā) 強度 規(guī)范軟件的開發(fā)過程以及改進軟件的開發(fā)方法等方面確實發(fā)揮了巨大的作 用 對一般軟件的開發(fā)具有普遍的指導(dǎo)意義 然而 對于紛繁復(fù)雜的應(yīng)用領(lǐng)域 任何一種通用技術(shù)都無法做到處處適用 時時可行 因此不能對其生搬硬套 否 則必會適得其反 因為針對特定的領(lǐng)域 其具有自身的特殊性 需求必然會有所 不同 所以只有結(jié)合項目的具體情況進行研究和應(yīng)用 代碼生成技術(shù)才能較好地 解決領(lǐng)域應(yīng)用的實際問題 本文所討論的代碼自動生成系統(tǒng) 其需求依據(jù)來源于一個控制系統(tǒng) 該控制 系統(tǒng)的工作是通過向其控制接口發(fā)送控制命令來指揮進行的 該控制系統(tǒng)提供了 一個關(guān)于控制命令的說明文檔 文檔中所描述的控制命令數(shù)量很多 而且 隨著 控制系統(tǒng)的頻繁升級 控制命令也會隨之發(fā)生改變 如果以手工方式編寫控制程 序 則每次升級都需要重新編寫控制程序 不僅工作量很繁重 而且也容易出錯 所幸的是 控制系統(tǒng)提供的命令說明文檔具有一定的格式規(guī)律 控制命令也有一 定的格式規(guī)律 因此 本文以通用的代碼自動生成技術(shù)思想作為指導(dǎo) 提出編寫 一個文檔分析程序 以控制命令的說明文檔作為輸入 按照預(yù)定的規(guī)則和代碼模 板 自動生成控制程序的源代碼 本文所實現(xiàn)的代碼自動生成系統(tǒng) 不僅極大地 提高了軟件的開發(fā)效率 縮短了軟件的開發(fā)時間 使編程人員能夠把精力更多地 集中在創(chuàng)造性的開發(fā)以及系統(tǒng)架構(gòu)研究上 而且也提高了軟件系統(tǒng)的健壯性 穩(wěn) 定性 可擴展性和可維護性 6 j 北京化工大學(xué)碩士學(xué)位論文 1 2 國內(nèi)外研究現(xiàn)狀 源代碼自動生成技術(shù)的應(yīng)用領(lǐng)域相當(dāng)?shù)貜V泛 從嵌入式代碼的生成到軟件工 程中u m l 圖的產(chǎn)生都發(fā)揮了它重要的作用 在商業(yè)領(lǐng)域 例如 從很久以前 微 軟的各種開發(fā)工具 甚至包括像o f f i c e 這類非嚴格意義上的開發(fā)工具 就都提 供了豐富的代碼自動生成功能 這些功能體現(xiàn)在各種各樣的開發(fā)向?qū)?如著名 的m f c 應(yīng)用程序框架 v i s u a lb a s i c 的 所見即所得一開發(fā)環(huán)境以及j a v a2 e n t e r p r i s ee d i t i o n j 2 e e 等等 7 j 近幾年 隨著計算機技術(shù)的顯著進步 開發(fā)工具的不斷優(yōu)化 代碼生成技術(shù) 已受到許多組織 企業(yè)以及軟件開發(fā)人員的廣泛關(guān)注 他們開始致力于代碼自動 生成技術(shù)和框架的研究工作中 并取得了不俗的成績和豐碩的成果 產(chǎn)生了像 o p t i m a l j l s l c o d e s m i t h 9 1 i n t e l l i ji d e a 1 0 等一系列具有代表性的代碼生成工具 目前 關(guān)于代碼自動生成技術(shù)方面的研究和實現(xiàn)的主要內(nèi)容有 l l 1 基于元數(shù)據(jù)驅(qū)動的代碼自動生成方案 1 2 1 該方案借助 n e t 框架 在分層結(jié) 構(gòu)的企業(yè)資源管理系統(tǒng)中實現(xiàn)了存儲過程和數(shù)據(jù)庫觸發(fā)器的自動生成 2 基于設(shè)計模式的代碼自動生成方案 1 3 1 該方法設(shè)計實現(xiàn)的一個工具 用于 自動實現(xiàn)描述抽象層的設(shè)計模式 該工具采用分布式體系架構(gòu) 以非定制 的組件實現(xiàn) 通過用戶提供的指定模式的描述信息 該工具就可以自動生 成所有和模式相關(guān)的代碼及描述 3 基于u m l 模型的代碼自動生成方案 1 4 j 該方案對于代碼自動生成技術(shù)的分 析是以u m l 模型為起點進行分析的 通過這種技術(shù)可以直接生成系統(tǒng)的多 層 當(dāng)生成代碼時 同時還保留了在模型中體現(xiàn)的層次間的關(guān)系 此外 這個方案提供的多范例的方法使開發(fā)者可以為其實現(xiàn)選擇合適的解決方 案 4 基于x m l 并借助元模型的w e b 應(yīng)用程序的自動生成方案 1 5 在這個方案 中 通過分析在萬維網(wǎng)與w e b 頁面環(huán)境語法間的協(xié)同效應(yīng) 提供了一種基 于三層的元模型階層的代碼自動生成系統(tǒng)原型 5 基于x m l 的自動生成架構(gòu)文檔方案 1 6 1 該方案提出了一種基于x m l 的 用 于生成軟件系統(tǒng)的體系文檔的方法 6 基于u m l 工具的自動生成模擬程序的方案f l 刀 該方案通過將一個用u 地圖 描述的系統(tǒng)轉(zhuǎn)化成模擬程序來預(yù)測該系統(tǒng)的性能 7 基于模板的用于多媒體的自動數(shù)據(jù)流代碼生成的方案 1 8 該方案基于模板 自動生成直接內(nèi)存存取 d m a 代碼 減少了d m a 的編程工作量 從而保持 了多媒體的高性能 8 用于j a v a 及其應(yīng)用的運行時代碼生成器的方案 1 9 該方案介緝了通過對 2 第一章緒論 動態(tài)信息進行探索從而改善程序效率的一個工具 9 u m l 狀態(tài)機和合作圖的模型檢測和代碼生成方案剛 該方案介紹了一種基 于有限自動機模式匹配 并快速地生成小型的代碼自動生成器的工具 上述介紹的目前代碼自動生成技術(shù)研究所涉及的各種主要內(nèi)容 充分表明了 代碼自動生成技術(shù)的應(yīng)用廣泛 對軟件開發(fā)技術(shù)的快速發(fā)展起到了推波助瀾的促 進作用 另外 根據(jù)代碼生成器在程序設(shè)計方面的應(yīng)用領(lǐng)域進行分類 其取得的成果 有 1 編譯與優(yōu)化領(lǐng)域 編譯與優(yōu)化領(lǐng)域的代碼生成主要是研究如何根據(jù)高級語 言生成其代碼或字節(jié)碼 以及生成的代碼的可移植性問題 例如 a n t l i 卜 一開源語法分析器 就是這一領(lǐng)域的一種語言工具 它為包括j a v a c 和 c 在內(nèi)的語言提供了通過語法描述來自動構(gòu)造自定義語言的識別器 編譯 器和翻譯器的框架 a n t l r 可以通過斷言解決識別沖突 支持動作和返回值 還可以根據(jù)輸入自動地生成語法樹并可視化的顯示出來 2 l 2 專用代碼生成領(lǐng)域 專用代碼生成器通常面向?qū)S妙I(lǐng)域 生成小型的系統(tǒng) 或程序 因此可以達到更高的代碼生成率 例如有限元程序自動生成系統(tǒng) f e p g f e p g 的開發(fā)思想采用元件化的程序設(shè)計方法和人工智能技術(shù) 根 據(jù)有限元方法統(tǒng)一的數(shù)學(xué)原理及其內(nèi)在規(guī)律 以類似于數(shù)學(xué)公式推理的方 式 由微分方程表達式和算法表達式自動產(chǎn)生有限元源程序 當(dāng)用戶只輸 入有限元方法所需的各種表達式和公式時 f e p g 便會自動產(chǎn)生所需的全部 有限計算的源程序 包括單元子程序 算法程序等 從而避免了復(fù)雜的有 限元編程勞動 保證了程序的準確性和一致性 捌 3 通用代碼生成領(lǐng)域 通用代碼生成由于其應(yīng)用開發(fā)的領(lǐng)域廣泛 所以導(dǎo)致 代碼的生成效率不高 通常僅僅生成軟件的框架代碼 比如r a t i o n a lr o s e 叫a t i o n a l 公司的旗艦產(chǎn)品 是面向?qū)ο蟮慕9ぞ?是一個完全的 具有能滿足所有建模環(huán)境 w e b 開發(fā) 數(shù)據(jù)建模 v i s u a ls t u d i o 和c 需 求能力和靈活性的一套解決方案 它使大型開發(fā)項目的分析 建模 設(shè)計 規(guī)范化 它還提供了許多框架 諸如j 2 e e 等等 開發(fā)人員可以選擇相應(yīng)的 框架將u m l 描述的需求和系統(tǒng)的體系架構(gòu)轉(zhuǎn)化為代碼 但僅僅是框架 并 沒有具體的實現(xiàn) 需要開發(fā)人員在其中人工填入實現(xiàn)代碼 以滿足系統(tǒng)的 功能需求 因而代碼的生成率并不高 2 3 l 總之 近幾年來 經(jīng)過軟件開發(fā)人員以及相關(guān)組織的不斷研究和探索 代碼 自動生成技術(shù)已經(jīng)取得了一系列進展 但是針對不同的應(yīng)用領(lǐng)域 代碼自動生成 的實現(xiàn)方式應(yīng)該區(qū)別對待 切莫 依葫蘆畫瓢 3 北京化工大學(xué)碩士學(xué)位論文 1 3 本文研究內(nèi)容 本課題主要研究內(nèi)容包括 第一 研究文本格式的r e 協(xié)議 編寫分析程序 將l l e 協(xié)議文本分解為結(jié) 構(gòu)化數(shù)據(jù) 第二 編寫生成程序 對x m l 格式的命令文本示例進行分析研究 自動生 成r e 控制命令文本生成函數(shù) 第三 分析命令文本示例中的參數(shù)規(guī)則 從中提取出參數(shù)部分 并根據(jù)提 取出的參數(shù) 構(gòu)造r e 控制命令文本生成函數(shù)的形參表 迸一步完 善生成程序 第四 分析命令文本中的反饋文本規(guī)則 設(shè)計反饋響應(yīng)機制 構(gòu)造相應(yīng)的 反饋響應(yīng)類 第五 完善生成程序 為生成程序添加代碼對比和代碼更新功能 最后 編寫測試系統(tǒng) 對自動生成的代碼進行測試 1 4 本文的組織結(jié)構(gòu) 本文各章的內(nèi)容安排如下 第一章 概括介紹了r e 控制程序源代碼自動生成系統(tǒng)的應(yīng)用需求以及課題背 景 并闡述了代碼自動生成技術(shù)在國內(nèi)外的研究現(xiàn)狀 然后分析了本文主要的研 究內(nèi)容 目的以及意義 第二章 主要介紹了本課題實現(xiàn)代碼生成系統(tǒng)所應(yīng)用的關(guān)鍵技術(shù) 包括正則 表達式 x m l 可擴展標(biāo)記語言和代碼自動生成技術(shù) 尤其地 對代碼自動生成技術(shù) 進行了深入研究 詳細地介紹了代碼自動生成器的分類和代碼生成技術(shù)的應(yīng)用 第三章 對代碼自動生成系統(tǒng)進行了初步的 全局的分析 討論了代碼自動 生成系統(tǒng)的功能需求 對生成系統(tǒng)的目標(biāo)代碼以及模塊劃分進行了詳細的說明 第四章 介紹了代碼自動生成系統(tǒng)的設(shè)計與實現(xiàn) 分析了如何根據(jù)表驅(qū)動的 方式來分析命令協(xié)議文本 并對系統(tǒng)的具體程序?qū)崿F(xiàn)過程進行了詳細的介紹 最 后以圖例的形式給出了系統(tǒng)的應(yīng)用效果 第五章 介紹了測試系統(tǒng)即r e 控制程序的模塊劃分 設(shè)計與實現(xiàn) 第六章 總結(jié)和展望 對本文所做的工作進行了總結(jié) 并提出了下一步還需 要進一步研究的工作 4 第二章理論基礎(chǔ)與技術(shù)介紹 2 1r e 概述 第二章理論基礎(chǔ)與技術(shù)介紹 本課題討論的是 r e 控制程序源代碼自動生成程序的研究與實現(xiàn) 其重點是 源代碼的自動生成 i l e 只是該自動生成工具所應(yīng)用的對象 因此 這里只簡單介 紹髓的概念 髓是r e n d e re n g i n e 的縮寫 即渲染引擎的意思 可以對這一概念分開解釋 渲染 r e n d e r 是c 6 c o m p u t e rg r a p h i c s 即計算機圖形學(xué)中的最后一道工序 當(dāng)然 除了后期制作外 也是最終使圖像符合3 d 場景的階段 它是基于一套 完整的程序計算出來的 因此 影響圖像最終結(jié)果的要看它是基于什么程序渲染 的 比如是光影追蹤還是光能傳遞 而不是硬件的配置 硬件對它的影響只是一 個速度上的問題 并不會改變渲染的最終結(jié)果 渲染的基本過程主要如下 首先 必須定位三維場景中的攝像機 這和真實 的攝影是一樣的 一般而言 三維軟件中四個主要的窗口 頂視圖 正視圖 側(cè) 視圖和透視圖 即是四個默認的攝像機 其次 為了體現(xiàn)空間感 要決定哪些物 體在前面 哪些物體在后面和哪些物體被遮擋等 因為空間感僅通過物體的遮擋 關(guān)系是不能完美再現(xiàn)的 還和光源的衰減 環(huán)境霧以及景深效果有著密切聯(lián)系 再者 要計算光源對物體的影響 即計算在場景中添加的每一個光源對物體的影 響 最后 渲染程序還要根據(jù)物體的材質(zhì)計算物體表面的顏色 材質(zhì)的類型 屬 性 紋理不同都會產(chǎn)生各種不同的效果 而且這種結(jié)果必須和光源結(jié)合起來 而引擎 e n g i n e 矧 在計算機行業(yè)中 就是能完成某個軟件最基本的功能的 一部分代碼 也就是這個軟件的動力來源 有些功能 比如在大量文本中查找關(guān) 鍵詞 用簡單的方法實現(xiàn)很慢 或者功能很難實現(xiàn) 使開發(fā)人員感到很難辦 就 像搬運工看到1 0 0 0 公斤的貨物一樣 搬運工當(dāng)然希望有一個發(fā)動機來拉動這些貨 物 這樣他就不需要親自拉了 程序員也一樣 希望有一樣?xùn)|西來幫他解決類似 的問題 所以 引擎就出現(xiàn)了 引擎主要有兩個特征 1 能夠解決很頭疼的問題 這些問題不需要非常高的效率 但卻很難實現(xiàn) 2 必須能夠有良好的重用性 讓人想用它的時候可以直接拿來用 所以如果某人做了一個東西 能夠解決某些難題 這些難題在一定范圍內(nèi)普 遍存在 并且能夠重用 那么他就可以聲稱他開發(fā)了一個 引擎 因此 這里所說的渲染引擎 r e 可以理解為能夠很容易 且有效地完成一系 列復(fù)雜渲染操作的計算機程序代碼 5 北京化工大學(xué)碩士學(xué)位論文 2 2 正則表達式 2 2 1 正則表達式概述 正則表達式可以看作一種有特定功能的小型編程語言 它能夠在大的字符串 表達式中定位子字符串 是字符串處理的強大工具 要注意的是 正則表達式不 是一種新技術(shù) 最初它是在u n i x 環(huán)境中開發(fā)的 與p e r l 一起使用得比較多 m i c r o s o f t 把它移植到w i n d o w s 中 到目前為止 它在腳本語言 如w e b 腳本語言 j a v a s c r i p t 中已經(jīng)得到了廣泛應(yīng)用 使用正則表達式 解決的最常見的問題是數(shù)據(jù)驗證 當(dāng)然還可以對字符串執(zhí) 行許多復(fù)雜而高級的操作 例如 1 區(qū)分 可以是標(biāo)記或刪除 字符串中所有重復(fù)的單詞 例如 把il o v ec h i n a c h i n a 轉(zhuǎn)換為il o v ec h i n a 2 把所有的單詞都轉(zhuǎn)換為標(biāo)題格式 例如 把t h i si sab o o k 轉(zhuǎn)換為t h i si s ab o o k 3 把長于3 個字符的所有單詞都轉(zhuǎn)換為首字母大寫的格式 例如 把t h i si s ab o o k 轉(zhuǎn)換為t h i si sab o o k 4 確保句子有正確的大小寫形式 5 區(qū)分u r i 的各個元素 例如 從h t t p w w w w r o x c 0 1 中提取出協(xié)議 計算 機名稱 文件名等 2 2 2s y s t e m t e x t r e g uia r e x p r e s sio n s 命名空間 在 n e t 中實現(xiàn)正則表達式的關(guān)鍵是s y s t e m t e x t r e g u l a r e x p r e s s i o n s 命名空間 它包含的類如表2 1 所示 表2 1s y s t e m t e x t r e g u l a r e x p r e s s i o n s 命名空間中的類描述 t a b l e2 一ld e s c r i p t i o no fc l a s si ns y s t e m t e x t r e g u r a l e x p r e s s i o n s 類名描述 r e g e x包含了正則表達式 以及使用正則表達式的各種方法 m a t c h c o ll e c t i o n 包含了一個正則表達式找到的所有匹配項 m a t c h 包含了一次匹配中所有匹配的文本 g r o u p c o ll e c t i o n包含了一次匹配中的所有分組 g r o u p 包含一個分組集合中一個組的細節(jié) c a p t u r e c o l l e c t i o n包含一個組的所有c a p t u r e 對象 c a p t u r e 返回組內(nèi)一次捕獲所匹配的字符串 r e g e x c o m p i t a ti o n i n f o 提供了把r e g e x 編譯為一個獨立程序集所需的細節(jié) 上表中所描述的幾個類中 其中最重要的是r e g e x 類 r e g e x 類不僅僅可以用 6 第二章理論基礎(chǔ)與技術(shù)介紹 來創(chuàng)建正則表達式 而且提供了許多有用的方法 這些方法通過使用正則表達式 來操作字符串?dāng)?shù)據(jù) 例如 搜索字符模式或進行復(fù)雜的查找和替換 如果要把一 個正則表達式重復(fù)用于不同的字符串 就可以創(chuàng)建一個r e g e x 對象 r e g e x 類的構(gòu) 造函數(shù)主要有兩個 為r e g e x s t r i n gp a t t e r n 和r e g e x s t r i n gp a t t e r n r e g e x o p t i o n so p t i o n s 其中第一個參數(shù)是要匹配的正則表達式 第二個參數(shù)是 r e g e x 類所支持的常用選項 有i g n o r e c a s e r i g h t t o l e f t n o n e m u l t i l i n e 和 s i n g l e l i n e 幾個選項 另外 r e g e x 還有幾個常用的方法 i s m a t c h 方法可以測試字符串 看它是 否匹配正則表達式的模式 如果發(fā)現(xiàn)了一次匹配 那么該方法返回t r u e 否則返 回f a l s e r e p l a c e0 方法用指定的字符串替代一個匹配模式 s p l i t 方法在每次 發(fā)現(xiàn)匹配的位置拆分字符串 返回一個字符串?dāng)?shù)組 此外 利用m a t c h 類和m a t c h c o l l e c t i o n 類 可以獲得通過一個正則表達式 實現(xiàn)的每一次匹配的細節(jié) m a t c h 類代表一次匹配 而m a t c h c o l l e c t i o n 類是一個 m a t c h 對象的集合 其中每一個對象都代表了一次成功的匹配 2 2 3 正則表達式的基礎(chǔ)語法 正則表達式的強大不是表現(xiàn)在特定的字符匹配上 而是在字符類型的模式匹 配上 例如匹配空字符 字母 數(shù)字和字母或數(shù)字范圍等 2 2 3 1 字符匹配語法 表2 2 以正則表達式語法表示的字符類 t a b l e2 2c h a r a c t c a si nr e g u l a re x p r e s s i o n 字符類匹配的字符 示例 d從0 9 的任一數(shù)字 d d 可以匹配1 2 但不匹配a a 或l a d非數(shù)字字符 d d d 匹配a b c a b c 等 但不匹配1 2 3 l 任一單字符 如a z a z 0 9 一 w w w w 匹配1 b a 但不匹配 掌 或4 5 a i r非單詞字符 w 可以匹配 但不匹配a s 任一空白字符 包括了制表符 換匹配所有傳統(tǒng)的空字符 包括用h t m l x 札 行符 回車符 換頁符等和其它標(biāo)準定義的字符 s任一非空白字符每 個非空字符 如舭3 任一字符 匹配任一字符 但是換行符除外 括號中的任一字符 a z 匹配a z 的任一字符 非括號中的任一字符 a b c 匹配小寫a b c 除外的任一字符 a z 匹配非a z 的任一字符 7 北京化工大學(xué)碩士學(xué)位論文 表2 2 列出了正則表達式語法中的特殊字符類 這些特殊字符可以替代一個 字符 如要匹配格式為0 1 0 8 8 8 8 8 8 5 5 6 6 的電話號碼 最簡單的正則表達式應(yīng)該為 d d d 一 d d d 一 d d d 一 d d d d 2 2 3 2 字符定位語法 定位字符允許規(guī)定匹配模式在字符串中發(fā)現(xiàn)的位置 這個操作稱為 錨定斗 錨定一可以使正則表達式的一端固定在字符串中要進行匹配的一個點上 所以 進行 錨定 操作可以防止對整個字符串進行匹配操作 表2 3 列出了幾個特殊 的定位字符 表2 3 特殊的定位字符 t a b l e 2 3s p e c i a lp o s i t i o n i n gc h a r a c t e r s 定位字符 描述 其后的模式必須在字符串的開始處 如果是一個多行字符串 應(yīng)位于任意一行的 開始 對于多行文本 包含回車符的字符串 需要設(shè)定m u l t i l i n e 標(biāo)志 s 前面的模式必須在字符串的末尾處 如果是一個多行字符串 應(yīng)該在任意一行的 末尾 淚前面的模式必須在字符串的開始處 并忽略多行標(biāo)志 z 前面的模式必須在字符串的末尾處 并忽略多行標(biāo)志 z前面的模式必須位于字符串的末尾 或是位于換行符前 1 6 匹配一個單詞邊界 實質(zhì)上的單詞字符和非單詞字符問的點 單詞字符是 a z a z o 一9 中的任一字符 位于一個單詞的開始 b匹配一個非單詞邊界的位置 即不在一個單詞的開始 在使用正則表達式對用戶數(shù)據(jù)進行驗證時 通常需要確定用戶只輸入了我們 想要的數(shù)據(jù) 而且在數(shù)據(jù)前后沒有其它數(shù)據(jù) 這時定位字符就很有用 如 可以 用礦 表示字符串的開始位置 使用 字符以確保模式出現(xiàn)在字符串的結(jié)束 位置 2 2 3 3 重復(fù)匹配語法 重復(fù)字符不但可以壓縮正則表達式 而且可以指定一個字符以及字符組出現(xiàn) 的頻率 表2 4 列出了基本的重復(fù)字符 通過這些重復(fù)字符 可以修改先前定義的電話號碼的正則表達式 將原來的 d d d d d d 一 d d d 一 d d d d 修改為 d 3 d 3 一 d 3 一 d 4 第二章理論基礎(chǔ)與技術(shù)介紹 表2 4 基本的重復(fù)字符 t a b l e 2 4b a s i cr c l m a t 錢 c h a r a c t e r s 重復(fù)字符語法解釋舉例 1 1 匹配前面的字符r 1 次x 2 匹配x x 但不匹配x 或x x x h l 匹配前面的字符i l 次或r 1 次以上x f 2 j 匹配2 個或更多的x 如x x x x x x x x x h i i 匹配前面的字符最少r 1 次 最多i m 次 如果1 1x 2 4 匹配了x x x x x 和x x x 但 為0 可以不指定 不匹配x 或x x x x x 2 匹配前面的字符0 次或1 次 可以省略x 匹配x 或空 匹配前面的字符1 次或多次x 匹配x 或x x 或更多的x 奎 匹配前面的字符0 次或多次 x 宰匹配0 個或多個x 2 2 4 分組和捕獲 正則表達式的一個很好的特性是可以把字符組合起來 其方式與c 中的復(fù)合 語句一樣 分組和捕獲是正則表達式的高級應(yīng)用 也充分體現(xiàn)了正則表達式處理 字符串的強大功能 在正則表達式模式中 可以把任何字符組合起來 包括元字符 和轉(zhuǎn)義序列 像處理一個字符那樣處理它們 但是要使用圓括號 而不是花括號 得到的序列稱為一個組 在默認情況下 將模式的一部分組合為一個組時 就要 求正則表達式引擎按照這個組來匹配 或按照整個模式來匹配 簡言之 可以把 組當(dāng)作一個要匹配的模式來返回 如果要把字符串分解為各個部分 這種模式就 非常有效 其中 用于正則表達式分組的常見字符有 和 其中 表 示一個捕獲組 即被模式匹配到的字符作為最終匹配的一部分 表示非捕獲 組 意味著模式所匹配的字符不作為一個組來捕獲 但構(gòu)成最后匹配結(jié)果的一部 分 n a m e 表示通過名稱進行捕獲 也代表一個捕獲組 意味著在組內(nèi)匹配的 字符可以用于反向引用 例如 u r i 的格式是 其中端口是可選的 例 如 h t t p w w w b a i d u c o m 8 0 8 0 假定要從一個u r i 中提取協(xié)議 地址和端口 而且緊鄰u r i 的后面可能有空白 但沒有標(biāo)點符號 就可以使用下面的表達式 b s s s b 在下面的字符串上運行該模式 得到的匹配是 h t t p w w w b a i d u c o m i v ej u s tf o u n dt h i si n t e r e s t i n gu r ia th t t p w h a tw a si t o hy e s h t t p 嗍 b a i d u c o m 在第一個組 k s 中 有一個捕獲h t t p 第二個組也有一個捕獲 9 北京化工大學(xué)碩士學(xué)位論文 1 哪 b a i d u c o m 但第三個組沒有捕獲 因為在這個u r i 中沒有端口號 另外 雖 然該字符串包含另外一個h t t p 它匹配于第一個組 但不會被搜索出來 因為 整個搜索表達式不匹配于這部分文本 此外 在上面運行模式時常常需要用到g r o u p 類和g r o u p c o l l e c t i o n 類 g r o u p 類代表了一次匹配中的一個組 而g r o u p c o l l e c t i o n 類包含了g r o u p 對象 對應(yīng) 于一次成功匹配中的每一個組 2 3x m l 技術(shù)理論 2 3 1x m l 概述 x m l 是可擴展標(biāo)記語言 2 5 是一種平臺無關(guān)的描述數(shù)據(jù)的方法 甚至可以將其 形容為一種跨平臺的 與軟 硬件無關(guān)的 處理信息的工具 x m l 規(guī)范是一組由 w 3 c 萬維網(wǎng)聯(lián)盟 定義的規(guī)則 用于用普通的文本描述結(jié)構(gòu)化的數(shù)據(jù) 與h t m l 一 樣 x m l 也建立在放在尖括號中的標(biāo)記的基礎(chǔ)之上 是s g 地 標(biāo)準通用標(biāo)記語言 針對特定領(lǐng)域的一個子集或一種受限形式 其文本本質(zhì)使其數(shù)據(jù)具有高度的可移 植性和廣泛的可部署性 另外 x m l 文檔也可以在任意標(biāo)準文本編輯器中創(chuàng)建和編 輯 但是 x m l 不是h t m l 的替代品 也不是h t m l 的升級 它們是兩種不同用途的 語言 其不同之處主要體現(xiàn)在 一方面 x m l 是自由的 可以擴展的 它突破了 h t m l h y p e rt e x tm a r k u pl a n g u a g e 超文本標(biāo)記語言 固定標(biāo)記集合的約束 允許 你定義自己的標(biāo)記以及文檔結(jié)構(gòu) 使文件的內(nèi)容更豐富 更復(fù)雜 更容易組成一 個完整的信息體系 另一方面 h t m l 主要用于顯示信息 而x m l 主要考慮的是數(shù) 據(jù)及其結(jié)構(gòu) 是被用來存儲數(shù)據(jù) 攜帶數(shù)據(jù)和交換數(shù)據(jù)的 因此 x m l 在其語法規(guī) 則上要嚴格得多 要求所有的標(biāo)記都有對應(yīng)的結(jié)束標(biāo)記 不能重疊 2 3 2x m l 的特點 作為一種描述數(shù)據(jù)的語言 x m l 也遵循s g m l 的基本特征 2 6 這些特征是公共 數(shù)據(jù)表示 標(biāo)記應(yīng)可擴展和文檔類型需要規(guī)則 其中 公共數(shù)據(jù)表示 或公共數(shù)據(jù) 標(biāo)記 是指不同的計算機程序和系統(tǒng)應(yīng)能夠讀寫表示相同的信息 標(biāo)記應(yīng)可擴展要 求標(biāo)記語言必須具有足夠的擴展能力以便支持所有信息類型 文檔類型需要規(guī)則 指必須有一種機制用來正式描述由某公共類型文檔共享的規(guī)則 所有遵循x m l1 o 規(guī)則的文檔都稱為格式良好的 m l 文檔 如果格式良好的 x m l 文檔也滿足有效性約束 由d t d 或模式定義 該文檔就稱為有效的x m l 文檔 l o 第二章理論基礎(chǔ)與技術(shù)介紹 格式良好的x 肌文檔必須滿足如下要求 1 x m l 文檔必須有 也只能有一個根元素 用于包含其它所有內(nèi)容 2 x m l 文檔必須以x 此聲明 開始 指定語法遵循 x m l1 0 規(guī)范 3 所有的標(biāo)記必須關(guān)閉 即起始標(biāo)記必須有相應(yīng)的結(jié)束標(biāo)記 例如 它可以包含屬性v a l u e 搿t e s t 一 即 這 個標(biāo)記必須有一個對應(yīng)的結(jié)束標(biāo)記 來完成 稱為一個元素 4 x m l 標(biāo)記區(qū)分大小寫 5 x 此元素必須正確嵌套 不能交疊 6 一個元素內(nèi)不能有兩個同名的屬性 屬性值必須位于引號 單引號或雙引號 內(nèi) 2 3 3x m l 應(yīng)用程序接口 可用于在程序中創(chuàng)建 讀取 分析和處理x 肌文檔的工具有很多 這些工具 的目的是高效地提取存儲在標(biāo)記中的數(shù)據(jù) 而不必分析文檔中的文本 幾乎所有 工具都建立在兩個標(biāo)準抽象a p i 的基礎(chǔ)之上 文檔對象模型d o m 和x m l 簡單應(yīng)用 程序接口s a x 嘲 i o m 和s a x 在應(yīng)用程序開發(fā)過程中所起的作用如圖2 一l 所示 圈2 一ld o g 和s a 接口示意圖 f i g l l 陽2 1s c h e m a t i c so f d o mi n t c f f a c ea n ds a xi n t e r f a c e 從圖中可知 應(yīng)用程序?qū) 肌文檔的操作是間接的 首先 由x m l 分析器對 x m l 文檔進行分析 然后 應(yīng)用程序通過x m l 分析器所提供的d o m 接口或s a x 接口 對分析結(jié)果進行操作 從而間接地實現(xiàn)了對 i l 文檔的訪問 2 3 3 1 文檔對象模型d o m d o m 可以看作是一個平臺或語言中獨立的界面 它允許程序和腳本動態(tài)的訪問 以及更新文檔的內(nèi)容 結(jié)構(gòu)以及腳本程序 d o i v l 提供了一組描述h t l i l 以及x m l 文 北京化工大學(xué)碩士學(xué)位論文 件的標(biāo)準對象和一個用來訪問和操作這類文件的標(biāo)準界面 它分為3 部分 c o r e 核心 定義了一組可用于任何結(jié)構(gòu)文檔的標(biāo)準對象 是結(jié)構(gòu)化文檔比較底層的對象 的集合 x m ld o m 定義了一組x m l 文件的標(biāo)準對象 h t m ld 伽 定義了一組h t m l 文件的標(biāo)準對象 同時d o m 還分為l 2 3 共三個等級 使用d o m 分析器就可 以把整個x m l 文檔作為一個樹 一次加載到內(nèi)存中 并可以隨時訪問它 搜索和 修改文檔中的任何元素 n o d e 節(jié)點是d o m 中的最基本的對象 從它又派生出許多 類型的節(jié)點 所有這些節(jié)點組成一棵文件樹 這棵樹幾乎包含了x m l 文檔的全部 信息 2 3 3 2x m i 簡單應(yīng)用程序接口s a g s a x 也是為了處理x m l 定義的一組抽象接口 它采用p u s h 的流模型 像流一 樣逐個字符地讀取x m l 文檔 在遇到元素和屬性時生成事件 基于s a x 的分析器 通過各種通知接口 把這些事件傳遞給應(yīng)用程序 激活相應(yīng)的事件處理函數(shù) 另 外 s a x 沒有把x m l 文檔完全地加載到內(nèi)存中 所以需要的系統(tǒng)資源較少 是一個 分析大型x m l 文檔的非常高效的a p i 它的優(yōu)點是當(dāng)它讀到x m l 文檔中每一部分內(nèi) 容的時候 就會產(chǎn)生一個事件 應(yīng)用程序就可以在這個事件中寫入具體的處理代 碼 然后解析器就移動到文檔的下 段 因為s a g 以序列的形式處理文檔 和d o m 相比 對內(nèi)存的需求較少 而且當(dāng)s a x 找到需要的信息時 它能夠停止對當(dāng)前文 檔的解析 因此可被認為是一個輕量級的接口集合 但是因為其不把文檔高速緩 存到內(nèi)存中 所以不能檢查文檔的格式是否良好 此外 編寫s a x 并不像編寫d o m 那樣簡單 這首先是因為必須實現(xiàn)通知接口并維護狀態(tài) 還因為s a g 不允許對文 檔進行隨機訪問 也沒有提供像d o m 那樣的編輯功能 s a x 對x m l 文件進行處理的流程如圖2 2 所示 解析 圖2 2s a x 對x m l 文件進行處理的流程圖 f i g u r e2 2f l o wc h a r to f p r o c e s s i n gx m ld o c u m e n t sw i t hs a x 1 2 流 第二章理論基礎(chǔ)與技術(shù)介紹 2 3 4x 札文檔的處理 2 3 4 1x m l r e a d e r 類和x m l w ri t e r 類 在 n e l 中的s y s t e ly d n l 命名空間中 包含x m l r e a d e r 類和x m l w i r t e r 類 它 們分別用于讀取已有的x m l 文檔和創(chuàng)建編寫新的x m l 文檔 x m l r e a d e r 是面向流的 它把x m l 文檔看作是文本數(shù)據(jù)流 在流通過讀取器時 處理文檔 在數(shù)據(jù)結(jié)構(gòu)中什么都不會捕獲 如果要繼續(xù)保留某些信息 就必須自 己記錄它 因此其開銷很低且效率極高 x m l r e a d e r 不需要內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)來保 存整個文檔 只使用查看文檔的當(dāng)前塊時所需要的內(nèi)存 它有三個派生類 x m l t e x t r e a d e r 個高性能的讀取器 把x m l 當(dāng)作文本流來處理 不需要高速緩 存 實體解析或驗證 但它要求x m l 文檔必須是格式良好的 x m l v a l i d a t i n g r e a d e r 類似于x m l t e x t r e a d e r 但還要針對d t d x s d 等進行驗證 x m l n o d e r e a d e r 根據(jù)x m l n o d e 的實例處理x m l x m l w r i t e r 是一個基于流的寫入器類 它能創(chuàng)建全新的文檔 寫入信息 以備 其它程序或用戶使用 它有一個預(yù)定義的派生類x m l t e x t w r i t e r 這個類不僅僅可 以寫入文本文件 還支持將寫入的文本發(fā)送給任何類型的流 2 3 4 2x m i 查詢 目前 被廣泛用于搜索x m l 文檔并檢索特有的組件的技術(shù)是x p a t h x p a t h 是 一個w 3 c 規(guī)范 可以在x m l 文檔中對元素或?qū)傩赃M行查詢 定位和過濾 它把x m l 文檔看作是一個有層次的樹 x p a t h 語言可以表示這個樹中從一個葉子或節(jié)點到另 一個葉子的路徑 可

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論