• 沒有找到結果。

本研究所需要的介面產生器必須符合兩個條件

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 系統才能順利的在本研究環境下執行。

相關文件