本研究所需要的介面產生器必須符合兩個條件
1. 由於本研究會針對辨識器與應用軟體作修正,所以必須要能取得介面產生器的程式 原始碼
2. 介面產生器必須要產生能夠銜接辨識器與應用軟體的介面程式
2.2.1 介面產生器的選擇
首先我們收集了從2000 到 2010 年發表於 IEEE 與 ACM,有關程式產生器的期刊、論 文、產品並以其用途加以分類,大致上分成了
使用者介面程式產生器[45][46]
UML 程式產生器。[10][12][16]
硬體程式產生器[9][11][13][14][29][30]
編譯器程式產生器[28][48]
介面程式產生器[26][27]
其他[15][17][18][31][47]
11
綜合上述所蒐集到各種程式產生器的資料,可得表1。由表 1 得知,唯有介面程式產
生器類別中,Generic Interface Bridge[27]這份文獻及其產生器是符合我們的條件。Generic Interface Bridge 在概念上,可以產生兩個部分,一個是銜接前端辨識器的
Frontend-Interface,另一個是用來銜接後端應用軟體的 Backend-Interface,Generic Interface Bridge 系統藉由這樣的方式,銜接了辨識器與應用軟體。
再回到一開始選擇程式產生器條件的部分,由於本研究是需要取得介面產生器並利 用產生出來的介面程式銜接辨識器與應用軟體兩端,所以選擇以交大軟體工程實驗室所 提出並發表於期刊上的通用橋接介面系統[27](Generic Interface Bridge,以下簡稱 GIB),
作為本研究的介面產生器。
類別 用途 程式原始碼 例
GUI
code generator
使用現有的元件,以視 覺方式產生使用者圖 形介面
商業軟體 無法取得
Visual Studio, Borland C builder
UML
code generator
將UML 轉換成目標程 式碼
商業軟體 無法取得
ALTOVA, Actifsource, [10], [12], [16]
Hardware code generator
由電路圖形的方式產 生cross-compiler 所需 程式或組合語言程式
商業軟體 無法取得
[9], [11], [13], [14], [29]
Compiler code generator
產生compiler 所需的 lexical analyzer, syntactic analyzer
部分可取得 Lex, Flex, Yacc, bison…, [28]
Interface code generator
產生用於銜接 recognizer 與
application 的介面程 式
可取得 Generic interface bridge
Others 程式語言wrapper 產生SQL 程式碼 其他…
部分可取得 Swig, [15], [17], [18], [31], [47]
表1、程式產生器分類列表(2000-2010)
12
2.2.2 介面產生系統簡介
本章節我們將針對GIB 系統[26][27]架構及其流程作簡單介紹,GIB 系統分為三大部 分,Frontend-Interface, GIB Kernel, Backend-Interface 三個部分,下面會分別對各模組的 功能作說明。圖17 為 GIB 系統的架構流程圖。
圖17、Generic Interface Bridge 系統架構流程圖
Frontend-Interface
Command composer
使用者於使用GIB 系統前,需先利用這個使用者介面模組,設定辨識結果所要
對應到的指令,並將其存於profile 中,最後產生 Frontend-Interface 的程式碼。
Command translation
用於銜接辨識器的部分,接收由辨識器所辨識出來的結果。比對profile 中是否 有以存在的辨識結果及其對應指令。並將該對應指令傳送到GIB Kernel 的部 分。
GIB kernel
Lexical / Syntactic analyzer & Event Delegation
接受由Command translation 所傳遞來的指令,進行字彙及句法的分析,如該指 令通過分析後是屬於合法指令,則由接下來的Event Delegation 發出事件,通 知Backend-Interface 應該作出哪些模擬動作
13
Backend-interface
Input-device emulator
接受由GIB Kernel 中 Event Delegation 部分所發出的事件,解析及判斷該指令是
要進行哪個硬體裝置的模擬(滑鼠或鍵盤),找出負責相對應的硬體設備。
Keyboard & mouse API
使用滑鼠、鍵盤的API 程式,實際模擬滑鼠的移動、點擊或鍵盤敲擊。
使用流程上:
1. 使用者在使用 GIB 系統前,先利用 Frontend-Interface 中的 Command composer 部分 進行判斷結果與對應指令的設定。並將其存於profile 中。
2. 接下來,使用者就可以利用辨識器進行操作,其操作過程經由辨識器辨識出結果後,
送到Command translation 比對是否存在該辨識結果的對應指令
3. 若相對應指令存在,則將該指令傳送到 GIB Kernel 進行字彙與句法的分析,如果該 指令合法,則由Event Delegation 發出事件。
4. 由 Event Delegation 所發出的事件將告訴 Backend-Interface 應該利用滑鼠或鍵盤的 API 程式指揮滑鼠、鍵盤進行什麼樣的動作與應用軟體互動。 軟體上,又因.Net Framework 版本及程式本身問題,導致圖層無法順利透明化,產生 在使用應用軟體時的閃爍問題,遮蔽了原有的應用軟體,妨礙使用者執行應用軟體。
鍵盤模擬
原GIB 系統並未實踐鍵盤模擬。
14
LL(0) parser
原GIB 系統所採用的 parser 是 LL(0)的 parser,我們知道在 parser 中 LL(0)是需要 backtracking 的動作,效率低又花費時間,因此這邊改良過去所使用的文法,並將其 重新設計成LL(1)的 parser,希望能改善其執行效率。
Command composer
原Command composer 的設計,針對對應指令的部分,是必須由開發人員直接鍵入
指令的方式來建構,如此一來對於不了解GIB 文法的人很難撰寫對應指令,且原
Command composer 並無提供錯誤檢查機制,也就是說即便了解了 GIB 文法,開發人
員還是有可能會製作出含有錯誤的指令且未被察覺。以上問題都對事後GIB 系統的
操作及執行,造成了一定的不穩定性。
關於上述的限制,我們都必須加以改善,GIB 系統才能順利的在本研究環境下執行。