《電子技術應用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > 基于XML和JAVA構建程序生成器

基于XML和JAVA構建程序生成器

2008-12-27
作者:馮少榮
1 引言
??? 程序生成器可以加快程序編碼產生的速度,產生規(guī)范和正確的代碼,編寫一個程序生成器,它意味著不僅僅是寫一個程序,而是要寫一個可以寫出許多程序的程序。在用戶界面、數(shù)據(jù)庫、中間件、語法分析" title="語法分析">語法分析和詞法分析等方面,程序生成器是其開發(fā)環(huán)境中的重要部分。程序生成器的思想已經使用了很多年了。比如:
. 語法分析器:語法分析器讀入一個標記序列,并且創(chuàng)建一個稱為語法樹的描述信息的數(shù)據(jù)
結構。典型的為UNIX使用程序yacc,它讀入一個語言的形式描述(用某種語法表示)連同看
作是語法規(guī)則的動作,然后輸出一個語法分析器程序。
. 有限狀態(tài)機:可以用顯示不同狀態(tài)、事件及狀態(tài)轉移的表和(或)圖對程序進行描述和說明。
典型的為UNIX實用程序lex,就是一個有限狀態(tài)機的程序生成器,并且用yacc來解析語言
的標記。
. 用戶界面:現(xiàn)在大多數(shù)代碼都是由GUI構造器和直觀的編程工具自動生成。
. 數(shù)據(jù)庫中的程序生成器:給出數(shù)據(jù)表、關系、事務邏輯及報表模式的描述,就能生成依照指定的規(guī)格構造的數(shù)據(jù)庫程序。如:報表生成器、菜單生成器、屏幕生成器等。
. Web頁面生成:Java服務器頁面JSP是一種在Web上創(chuàng)建動態(tài)內容的工具。
??? 而XML作為一種完全可移植的數(shù)據(jù)格式,將成為跨平臺的不同系統(tǒng)之間的數(shù)據(jù)交換及數(shù)據(jù)顯示、描述的標準。Java具有面向對象、跨平臺、分布式、簡捷、健壯、安全等特點,功能強大且簡單易學,正在逐步成為新一代網絡編程的主要開發(fā)語言,Java將是網絡上的“世界語”,今后所有用其它語言編寫的軟件統(tǒng)統(tǒng)都要用Java語言來改寫。XML和Java的結合對已有的程序生成器技術提供了新的應用背景,并且兩者相互協(xié)調補充。以更簡單而且優(yōu)雅的風格、可靠的性能,提高程序生成器的開發(fā)效率。
2?程序生成器的結構
??? 作為程序生成器的典型結構,它由獲取數(shù)據(jù)、分析/轉換數(shù)據(jù)、生成程序3個部分組成。規(guī)范程序生成器經過如圖1所示三種約束時間,完成程序的生成。

3?域工程技術
??? 域工程是一個用于高效創(chuàng)建一個應用(程序或軟件組件)族成員的過程。它是一個確定某個專業(yè)的重要組成與需求的系統(tǒng)方法,對如何高效地建立一個滿足用戶需要的程序生成器是非常必要的。程序的自動創(chuàng)建依賴于對語法和期望目標的精確描述,域工程技術將此概念延伸到時間基礎上分析一系列相關的程序,并能夠生成和修改它們。生成系統(tǒng)的構造過程就是一個解決問題產生軟件程序過程。因此,域既是一個有關聯(lián)的問題的集合,也是一個有關的軟件應用程序" title="應用程序">應用程序的集合。域工程分為兩個過程:域分析及域實現(xiàn)。
??? 域分析:是一個用于確定域的術語、范圍、共性及變性的過程。
??? 域實現(xiàn):是指在域中按照指定的要求高效構造應用及創(chuàng)建工具, 在域分析結束時即開始。這其中包括程序生成器。
??? 任何開發(fā)過程都要經歷一系列的決策。在需求分析、軟件結構、界面開發(fā)、軟件設計(算法、數(shù)據(jù)結構" title="數(shù)據(jù)結構">數(shù)據(jù)結構和數(shù)據(jù)表示)、軟件編碼與測試以及軟件的使用過程中都需要做出決策。有關的最艱難的工作是做出決策而不是編碼。對于域工程,最困難的是判斷哪些是重要的決策,由誰來制定,什么時候制定。并且要能區(qū)分其中的重要決策和不重要決策。決策的制定,要考慮域工程的過程中下列三種重要角色的作用及其作用時間(約束時間)。
??? 域工程師:定義并建立如程序生成器那樣的過程和工具。
??? 應用工程師:利用如程序生成器那樣的工具創(chuàng)建應用程序。
??? 應用程序用戶:使用應用程序。
??? 域工程時間:由域工程師為每個應用程序族做出決策的時間。包括:域分析時間,域執(zhí)行時間。
??? 約束時間:由應用工程師為每個應用程序做出決策的時間。包括:規(guī)劃時間,生成時間,編譯時間,設計時間,鏈接時間。
??? 運行時間:由應用程序用戶為每個特定的使用做出決策的時間。包括:安裝時間,初始化時間,真正運行時間。
??? 決策分解是域實現(xiàn)的基本概念,它簡單地分解每個獨立的決策,并將其作為一個獨立元素或系統(tǒng)組件。如決策的物理分解可產生3種信息:域信息、用戶信息、應用信息。有效的決策分解將產生一個既易于改變、又易于構造的軟件結構。決策分解基于抽象化。抽象化是一種使軟件更具有一般性、靈活性、可理解性和可重用性的主要技術。
??? 決策分解技術主要包括:
(1)?物理分解:如,應用程序可以分解出不依賴于機器的部分和依賴于機器的部分。
(2)?典型過程的抽象化:如,子程序、宏及可重用軟件包的創(chuàng)建。
(3)?面向對象的抽象化:如,隱含在對象中的隱藏決策。
(4)?繼承方法:公共關系在父類和子類中被共享使用。
(5)?應用程序框架:可看作一個軟件重用的自頂向下的方法。
(6)?規(guī)范驅動技術:應用規(guī)范層信息創(chuàng)建或直接執(zhí)行應用程序
??? 域工程是創(chuàng)建應用程序族的過程,因此,不僅要考慮單一的應用會如何隨時間而改變,而且也要注意到域領域應用的整個范圍,從而確定這些應用之間的差別。這些差別稱為域工程的可變性,它是域工程的核心。對于域工程需要理解一個應用族中什么是不變的,什么是可變的。不變的成分稱為共性,最困難的就是確定并組織一個域的所有共性與可變性。
共性:是一個在域工程期間關于什么是整個域的共同性問題所做出的決策或假設。共性可以確定域的范圍、軟件的功能、與其它域的分界面、操作環(huán)境、軟件的限制標準以及應用軟件公共部分實現(xiàn)的細節(jié)。共性和標準有許多共同點。標準是做某件事情的共同方法。許多為標準所做的努力根本上就是一個域分析。相反域分析工作附帶產生一些標準,以幫助創(chuàng)建更大的將為一大群人所接受的共性集合。
??? 可變性:是一個在域分析期間確認但直到建立或運行時間才確定的決策。
共性和可變性經常可以相互轉化。而使域分析保持平衡。如圖2所示

??? 可變性包括:建立時的可變性、運行時的可變性,編譯時可變性、生成時可變性、預處
理時可變性。
??? ① 建立時的可變性
??? 表示程序族的全部程序中的差別是什么。建立時的可變性集合是為建立一個程序生成器所需要的信息中最重要的部分,它可以用于定義一個規(guī)范語言和一個支持可變性的結構框架。
??? ②?運行時的可變性
??? 是在運行時間內確定的決策。運行時的可變性建立在應用軟件的公共部分。由許多方法表示和控制。比如:
. 資源和配置文件:這些文件包含信息并在運行時間內讀入一般保存在一個外部文件
. 數(shù)據(jù)庫:查詢數(shù)據(jù)庫獲得讀入信息
. 用戶界面:通過與用戶交互獲得信息。
. 動態(tài)加載類:常見的變化可以被確定、創(chuàng)建、編譯,并且直接加載到一個正在運行的Java程序中。
??? ③?編譯時可變性
??? 是在編譯時間確定決策。可以由許多方式實現(xiàn)。比如:
. 編譯時的常量:可以利用好的編譯器來優(yōu)化程序。
. 面向對象技術:基本類定義共性,子類提供可變性。特別是編譯時的可變性。
??? ④?生成時可變性
??? 信息通過一個創(chuàng)建定制程序的程序生成器讀入。
??? ⑤?預處理時可變性
??? 預處理發(fā)生在編譯時間前,預處理器用于擴展宏功能。依據(jù)分開的頭文件給程序構造可變性。
??? 域工程經常從應用工程周期獲得適當?shù)姆答伓粩嗾归_。形成域工程周期。應用工程周期和域工程周期的關系如圖3所示。

4?程序生成器的實現(xiàn)方法
4.1 利用DOM生成程序

??? 使用XML文件和DOM構建一個程序生成器如圖4所示。

??? 使用XML語法分析器讀入和存儲規(guī)范, 讀入XML文件并對其進行語法分析,創(chuàng)建DOM對象。XML語法分析器需要三種分析和存儲規(guī)范的輸入方法:
. 由W3C提供的DOM接口的輸入(純DOM方法);
. 針對IBM的語法分析器的輸入(自定義DOM方法);
. 用于讀入文件的標準的Java輸入數(shù)據(jù)包(自定義SAX方法);
??? 以上三種分析和存儲規(guī)范方法的選擇可以結合下面的判定要求加以確定。
(1) 判定代碼生成器能否用自定義數(shù)據(jù)結構獲得規(guī)范的信息,若不能,則使用純DOM方法;若能,則進一步判定自定義數(shù)據(jù)結構是否應該從DOM中創(chuàng)建,若是,則使用自定義DOM方法。否則,使用自定義SAX方法;
(2)?根據(jù)性能要求確定。大的XML文檔上使用DOM數(shù)據(jù)結構可能會花費昂貴,尤其是當僅僅使用文檔的一小部分生成程序時。這時將不得不創(chuàng)建自己的自定義數(shù)據(jù)結構,并且還將使用SAX。
(3)?如果使用DOM效率很低,也可以根據(jù)實際情況加以考慮。這種情況最有可能發(fā)生在程序的規(guī)范僅為大的XML文檔的一小部分的地方。使用SAX將允許忽略XML文檔中的大部分,而僅僅只為代碼生成器提取必要的信息。
??? 一旦XML文檔進行過語法分析并且作為一個對象使用時,就可以在該對象上執(zhí)行分析和判斷。分析包括:
. 檢錯:在規(guī)范中查找句法錯誤。
. 警告:查找公共錯誤或潛在的不明顯的錯誤。
. 模型分析:分析規(guī)范更深層的語義。
. 性能分析:決定生成一個優(yōu)化程序結構或代碼途徑的規(guī)范。
. 縮寫的擴展:規(guī)范中常提供縮寫或快捷方式。
. 擴展成標準形式:有些規(guī)范允許以各種方式說明同一件事情。
. 優(yōu)化:轉換對象。
??? 一旦DOM數(shù)據(jù)結構存儲于內存中,就可以把基于XML文檔的代碼用于分析和轉換結構,最終代碼生成器直接從DOM數(shù)據(jù)結構中獲取信息。讀入XML文件并對其進行語法分析的程序段如下:
import? com.ibm.xml.parser.Parser;
import? org.w3c.dom.*;
import? java.io.*;
public? class? DOM_Utill {

/** read? and? parse? an? XML? files */
public? static? Document? readDocument (String? filename)
throws Exception {
InputStream is=new FileInputStream(filename);
Parser parser=new Parser(filename);
Return Parser.readStream(is);
}
}
??? 使用DOM的程序生成器,首先要提供一個基本實用工具類,該類定義利用DOM樹中信息的實用方法,如用于獲取與語法分析樹中的節(jié)點相關聯(lián)的數(shù)據(jù)的方法,用于獲取元素屬性值的方法,如果使用自定義DOM方法。這種方法是程序將把XML規(guī)范作為一個自定義的數(shù)據(jù)結構讀入,然后將該規(guī)范轉換為一個自定義的數(shù)據(jù)結構,XML規(guī)范既可以在運行時間讀入,也可以在生成時間讀入。標準的代碼生成器是一系列簡單的打印語句,這些語句是具有重復代碼或條件代碼的控制語句的狀態(tài)流。
4.2 利用JSP(Java? Server? Pages)生成程序
??? JSP是普遍應用于Internet中的重要的程序生成器。JSP是一種非常簡單的規(guī)范語言,包含了輸出到Web頁面的靜態(tài)文本和調用基本實現(xiàn)語言的轉義符" title="轉義符">轉義符,它沒有高層次的抽象化并且不涉及語言結構。轉義符提供很大的靈活性,同時又只產生最小的影響。JSP是一種既簡單又強有力的技術,用于在Web服務器端生成動態(tài)的HTML頁面。JSP提供了一個非常簡單的利用“模板”創(chuàng)建程序生成器的途徑。盡管JSP是用于設計和實現(xiàn)Web頁面的,但原則上可以傳送任何其它內容,特別是它可以傳送Java程序。
一個簡單的程序生成器是JSP翻譯器,JSP翻譯器是程序生成器廣泛使用的一個示例。它把一個JSP文件(規(guī)范)轉換成一個JAVA文件。從一個JSP文件到Java程序的轉換由Java服務器頁面規(guī)范來定義。過程示例如下:
Mydate.jsp

?

???

4.3 利用Xpath和XSLT生成程序
??? XSLT和Xpath能夠不利用任何Java代碼就可以創(chuàng)建程序生成器。
?? ?Xpath是一種用于從XML文檔提取信息的語言,用于在XSLT中選擇一個XML文檔的不同部分。
??? XSLT又稱可擴展的樣式表轉換語言,可以將XML文檔翻譯成其它不同結構的XML文檔或純文本文件。XSLT提供了一種轉換和操作XML數(shù)據(jù)的機制。如圖5所示。
??? XML構成了信息互交換標準的基礎。XML提供了信息構成的結構,XSLT與Xpath(XML路徑語言)提供了提取、重建和熟練使用XML中信息的手段。Xpath使用一種簡單的路徑語言來對XML文檔的各個部分進行尋址,XML提供一系列的操作和操作方法。而Xpath保證了選擇和尋址的準確度。

??? 利用Xpath和XSLT生成程序舉例
play.xml



XML document
?
??? Go up the hill
???
?


??? Fetch a pail of water
???
?

?
??? Fall down, break crown
???
?

?
??? Tumble down

亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧美偷拍卡通变态| 亚洲欧美在线免费观看| 亚洲精品美女久久7777777| 久久综合久久久| 久久xxxx| 亚洲网站在线观看| 亚洲九九九在线观看| 韩日在线一区| 国产精品美女一区二区在线观看| 欧美日韩亚洲另类| 欧美~级网站不卡| 欧美在线观看网站| 欧美在线黄色| 亚洲在线黄色| 亚洲精品日韩在线观看| 亚洲精品社区| 亚洲电影中文字幕| 日韩一本二本av| 亚洲国产精品专区久久| 国产一区二区三区四区三区四 | 久久综合九色综合欧美狠狠| 午夜在线视频观看日韩17c| 亚洲电影一级黄| 久久精品亚洲精品国产欧美kt∨| 亚洲欧美日韩国产一区| 在线午夜精品自拍| 一本一本a久久| 亚洲三级电影在线观看| 99re热精品| 91久久久久久| 亚洲国产黄色片| 亚洲区欧美区| 91久久在线播放| 亚洲美女免费视频| 99国产精品私拍| 日韩视频一区二区三区在线播放| 亚洲毛片在线看| 欧美一级大片在线免费观看| 亚洲电影视频在线| 亚洲国产日韩欧美综合久久| 久久国产欧美日韩精品| 欧美有码在线观看视频| 亚洲激情偷拍| 亚洲精品日韩在线观看| 亚洲精品视频在线播放| 亚洲午夜视频| 亚洲免费网址| 久久国产乱子精品免费女| 久久国产婷婷国产香蕉| 欧美一级在线播放| 久久综合给合久久狠狠色| 久久一区中文字幕| 免费久久99精品国产| 欧美日韩国产天堂| 国产精品久久久久久福利一牛影视| 免费精品99久久国产综合精品| 久久综合久久美利坚合众国| 美女在线一区二区| 欧美高清不卡| 欧美日韩在线免费| 国产最新精品精品你懂的| 很黄很黄激情成人| 日韩视频在线观看国产| 中文在线资源观看网站视频免费不卡| 亚洲视频在线观看视频| 亚洲激情视频| 一本色道综合亚洲| 中文一区二区在线观看| 久久国产精品毛片| 美女黄网久久| 国产伦理一区| 亚洲二区免费| 欧美区一区二| 国产又爽又黄的激情精品视频| 极品少妇一区二区三区| 一区二区成人精品| 欧美一区二区私人影院日本| 性做久久久久久免费观看欧美 | 欧美制服丝袜第一页| 亚洲国产综合在线看不卡| 亚洲自啪免费| 久久久精品国产免大香伊| 久久在线精品| 亚洲茄子视频| 亚洲一区日韩在线| 亚洲国产精品一区二区www在线| 黑人一区二区| 亚洲图片你懂的| 久久av一区二区| 久久国产免费| 亚洲一区二区三| 久久影视精品| 国产日韩在线播放| 最新成人av网站| 亚洲人成在线观看一区二区| 欧美亚洲免费电影| 亚洲精品综合| 免费成人性网站| 国产精品丝袜91| 一区二区三区 在线观看视| 欧美亚洲综合久久| 亚洲天堂网站在线观看视频| 久久人91精品久久久久久不卡| 欧美日韩视频第一区| 亚洲电影在线| 欧美一级网站| 欧美一级一区| 欧美视频中文字幕| 永久域名在线精品| 欧美在线观看视频在线| 亚洲视频精选| 欧美日韩天天操| 永久免费精品影视网站| 一本色道久久加勒比88综合| 最近看过的日韩成人| 性感少妇一区| 国产精品亚发布| 日韩视频一区二区在线观看 | 亚洲国产成人在线视频| 午夜精品久久久久| 亚洲网址在线| 国产精品对白刺激久久久| 在线精品一区| 亚洲二区视频在线| 欧美中文字幕视频在线观看| 国产精品中文字幕欧美| 一本一本大道香蕉久在线精品| 亚洲国产欧洲综合997久久| 麻豆精品一区二区综合av| 国产欧美精品一区二区三区介绍| 亚洲一区在线免费| 午夜精品亚洲一区二区三区嫩草| 亚洲黄页一区| 中文国产亚洲喷潮| av不卡免费看| 国内揄拍国内精品久久| 国产精品一区三区| 亚洲视频高清| 欧美日韩精品二区| 亚洲一级在线| 亚洲精品乱码久久久久久按摩观| 翔田千里一区二区| 亚洲一区三区电影在线观看| 牛牛影视久久网| 禁断一区二区三区在线 | 亚洲高清免费视频| 亚洲直播在线一区| 性做久久久久久久免费看| 国产精品v片在线观看不卡| 亚洲视频免费| 亚洲一区亚洲二区| 久久久久久网址| 亚洲成人资源网| 久久福利一区| 女主播福利一区| 亚洲福利专区| 一本一本a久久| 欧美日韩在线高清| 一本色道久久综合亚洲精品不| 午夜在线视频观看日韩17c| 国产精品久久一区二区三区| 亚洲一区日本| 欧美在线影院在线视频| 国产精品自在欧美一区| 久久国产精品久久久久久久久久 | 99riav国产精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩免费看| 这里只有精品视频| 亚洲欧美一区二区三区在线| 国产精品亚洲第一区在线暖暖韩国| 亚洲欧美精品在线| 久久国产精品99久久久久久老狼| 国产丝袜美腿一区二区三区| 91久久夜色精品国产九色| 欧美精品在线一区二区| 日韩视频一区二区三区在线播放免费观看| 在线视频精品| 国产精品久久网站| 亚洲在线观看视频| 午夜欧美精品久久久久久久| 国产欧美综合在线| 在线欧美日韩国产| 99在线精品视频| 亚洲在线日韩| 欧美视频在线一区二区三区| 在线亚洲+欧美+日本专区| 一区二区三区国产盗摄| 国产欧美一区二区白浆黑人| 久久精品国产久精国产一老狼| 欧美精品一区二区久久婷婷| 亚洲午夜免费视频| 久久福利精品| 日韩一级大片| 欧美在线播放一区| 亚洲免费av电影| 性欧美1819性猛交| 亚洲国产黄色片| 亚洲视频专区在线| 国产一区二区久久|