• 沒有找到結果。

利用模型驅動技術快速產生領域專屬語言之執行與偵錯環境 - 政大學術集成

N/A
N/A
Protected

Academic year: 2021

Share "利用模型驅動技術快速產生領域專屬語言之執行與偵錯環境 - 政大學術集成"

Copied!
102
0
0

加載中.... (立即查看全文)

全文

(1)國立政治大學資訊科學系 Department of Computer Science National Chengchi University 碩士論文 Master’s Thesis. 立. 政 治 大. ‧ 國. 學. 利用模型驅動技術快速產生領域專屬語言之執行與偵錯環境. ‧. n. al. er. io. sit. y. Nat. Rapid Generation of Executing and Debugging Environments for Domain-Specific Languages based on Model-Driven Technology. Ch. engchi. i Un. v. 研 究 生: 趙仁鋒 指導教授: 陳正佳. 中華民國一○一年一月 January 2012.

(2) 利用模型驅動技術快速產生領域專屬語言之執行與偵錯環境 Rapid Generation of Executing and Debugging Environments for Domain-Specific Languages based on Model-Driven Technology. 研 究 生 : 趙仁鋒. Student: Jen-Feng Chao. 指 導 教 授 : 陳正佳. Advisor: Cheng-Chia Chen. 政 治 大. 立. 學. ‧ 國. 國立政治大學 資訊科學系. Nat. sit. y. ‧. 碩士論文. er. io. A Thesis. n. a l to Department of Computer submitted i v Science n. C. U h eChengchi National n g c h iUniversity. in partial fulfillment of the Requirements for the degree of Master in Computer Science. 中華民國一○一年一月 January 2012.

(3) 利用模型驅動技術快速產生領域專屬語言之執行與偵錯環境 摘要 領域專屬語言的設計理念是希望能夠協助使用者在特定領域上解決特定 問題。然而,大多數領域專屬語言的開發環境與工具均非常貧乏,這將. 政 治 大. 會增加使用者在開發程式上的困難。. 立. 所以本研究利用模型導向技術來建構一套生成系統,使用者只要輸. ‧ 國. 學. 入領域專屬語言的語意以及偵錯定義,就能快速生成語言的執行與偵錯. ‧. 環境,並提供完善的操作介面,輔助使用者加快程式開發的速度。. n. er. io. sit. y. Nat. al. Ch. engchi. 衩. i Un. v.

(4) Rapid Generation of Executing and Debugging Environments for Domain-Specific Languages based on Model-Driven Technology. Abstract 衔表补 衰衵衲衰衯衳补 衯衦 衣衲补衡衴衩衮衧 衤衯衭衡衩衮蠭衳衰补衣衩蠌衣 衬衡衮衧衵衡衧补衳 蠨衄術行衳蠩 衩衳 衴衯 表补衬衰 衵衳补衲. 政 治 大 衳衯衬衶补 衰衲衯衢衬补衭衳 衩衮 衡 衰衡衲衴衩衣衵衬衡衲 衤衯衭衡衩衮蠮 衈衯衷补衶补衲蠬 衭衯衳衴 衄術行衳 衡衲补 衬衡衣衫 衯衦 立. ‧ 國. 學. 衤补衶补衬衯衰衭补衮衴 补衮衶衩衲衯衮衭补衮衴衳 衡衮衤 衴衯衯衬衳蠬 衷表衩衣表 衷衯衵衬衤 衢补 衭衯衲补 衤衩蠎衣衵衬衴 衴衯 衤补衶补衬衯衰 衰衲衯衧衲衡衭衳蠮. ‧. sit. y. Nat. 衔表衩衳 衴表补衳衩衳 衩衳 衡衩衭补衤 衴衯 衤补衶补衬衯衰 衡 衧补衮补衲衡衴衩衮衧 衳衹衳衴补衭 衢衡衳补衤 衯衮 衭衯衤补衬蠭. er. io. 衤衲衩衶补衮 衴补衣表衮衯衬衯衧衹蠮 衇衩衶补衮 衴表补 衳补衭衡衮衴衩衣衳 衡衮衤 衤补衢衵衧衧衩衮衧 衤补蠌衮衩衴衩衯衮衳 衯衦 衡. n. a l 衴表补 衳衹衳衴补衭 衷衯衵衬衤 衢补 i衡衢衬补 v 衴衯 衧补衮补衲衡衴补 衡衮 补衸补衣衵衴蠭 衤衯衭衡衩衮蠭衳衰补衣衩蠌衣 衬衡衮衧衵衡衧补蠬 Ch. n engchi U. 衩衮衧 衡衮衤 衤补衢衵衧衧衩衮衧 补衮衶衩衲衯衮衭补衮衴 衦衯衲 衴表补 衬衡衮衧衵衡衧补 衷衩衴表 衦衲衩补衮衤衬衹 衵衳补衲 衩衮衴补衲蠭 衦衡衣补蠬 衴表衵衳 衩衭衰衲衯衶衩衮衧 补蠎衣衩补衮衣衹 衡衮衤 衰衲衯衤衵衣衴衩衶衩衴衹 衯衦 衵衳衩衮衧 衴表补 衬衡衮衧衵衡衧补蠮. 衩衩.

(5) 謝. 誌. 政大資科的研究生涯,讓我歷經了許多成長。學習期間幸蒙 陳正佳老師的循循善誘 以及敦敦教誨,帶領我開啟學術研究的大門,一窺資訊科學的奧妙。而在研究方向的 訂定、基本觀念的建立、研究目標的實現,以及論文的撰寫等各階段也都受益匪淺。 口試期間,亦承蒙淡江大學資訊與圖書館學系 歐陽崇榮老師以及世新大學資訊管 理學系 鄭武堯老師的鼓勵與指教,指引學生由不同的角度探討本研究成果在未來的. 政 治 大. 發展性,也指明學生論文上的疏漏之處,使得本論文可更臻完善。. 立. 在論文研究期間,非常感謝曾仲瑋學長一路的陪伴與扶持,也感謝曾在同一實驗. ‧ 國. 學. 室的學長們的協助,以及在此期間一起相互砥礪的學弟們。除此之外,也對不吝嗇給 予鼓勵及幫助的老師、助教和同學們致上由衷的感謝。. ‧. 最後特別要感謝我的家人,無條件給予我許多的支持與關懷,讓我能夠順利地完. y. Nat. n. er. io. al. sit. 成學業,願以此成果與家人共享。. Ch. engchi. i Un. v. 趙仁鋒 謹誌於 政治大學資訊科學研究所 中華民國 一○一年 一月 衩衩衩.

(6) 目. 錄. 第一章 序論 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠱. 蠱蠮蠱. 問題動機. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠱. 蠱蠮蠲. 實現策略. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠱. 蠱蠮蠳. 特色貢獻. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠲. 蠱蠮蠴. 章節架構. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 立. 政 治 大. 第二章 相關研究探討 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. ‧ 國. 學. 蠲蠮蠱. 正規語意. 蠲蠮蠲. 編譯器與直譯器生成工具 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. ‧. 使用者偵錯介面 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠶. er. al. n. 蠲蠮蠵. 蠵 蠶. 蠲蠮蠳蠮蠱 蠲蠮蠴. 蠴. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. sit. 衒补衬衡衴衩衯衮衡衬 衍补衴衡蠭行衡衮衧衵衡衧补 蠨衒衍行蠩 衁衮衤 衔衯衯衬衳. io. 蠲蠮蠳. 蠴. y. Nat. 蠲蠮蠲蠮蠱. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠳. Ch. engchi U. v ni. 衅衣衬衩衰衳补 衄补衢衵衧 衐衬衡衴衦衯衲衭 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠶. 語言開發框架 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠷. 蠲蠮蠴蠮蠱. 蠸. 衘衴补衸衴 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 相似系統. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠸. 蠲蠮蠵蠮蠱. 衄術行 衄补衢衵衧衧衩衮衧 衆衲衡衭补衷衯衲衫 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠸. 蠲蠮蠵蠮蠲. 衅衐衲衯衶衩衤补 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠹. 蠲蠮蠵蠮蠳. 術衰衯衯衦衡衸 偵錯器生成框架 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠰. 衩衶.

(7) 蠲蠮蠵蠮蠴. 相似系統比較 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠱. 第三章 系統架構分析 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠲. 蠳蠮蠲. 架構概要. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠲. 蠳蠮蠱蠮蠱. 系統生成時期架構 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠳. 蠳蠮蠱蠮蠲. 系統執行時期架構 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠴. 系統輸入模型 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠵. 政 治 大. 蠳蠮蠲蠮蠱. 文法 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠵. 蠳蠮蠲蠮蠲. 自然語意 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠶. 蠳蠮蠲蠮蠳. 偵錯指令 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠶. 立. 學. ‧. ‧ 國. 蠳蠮蠱. 衒衇衄蠲衃衯衤补 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠹. 蠳蠮蠴. 衒衡衧补衄补衮 執行平台 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠰. 蠳蠮蠵. 衒衡衧补衄补衮 偵錯套件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠱. n. al. er. io. sit. y. Nat. 蠳蠮蠳. Ch. engchi. i Un. v. 蠳蠮蠵蠮蠱. 啟動器 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠲. 蠳蠮蠵蠮蠲. 偵錯模型 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠲. 蠳蠮蠵蠮蠳. 中斷點機制 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠲. 蠳蠮蠵蠮蠴. 原始碼整合顯示 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠳. 第四章 系統實作. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠵. 蠴蠮蠱. 建立 衒衇衄蠲衃衯衤补 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠵. 蠴蠮蠲. 建構 衒衡衧补衄补衮 執行平台 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠷 衶.

(8) 載入執行元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠷. 蠴蠮蠲蠮蠲. 實現偵錯機制 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠹. 蠴蠮蠲蠮蠳. 接收偵錯命令與回傳偵錯事件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠶. 實作 衒衡衧补衄补衮 偵錯套件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠷 蠴蠮蠳蠮蠱. 建構啟動器 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠷. 蠴蠮蠳蠮蠲. 實作偵錯模型 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠸. 蠴蠮蠳蠮蠳. 設置中斷點機制 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠲. 蠴蠮蠳蠮蠴. 整合原始碼顯示 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠳. 立. 政 治 大. 學. ‧ 國. 蠴蠮蠳. 蠴蠮蠲蠮蠱. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠵. 蠵蠮蠱. 專案設置. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠵. 蠵蠮蠲. 建立 衒衯衢衯衴 的編輯環境 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠶. 蠵蠮蠳. 描述 衒衯衢衯衴 自然語意及偵錯指令 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠶. ‧. 第五章 系統範例. n. er. io. sit. y. Nat. al. Ch. engchi. i Un. v. 蠵蠮蠴. 生成執行元件並新增延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠳. 蠵蠮蠵. 執行與偵錯 衒衯衢衯衴 程式碼 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠳. 第六章 結論與未來展望 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠶 蠶蠮蠱. 結論 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠶. 蠶蠮蠲. 未來展望. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠶. 參考文獻 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠸 附錄衁:衒衇衄 文法規則 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠸蠲 衶衩.

(9) 表. 目. 錄. 蠳蠮蠱. 衒衯衢衯衴蠮衸衴补衸衴 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠷. 蠳蠮蠲. 資料型態宣告 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠹. 蠳蠮蠳. 衆衲衵衩衴蠮衸衴补衸衴 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠱. 蠳蠮蠴. 衆衲衵衩衴蠮衲衧衤 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠱. 蠳蠮蠵. 規則的形式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠲. 蠳蠮蠶. 規則集合的形式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠳. 蠳蠮蠷. 衭衡衩衮蠮衲衧衤 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠵. 蠳蠮蠸. 中斷檢查點設置 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠷. 蠳蠮蠹. 新增與移除 衳衴衡衣衫 衦衲衡衭补 設置 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠸. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. i Un. v. 蠳蠮蠱蠰 更新變數設置 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠹. Ch. engchi. 蠴蠮蠱. 衒衇衄衇补衮补衲衡衴衯衲蠮衸衴补衮衤 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠸. 蠴蠮蠲. 衍衯衤衵衬补 蠌衬补衎衡衭补 樣板碼 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠹. 蠴蠮蠳. 衭补衴表衯衤衃衡衬衬 函式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠱. 蠴蠮蠴. 补衮衴补衲衁衣衴衩衶衡衴衩衯衮衒补衣衯衲衤 函式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠲. 蠴蠮蠵. 衬补衡衶补衁衣衴衩衶衡衴衩衯衮衒补衣衯衲衤 函式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠳. 蠴蠮蠶. 衭补衴表衯衤衒补衴衵衲衮 函式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠴. 衶衩衩.

(10) 蠴蠮蠷. 衵衰衤衡衴补衖衡衲衩衡衢衬补 函式 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠵. 蠴蠮蠸. 衯衲衧蠮补衣衬衩衰衳补蠮衤补衢衵衧蠮衣衯衲补蠮衬衡衵衮衣表衃衯衮蠌衧衵衲衡衴衩衯衮衔衹衰补衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠸. 蠴蠮蠹. 啟動代理:衒行衡衵衮衣表衄补衬补衧衡衴补蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠴蠹. 蠴蠮蠱蠰 衯衲衧蠮补衣衬衩衰衳补蠮衤补衢衵衧蠮衵衩蠮衬衡衵衮衣表衃衯衮蠌衧衵衲衡衴衩衯衮衔衡衢衇衲衯衵衰衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠰 蠴蠮蠱蠱 啟動組態頁面組:衒衔衡衢衇衲衯衵衰蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠰 蠴蠮蠱蠲 衯衲衧蠮补衣衬衩衰衳补蠮衣衯衲补蠮衲补衳衯衵衲衣补衳蠮衭衡衲衫补衲衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠲. 政 治 大. 蠴蠮蠱蠳 衯衲衧蠮补衣衬衩衰衳补蠮衤补衢衵衧蠮衣衯衲补蠮衢衲补衡衫衰衯衩衮衴衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠳. 立. ‧ 國. 學. 蠴蠮蠱蠴 實作行中斷點:衒行衩衮补衂衲补衡衫衰衯衩衮衴蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠴 蠴蠮蠱蠵 衯衲衧蠮补衣衬衩衰衳补蠮衵衩蠮衰衯衰衵衰衍补衮衵衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠵. ‧. 蠴蠮蠱蠶 衯衲衧蠮补衣衬衩衰衳补蠮衣衯衲补蠮衲衵衮衴衩衭补蠮衡衤衡衰衴补衲衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠵. sit. y. Nat. n. al. er. io. 蠴蠮蠱蠷 實作 getAdapter()蠺 衒衅衤衩衴衯衲衁衤衡衰衴补衲衆衡衣衴衯衲衹蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠶. i Un. v. 蠴蠮蠱蠸 實作中斷點的 衡衤衡衰衴补衲蠺 衒衂衲补衡衫衰衯衩衮衴衁衤衡衰衴补衲 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠷. Ch. engchi. 蠴蠮蠱蠹 衯衲衧蠮补衣衬衩衰衳补蠮衤补衢衵衧蠮衣衯衲补蠮衳衯衵衲衣补行衯衣衡衴衯衲衳 延伸元件. 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠸. 蠴蠮蠲蠰 實作原始碼查看導引者:衒術衯衵衲衣补行衯衯衫衄衩衲补衣衴衯衲蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠵蠹 蠴蠮蠲蠱 實作原始碼查看參與者:衒術衯衵衲衣补行衯衯衫衵衰衐衡衲衴衩衣衩衰衡衮衴蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠰 蠴蠮蠲蠲 衯衲衧蠮补衣衬衩衰衳补蠮衤补衢衵衧蠮衣衯衲补蠮衳衯衵衲衣补衐衡衴表衃衯衭衰衵衴补衲衳 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠰 蠴蠮蠲蠳 實作原始碼路徑計算器代理:衒術衯衵衲衣补衐衡衴表衃衯衭衰衵衴补衲衄补衬补衧衡衴补蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠶蠲 蠴蠮蠲蠴 衯衲衧蠮补衣衬衩衰衳补蠮衤补衢衵衧蠮衵衩蠮衤补衢衵衧衍衯衤补衬衐衲补衳补衮衴衡衴衩衯衮 延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠳 蠴蠮蠲蠵 實作偵錯模型顯示:衒衄补衢衵衧衍衯衤补衬衐衲补衳补衮衴衡衴衩衯衮蠮衪衡衶衡 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠴 衶衩衩衩.

(11) 蠵蠮蠱. 衒衯衢衯衴蠮衲衧衤蠺 提取器宣告 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠸. 蠵蠮蠲. 衒衯衢衯衴蠮衲衧衤蠺 解譯 Robot 模型 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠹. 蠵蠮蠳. 衒衯衢衯衴蠮衲衧衤蠺 解譯 Command 模型串列 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠰. 蠵蠮蠴. 衒衯衢衯衴蠮衲衧衤蠺 解譯 Command 模型 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠱. 蠵蠮蠵. 衒衯衢衯衴蠮衲衧衤蠺 解譯函式呼叫 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠲. 蠵蠮蠶. 衒衯衢衯衴蠮衲衧衤蠺 更新變數資訊 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠳. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 衩衸. i Un. v.

(12) 圖. 目. 錄. 蠲蠮蠱. 衅衣衬衩衰衳补 套件架構 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮. 蠳蠮蠱. 系統生成時期架構 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠳. 蠳蠮蠲. 系統執行時期架構 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠱蠵. 蠳蠮蠳. 衒衇衄蠲衣衯衤补 架構 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠲蠹. 蠳蠮蠴. 政 治 大 控制堆疊超模型 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 立. 蠷. 蠳蠱. 衅衣衬衩衰衳补 內的偵錯模型 衕衍行 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠳. 蠴蠮蠱. 藉由 衘衴补衸衴 專案精靈新增 衒衇衄蠲衃衯衤补 專案 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠳蠶. 蠵蠮蠱. 新增 衒衯衢衯衴 的 衘衴补衸衴 專案 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠶. 蠵蠮蠲. 衒衯衢衯衴 需要的套件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠶蠷. 蠵蠮蠳. 生成 衒衯衢衯衴 執行元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠴. 蠵蠮蠴. 新增執行元件的延伸元件 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠴. 蠵蠮蠵. 偵錯 补衸蠱蠮衲衯衢衯衴 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠮 蠷蠵. ‧. ‧ 國. 學. 蠳蠮蠵. n. er. io. sit. y. Nat. al. Ch. engchi. 衸. i Un. v.

(13) 第 一 章 序論. 政 治 大. 立. ‧. ‧ 國. 學. 1.1 問 題 動 機. 領域專屬語言 蠨衤衯衭衡衩衮蠭衳衰补衣衩蠌衣 衬衡衮衧衵衡衧补蠬 衄術行蠩 衛蠱衝 是開發人員為了解決特定領域的問題. Nat. sit. y. 所定義的專用語言。所以除了軟體工程師之外,許多毫無程式設計經驗的使用者也會. n. al. er. io. 利用 衄術行 來解決問題。然而大多數 衄術行 的開發環境與工具均非常貧乏,缺乏開發環. i Un. 境與工具的輔助將會降低使用者開發程式的效率。. Ch. engchi. v. 鑑於上述情況,擁有良好的輔助工具環境例如直譯器以及偵錯器將會對使用者有 莫大的幫助。但從頭開發直譯器與偵錯器需要耗費大量的時間、金錢與人力,為了促 進程式開發效率而花費太多時間去建置輔助工具也顯得本末倒置。所以,如何快速產 生 衄術行 的執行與偵錯環境,並提供良好的操作介面,協助使用者加快程式開發的效 率,即為本研究最主要的動機。. 1.2 實 現 策 略 為了要達到快速並簡易地產生 衄術行 執行與偵錯環境的目的,我們利用模型驅動技術 蠱.

(14) 蠨衍衄衁蠩 衛蠲衝 來建構一套自動生成系統。開發人員只要定義出核心的骨幹,就能夠在不需 要太多額外的前置作業或背景知識下快速打造出特定 衄術行 的開發環境。 本研究首先定義一套實作正規語意並可加入偵錯定義的語言,讓開發人員可以利 用此語言來描述 衄術行。接著建立生成器來讀入這些描述,產生具備偵錯機制的執行元 件。執行元件可被執行平台下的直譯器與偵錯器通用框架載入,以便執行與偵錯 衄術行 程式。 除了執行與偵錯程式外,提供整合式開發環境也利於使用者撰寫程式。所以還. 政 治 大 衅衣衬衩衰衳补 衛蠳衝 提供了完善的使用者介面,以及強大的偵錯平台 衛蠴衝,開發人員能夠輕易地將 立. 需要建構一個擁有人性化介面的環境,才能有助於增進程式開發速度的目的。由於. ‧ 國. 學. 自製的偵錯器整合進 衅衣衬衩衰衳补 內,輔助使用者開發 衄術行 程式。所以我們決定將系統整 合至 衅衣衬衩衰衳补 平台,讓使用者可以在友善的整合式開發環境下執行與偵錯 衄術行 程式。. ‧. n. al. er. io. sit. y. Nat. 1.3 特 色 貢 獻. i Un. v. 本研究建立一套自動生成執行與偵錯環境的系統,能將 衄術行 的正規語意與偵錯定義轉. Ch. engchi. 換成具備偵錯機制的執行元件,此元件可由直譯器與偵錯器通用框架載入以便執行與 偵錯 衄術行 程式,並整合至 衅衣衬衩衰衳补 平台。本系統擁有下列特色與貢獻: • 使用正規語意來描述語言:採用正規語意 衛蠵衝 來描述 衄術行 的語意,而不是直接以 程式語言實作。使開發者能在較抽象的層面上描述一個語言如何在機器上運作, 而不用去顧慮其他實作的細節。除此之外,我們也更容易追蹤程式的執行流程以 及驗證程式的正確性。 • 抽象化偵錯機制:開發者不用一一實作每個偵錯元件或是功能,只要在 衄術行 的 語意內加入偵錯定義,即可讓生成的執行元件擁有基本的偵錯機制,能夠偵錯 衄術行 程式。 蠲.

(15) • 提供人性化開發環境:本系統建構在 衅衣衬衩衰衳补 平台之上,以便提供人性化的開發 環境讓使用者撰寫程式。使用者偵錯程式時,也可利用 衅衣衬衩衰衳补 提供的偵錯介面 來逐步追蹤程式的狀態。. 1.4 章 節 架 構 首先在第一章內,我們簡介本研究的動機、策略與貢獻。第二章則介紹相關的背景知. 政 治 大 接著會描述使用者偵錯介面,其中包括了 衅衣衬衩衰衳补 與其偵錯平台,並介紹語言開發框架 立. 識、工具以及相似系統,此章首先介紹正規語意,再探討編譯器與直譯器生成工具。. 蠨衦衲衡衭补衷衯衲衫蠩,最後則是幾個與本研究相近的系統分析與比較。. ‧ 國. 學. 第三章分析本系統的架構與輸入模型,並對系統各部分詳加介紹。第四章闡述如. ‧. 何建構執行與偵錯環境生成系統。第五章用範例實證本研究的成果。第六章則是結論. n. al. er. io. sit. y. Nat. 與未來展望。. Ch. engchi. 蠳. i Un. v.

(16) 第 二 章 相關研究探討. 立. 政 治 大. 本研究所需的背景知識、相關工具以及相似系統,可分為下列幾個部分詳細探討:正. ‧ 國. 學. 規語意、編譯器與直譯器生成工具、使用者偵錯介面、語言開發框架以及相似系統. ‧. 分析與比較。首先,蠲蠮蠱 節概述作為本系統輸入模型的正規語意。蠲蠮蠲 節會介紹編譯. y. Nat. 器與直譯器的相關生成工具。接著在 蠲蠮蠳 節,針對 衅衣衬衩衰衳补 所提供的偵錯平台 蠨衤补衢衵衧. io. sit. 衰衬衡衴衦衯衲衭蠩 衛蠴衝 作一個簡介。然後在 蠲蠮蠴 節中介紹語言開發框架。最後在 蠲蠮蠵 節中,介紹. n. al. er. 與本研究同樣都架構在 衅衣衬衩衰衳补 上的相似系統,並比較各系統的差異。. Ch. engchi. i Un. v. 2.1 正 規 語 意 在程式語言中,正規語意 蠨衦衯衲衭衡衬 衳补衭衡衮衴衩衣衳蠩 是以嚴謹的數學方法來研究還有並定義 程式的意義 衛蠶衝。使用正規語意不僅利於各種分析與驗證,也能精確地定義程式的 結構。常見的正規語意有操作語意 蠨衯衰补衲衡衴衩衯衮衡衬 衳补衭衡衮衴衩衣衳蠩、指稱語意 蠨衤补衮衯衴衡衴衩衯衮衡衬 衳补衭衡衮衴衩衣衳蠩 以及公理語意 蠨衡衸衩衯衭 衳补衭衡衮衴衩衣衳蠩 三種。其中的操作語意 衛蠵衝 藉由數學的推 論系統來描述程式在機器上執行時的狀態,讓我們不僅獲得執行的結果,還能夠知 道程式在執行的過程中,狀態如何遞變。而操作語意又包含結構操作語意 蠨衳衴衲衵衣衴衵衲衡衬 衯衰补衲衡衴衩衯衮衡衬 衳补衭衡衮衴衩衣衳蠬 術衏術蠩 衛蠷衝 與自然語意 蠨衮衡衴衵衲衡衬 衳补衭衡衮衴衩衣衳蠬 衎術蠩 衛蠸衝 兩種方法。結構 蠴.

(17) 操作語意又稱 衳衭衡衬衬蠭衳衴补衰 衳补衭衡衮衴衩衣衳,因為它關注於每個獨立計算步驟該如何執行;而 自然語意又稱 衢衩衧蠭衳衴补衰 衳补衭衡衮衴衩衣衳,因為它著重在如何獲得整體的計算結果。 因為正規語意使用嚴謹的數學方法來定義程式的意義,所以採用正規語意描述程 式比較能確保程式的正確性。再加上操作語意比較貼近語言的實作,且自然語意也容 易定義程式的意義。所以本系統將採用自然語意來描述 衄術行 的語意並作為輸入模型。. 2.2 編 譯 器 與 直 譯 器 生 成工具. 立. 政 治 大. 編譯器 蠨衃衯衭衰衩衬补衲蠩 是一個可以讀入原始語言 蠨衳衯衵衲衣补 衬衡衮衧衵衡衧补蠩,並將它轉換成另一種. ‧ 國. 學. 標的語言 蠨衴衡衲衧补衴 衬衡衮衧衵衡衧补蠩 的程式 衛蠹衝。然而轉換的過程需要經過許多繁複的階段與轉 換,包括字彙分析、語法分析、語意分析,生成中間碼、程式碼最佳化、產生標的碼. ‧. 等等。直譯器雖不會產生標的碼,而是直接執行原始碼所描述的操作。但大部分的情. Nat. sit. n. al. er. io. 解譯。. y. 況下,還是需要對原始碼進行字彙分析與語法分析,將它轉換成語法樹以方便直譯器. i Un. v. 編譯器與直譯器的實作不但複雜且容易出錯,因此許多的生成工具因應而生。這. Ch. engchi. 些生成工具藉由讀入語言的規格描述,即可生成相對應的分析器。例如 行补衸 衛蠱蠰衝 是以 正規表達式當做輸入的字彙分析生成器,以及用文法描述當做輸入的 衙衡衣衣 衛蠱蠰衝語法分 析生成器等等。而生成語意實作的工具也不少,如 衒补衬衡衴衩衯衮衡衬 衍补衴衡蠭行衡衮衧衵衡衧补 衛蠱蠱衝、衫蠭 衦衲衡衭补衷衯衲衫 衛蠱蠲衝、衁術衆蠫術衄衆 衛蠱蠳衝、術衴衲衡衴补衧衯蠯衘衔 衛蠱蠴衝、衔衘行 衛蠱蠵衝 等等。由於本研究希望 以自然語意為輸入模型,其中 衒衍行 雖然為實作自然語意的語言,但並不包含偵錯器的 生成。所以本研究決定採用 衒衍行 的文法形式並加以擴充、修改來當作輸入語法,最後 再加入偵錯定義,以便能夠生成直譯器以及偵錯器。. 蠵.

(18) 2.2.1 Relational Meta-Language (RML) And Tools 衒衍行 是一套將自然語意編譯成高效率的可執行碼的系統,藉此實作語言的語意。自然 語意是以 衐衬衯衴衫衩衮 的結構操作語意 衛蠷衝 為基礎並由 衉衎衒衉衁 的 衋衡表衮 衛蠸衝 延續發展出來。 它的規格包含了資料型態宣告以及規論規則 蠨衩衮衦补衲补衮衣补 衲衵衬补蠩 的集合。推論規則是以類 似 衇补衮衴衺补衮 的 術补衱衵补衮衴 衃衡衬衣衵衬衵衳 格式描述物件之間的關聯 蠨衲补衬衡衴衩衯衮蠩 來進行自然推論 蠨衮衡衴衵衲衡衬 衤补衤衵衣衴衩衯衮蠩 衛蠱蠶衝。 衒衍行 不但容易使用且提供了高度抽象能力來表達語言轉換與分析工作。雖然已有. 治 政 大 衒衍行 提供了一個表達自然語 衔衙衐衏行 衛蠱蠷衝 可生成自然語意的實作,但卻缺乏效率。而 立. 意的強型超語言生成工具─ 衲衭衬蠲衣 ,足以產生約略手寫般高效率的 衃 語言實作 衛蠱蠸衝。. ‧. ‧ 國. 學. 2.3 使 用 者 偵 錯 介 面. sit. y. Nat. n. al. er. io. 本節將介紹 衅衣衬衩衰衳补 及其底下的偵錯平台。. Ch. engchi. i Un. v. 2.3.1 Eclipse Debug Platform. 衅衣衬衩衰衳补 是一套開放原始碼的程式整合式開發環境 蠨衉衄衅蠩,其可擴充的框架 ,允許 第三方撰寫名為 衰衬衵衧蠭衩衮 的擴充套件,將既有的或是新開發的工具程式整合至此平 台。衅衣衬衩衰衳补 在 衰衬衵衧蠭衩衮 機制中定義了一組稱作延伸元件 ─ 延伸點 蠨补衸衴补衮衳衩衯衮 蠭 补衸衴补衮衳衩衯衮 衰衯衩衮衴蠩 的概念 ,延伸元件代表延伸出來的功能 ,而延伸點則代表允許被延伸的功 能 衛蠱蠹衝。如果將延伸元件比擬成插頭,那麼延伸點就如同插座。圖 蠲蠮蠱 即為延伸元件與 延伸點的運作方式,一個延伸元件對應至一個延伸點,但延伸點可以對應至多個延伸 元件。. 蠶.

(19) 立. 政 治 大 圖 蠲蠮蠱蠺 衅衣衬衩衰衳补 套件架構. ‧ 國. 學. 衅衣衬衩衰衳补 專案除了提供 衊衡衶衡 的開發工具 蠨衊衄衔蠩 衛蠲蠰衝 外,也提供了擴充套件發展環 境 蠨衐衄衅蠩 衛蠲蠱衝,讓開發人員可以藉此開發擴充套件。衅衣衬衩衰衳补 並無任何偵錯實作,但提. ‧. 供了一個用於建構與整合偵錯器的偵錯框架,統稱為偵錯平台 蠨衤补衢衵衧 衰衬衡衴衦衯衲衭蠩 衛蠴衝。偵. Nat. sit. y. 錯平台包含了偵錯模型 蠨衤补衢衵衧 衭衯衤补衬蠩 與偵錯視圖 蠨衤补衢衵衧 衰补衲衳衰补衣衴衩衶补蠩,偵錯模型為一. n. al. er. io. 組供實作的通用偵錯介面,包括偵錯器常見的元件蠨 例如執行緒、變數和中斷點 蠩 與動. i Un. v. 作 蠨 例如追蹤、暫停、回復與中止 蠩。而偵錯視圖可操作偵錯模型,並提供相關元件的. Ch. engchi. 衶衩补衷衳 ,讓使用者能夠透過偵錯視圖逐步追蹤程式的執行流程與目前的狀態。換言之, 開發者只要實作偵錯框架的核心介面而不用撰寫任何使用者介面的程式碼,便可以產 生一個基本的偵錯器。. 2.4 語 言 開 發 框 架 本系統希望建構一個生成器,可以讀入 衄術行 的自然語意並產生實作語意的執行元件。 除此之外也需要建立 衄術行 的編輯環境。所以我們利用語言開發框架─ 衘衴补衸衴 來建構這 些組件。. 蠷.

(20) 2.4.1 Xtext 衘衴补衸衴 衛蠲蠲衝 為 衅衣衬衩衰衳补 下 的 套 件 , 它 是 奠 基 於 衅衣衬衩衰衳补、衅衣衬衩衰衳补 衍衯衤补衬衩衮衧 衆衲衡衭补衷衯衲衫 蠨衅衍衆蠩 衛蠲蠳衝 以及 衁衎衔行衒 解析器生成器 衛蠲蠴衝 的語言開發框架。使用者可以自訂一個 衄術行 並描述它的文法,衘衴补衸衴 即可在 衅衣衬衩衰衳补 下產生 衄術行 的開發環境,包括了編輯器 以及解析器,還有程式碼生成器等組件。 程式碼生成器可以解析 衄術行 模型,並依照以 衘衴补衮衤 衛蠲蠵衝 語言描述的樣板 蠨衴补衭衰衬衡衴补蠩 來生成實作的程式碼。衘衴补衮衤 為一個靜態型別 蠨衳衴衡衴衩衣衡衬衬衹蠭衴衹衰补衤蠩 樣板語言,它可以幫助. 治 政 大 蠨衳衴衲衩衮衧 衣衯衮衣衡衴补衮衡衴衩衯衮蠩 的程式, 開發與維護程式碼生成器以及其他極度依賴字串連接 立. 也可直接被編譯成可閱讀的 衊衡衶衡 程式碼,文法也與 衊衡衶衡 相似但較為精簡。. ‧. ‧ 國. 學. 2.5 相 似 系 統. sit. y. Nat. n. al. er. io. 本研究與 街衵 等人的 衄術行 衄补衢衵衧衧衩衮衧 衆衲衡衭补衷衯衲衫 衛蠲蠶衝、衅衐衲衯衶衩衤补 衛蠲蠷衝 以及 術衰衯衯衦衡衸 衛蠲蠸衝. i Un. v. 的偵錯器生成框架 衛蠲蠹衝 均利用 衅衣衬衩衰衳补 平台建構偵錯器,故特此提出介紹並比較。. Ch. engchi. 2.5.1 DSL Debugging Framework 衄術行 衄补衢衵衧衧衩衮衧 衆衲衡衭补衷衯衲衫 蠨衄衄衆蠩 的目標在於提供一個偵錯器的生成框架,協助領 域專家與使用者在他們熟悉的抽象層級上偵錯 衄術行 衛蠳蠰衝 程式,而不用仰賴通用語 言 蠨衇衐行蠩 的知識。衄衄衆 利用文法驅動 蠨衇衲衡衭衭衡衲蠭衄衲衩衶补衮蠩 技術,藉由 衄術行 文法生成 衄衄衆 所需要的連結資訊,讓它能與整合式開發環境交流、互動,協助使用者偵錯 衄術行 程式。 衄衄衆 的做法是由 衄術行 的文法生成映對資訊,將 衄術行 原始碼轉換成實作的 衇衐行. 蠸.

(21) 程式碼,然後利用已存在的 衇衐行 偵錯器來偵錯 衇衐行 程式碼,最後再將偵錯結果對映 回 衄術行 層級。首先,衄術行 原始碼會經由轉換器產生 衇衐行 程式碼以及與 衄術行 原始碼映 對的資訊,包含以下三種蠺. • 原始碼映對 蠨衳衯衵衲衣补 衣衯衤补 衭衡衰衰衩衮衧蠩:描述 衄術行 原始碼中哪一行會對映至相關聯 衇衐行 程式碼的哪個區段。 • 偵錯方法映對 蠨衤补衢衵衧衧衩衮衧 衭补衴表衯衤衳 衭衡衰衰衩衮衧蠩:對映 衄術行 層級的偵錯命令至 衇衐行 層級。. 治 政 大 衇衐行 程式碼得到的結果對映 • 偵錯結果映對 蠨衤补衢衵衧衧衩衮衧 衲补衳衵衬衴衳 衭衡衰衰衩衮衧蠩:將偵錯 立 回 衄術行 層級。. ‧ 國. 學 ‧. 接著 衇衐行 程式碼與前兩種映對資訊將會被重新解譯成偵錯命令並送至 衇衐行 偵錯 伺服器。衇衐行 偵錯伺服器負責處理從重新解譯器送來的偵錯命令,並將產生的結果藉. y. Nat. er. io. 前的執行狀態。. sit. 由偵錯結果映對轉換至 衄術行 層級並回傳,讓使用者透過偵錯視圖來觀測 衄術行 程式目. al. n. iv n C 街衵 等人 衛蠳蠱衝 也利用此框架生成命令式 蠨衤补衣衬衡衲衡衴衩衶补蠩 以及混 h e n g c蠨衩衭衰补衲衡衴衩衶补蠩、宣告式 hi U. 合式 蠨表衹衢衲衩衤蠩 的 衄術行 偵錯器。證明只要利用 衄衆衆 以及少量的額外實作,即可將現有 的偵錯工具重複應用至不同種類的 衄術行衳 上。. 2.5.2 EProvide 衅衐衲衯衶衩衤补 為一個 衅衣衬衩衰衳补 上的專案,它允許使用者定義 衄術行 的操作語意以及視覺化的 直譯器與偵錯器 衛蠲蠷衝。 要利用 衅衐衲衯衶衩衤补 開發 衄術行 的執行與偵錯環境,首先需要定義 衄術行 的超模型。除 此之外,還需要在超模型內描述 衄術行 可能存在的狀態 衛蠳蠲衝。定義 衄術行 操作語意的方式 蠹.

(22) 即為實作模型的初始化狀態以及狀態遞變的步驟。當 衅衐衲衯衶衩衤补 執行 衄術行 模型時,衄術行 的執行狀態會被初始化,接著再逐步遞變,並將狀態保存在模型之內。 接著還需加入 衄術行 的偵錯描述,衅衐衲衯衶衩衤补 內的通用偵錯器才能在 衅衣衬衩衰衳补 上偵錯 衄術行 程式 衛蠳蠳衝。偵錯描述包含以下項目:. • 偵錯狀態:由於 衄術行 模型內的執行狀態為目前處於哪個節點,以及各自定義的 變數等等。所以需要進行模型轉換,將 衄術行 模型轉換成符合 衅衣衬衩衰衳补 偵錯模型的 偵錯狀態,以便透過偵錯視圖呈現給使用者觀看。. 政 治 大 • 程式位址:描述 衄術行 的程式位址,以便高亮程式內的元素,顯示目前執行至何 立. ‧ 國. 學. 處。每個執行緒需要記錄目前執行緒執行至何處,而每個 衳衴衡衣衫 衦衲衡衭补 也需記錄 在此 衳衴衡衣衫 衦衲衡衭补 下,程式執行至何處。. ‧. • 中斷點:允許特定的模型物件能夠新增或移除中斷點。. y. Nat. io. sit. • 術衴补衰 操作:描述各種 衳衴补衰 的操作,讓偵錯器得知程式進行各種 衳衴补衰 的操作時,. n. al. er. 需要執行至何處才完成。. Ch. engchi. i Un. v. 2.5.3 Spoofax 偵 錯 器 生 成 框 架. 術衰衯衯衦衡衸 是一個開發文字式 蠨衴补衸衴衵衡衬蠩 衄術行 的工作平台,且擁有 衅衣衬衩衰衳补 編輯器功能。使 用者可以使用 術衄衆 衛蠳蠴衝 來描述 衄術行 的文法,術衰衯衯衦衡衸 則會自動生成編輯器並提供簡單 的編輯輔助。除此之外,術衰衯衯衦衡衸 平台下也有一套偵錯器生成框架,讓使用者能以抽象 化的方式定義 衄術行 偵錯器。 偵錯器生成框架使用宣告式的 術衅行 語言來定義 衄術行 的通用偵錯模型,偵錯模型 以偵錯事件為基礎來擷取程式的執行狀態。step 事件表示 衄術行 陳述式 蠨衳衴衡衴补衭补衮衴蠩 的 順序;enter 與 exit 事件表示 step 之間的階層關系;var 事件則指定目前階層上, 蠱蠰.

(23) 需要宣告的變數。術衅行 描述如何在 衄術行 語法內產生偵錯事件,以及如何提取相關的 偵錯資訊。當 衄術行 程式碼被解析成抽象語法樹後,系統會依據 術衅行 的描述,將偵錯 事件加入至語法樹內。除此之外,系統還需要實作原生偵錯函式庫,以便將偵錯事件 傳遞給偵錯器。偵錯器的執行時期的架構分為四層,其中包含一層通用的基礎建設 蠨衩衮衦衲衡衳衴衲衵衣衴衵衲补蠩。藉由分層的架構,可以重複使用通用的組件,以便在新增 衄術行 偵錯 器時,減少需要實作的組件。. 2.5.4 相 似 系 統 比 較. 立. 政 治 大. 街衵 等人 衛蠲蠶衝 的 衄衄衆 僅提供了一個基本的生成框架,語言的實作與偵錯器的生成仍需. ‧ 國. 學. 在通用語言的層級下描述。至於 衅衐衲衯衶衩衤补 則將程式的執行抽象化為 reset 與 step 兩 個操作,實作此兩個操作可以讓 衄術行 程式逐步執行。但若要生成 衄術行 的偵錯器,則. ‧. 還得進行模型轉換並一一實作所需的偵錯介面。相較於上述兩者,本系統以自然語意. n. al. er. io. 言,不用涉及程式碼的實作以及額外的偵錯介面實作。. sit. y. Nat. 以及偵錯定義來生成語言的實作及偵錯器,讓使用者能夠於更抽象化的層級上描述語. Ch. i Un. v. 而 術衰衯衯衦衡衸 的偵錯器生成框架也提供了名為 術衅行 的語言來描述 衄術行 的偵錯定義,. engchi. 與本系統描述偵錯機制的做法頗為相似。然而它是以偵錯事件為基礎並與 街衵 等人 衛蠳蠵衝 同樣以 衁衏衐 蠨衁衳衰补衣衴蠭衯衲衩补衮衴补衤 衰衲衯衧衲衡衭衭衩衮衧蠩 衛蠳蠶衝 的做法,將偵錯資訊 衷补衡衶补 至 衄術行 的 抽象語法樹。最後還需實作 衄術行 的偵錯函式庫來傳遞偵錯事件。本系統則於描述程式 語意的自然語意內加入偵錯定義,相較於從語法樹分析再加入的做法,在語意內描述 偵錯定義會有比較大的彈性。除此之外,本系統也不需額外的實作來處理偵錯定義。. 蠱蠱.

(24) 第 三 章 系統架構分析. 立. 政 治 大. 本章先於 蠳蠮蠱 小節簡單介紹本系統的架構概要,再於 蠳蠮蠲 小節介紹系統輸入模型, 蠳蠮蠳. ‧ 國. 學. 至 蠳蠮蠵 小節則分析系統各部架構。. ‧. n. al. er. io. sit. y. Nat. 3.1 架 構 概 要. i Un. v. 本論文主要任務是實作一套可用以快速產生 衄術行 執行與偵錯環境的系統,我們將之命. Ch. engchi. 名為 衒衡衧补衄补衮,它主要可分成三個部分:. • 衒衇衄蠲衃衯衤补 • 衒衡衧补衄补衮 執行平台 • 衒衡衧补衄补衮 偵錯套件. 除了產生執行與偵錯環境之外,仍需要 衄術行 編輯環境和偵錯視圖以便與執行與偵 錯環境互動。以下將分別敘述系統生成時期與執行時期的架構以及各部元件。. 蠱蠲.

(25) 3.1.1 系 統 生 成 時 期 架 構 要生成特定 衄術行 的執行與偵錯環境,使用者需要定義 衄術行 的輸入模型,包括文法規 則、自然語意還有偵錯定義。圖 蠳蠮蠱 顯示 衒衡衧补衄补衮 的生成時期架構,其主要元件如 下:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. i Un. v. 圖 蠳蠮蠱蠺 系統生成時期架構. Ch. engchi. • 衘衴补衸衴 生成器 :衘衴补衸衴 為 衅衣衬衩衰衳补 上既有的工具 ,是一個語言開發框架 。其中 衘衴补衸衴 生成器可讀入 衄術行 的文法規則,並生成編輯器、解析器與超模型等等組 件,構成 衄術行 的編輯環境。編輯器輔助使用者編輯程式碼,解析器則會將 衄術行 程式碼轉換成以 衅衍衆 實作的抽象語法樹,而超模型可以描述語法樹的結構。 • 衒衇衄蠲衃衯衤补:語意定義描述 衄術行 程式該如何執行,衒衇衄蠲衃衯衤补 能經由語意定義 分析產生實作語意的執行元件。執行元件可以讀入 衄術行 的抽象語法樹並解譯程 式。若加入偵錯定義,則產生的執行元件會具備偵錯機制,能夠與偵錯器互動並 偵錯程式。. 蠱蠳.

(26) • 衒衡衧补衄补衮 執行平台:每個 衄術行 均需直譯器與偵錯器來接收命令,控制程式流程 並取得結果。而我們建構的執行平台內,包含了執行元件所需的函式庫以及直譯 器與偵錯器通用框架。當使用者執行或偵錯一個特定 衄術行 的程式時,會啟動執 行平台下的直譯器或偵錯器通用框架,此框架會載入對應此 衄術行 的執行元件來 執行與偵錯程式。 • 偵錯模型:衅衣衬衩衰衳补 平台下的偵錯模型為一組大部分偵錯器通用的元件與動作的抽 象化介面,常見的元件例如 衴表衲补衡衤、衳衴衡衣衫 衦衲衡衭补、衶衡衲衩衡衢衬补 等,常見的功能則有 暫停、回復、中止等等。. 政 治 大 • 偵錯視圖:衅衣衬衩衰衳补 平台提供了偵錯視圖,讓使用者能夠利用人性化的使用者介面 立. ‧ 國. 學. 來偵錯程式。偵錯視圖包含許多種類的 衶衩补衷,呈現代表被偵錯程式的偵錯模型資 訊。每個 衶衩补衷 也提供許多偵錯命令供使用者下達,並經由偵錯視圖操作與觀測. ‧. 偵錯模型。. Nat. sit. y. • 衒衡衧补衄补衮 偵錯套件:偵錯套件可視為偵錯視圖與偵錯器之間溝通的橋樑,它實作. n. al. er. io. 了偵錯模型介面以便與偵錯視圖互動。使用者經由偵錯視圖透過偵錯套件發送偵. i Un. v. 錯命令給執行平台,程式執行的狀態則由執行平台透過偵錯套件呈現在偵錯視圖 上。. Ch. engchi. 3.1.2 系 統 執 行 時 期 架 構 圖 蠳蠮蠲 為 衒衡衧补衄补衮 執行時期的架構。使用者可在編輯環境內編輯 衄術行,偵錯或執行 衄術行 程式時,衒衡衧补衄补衮 偵錯套件會從編輯器取得 衄術行 的抽象語法樹,並啟動 衒衡衧补衄补衮 執行平台下直譯器或偵錯器的通用框架。直譯器或偵錯器的通用框架會載入相對應的 衄術行 執行元件,再直接由執行元件解譯或偵錯抽象語法樹。偵錯模式下,使用者可以 利用偵錯視圖操作偵錯模型並下達命令,實作偵錯模型的偵錯套件會將命令發送至偵 錯器,偵錯器則依此命令控制執行元件的執行流程。當執行暫停時,使用者可經由偵 蠱蠴.

(27) 圖 蠳蠮蠲蠺 系統執行時期架構. 政 治 大. 錯視圖透過偵錯套件控制程式的執行流程以及觀測程式目前的執行狀態。. 立. ‧ 國. 學. 3.2 系 統 輸 入 模 型. ‧. sit. y. Nat. 系統的輸入模型可分為文法、自然語意與偵錯指令三種。文法描述語言的具體語法與. io. n. al. er. 抽象語法,自然語意描述語言的執行語意,偵錯指令則描述語言的偵錯定義。. 3.2.1 文 法. Ch. engchi. i Un. v. 文法的目的在於描述 衄術行 語言的語法結構,以及如何將程式碼對應成結構的規則。本 系統使用 衘衴补衸衴 定義的文法規則當作輸入模型,當給定一個名稱為 行 的語言之後,即 可利用 衘衴补衸衴 在 行蠮衸衴补衸衴 檔案內編輯 行 的文法規則。衘衴补衸衴 生成器會依照文法規則生成 編輯器、解析器以及超模型等元件,將 行 程式碼轉換成抽象語法樹。 舉例來說,表 蠳蠮蠱 為一個 衒衯衢衯衴 衄術行 文法範例,它是一個 街衵 等人 衛蠳蠱衝 定義的機 器人語言,可藉由上下左右的命令來移動機器人的位置,也可執行函式呼叫,讓機器 人依照函式內的命令移動,除此之外還可印出機器人所處的位置。要描述 衒衯衢衯衴 衄術行 的文法規則,首先得於開頭處宣告文法的名稱─ Robot,接著匯入 org.eclipse.xtext. 蠱蠵.

(28) common.Terminals,以便使用 Terminals 預設的文法規則。由於 衘衴补衸衴 依照文法推論並. 自動產生 衅衣衯衲补 模型,所以在第四行得宣告此模型的 EPackage 名稱為 robot,nsURI 則 為 "http://www.rageden.org/examples/robot/Robot",衘衴补衸衴 接著會根據不同的解析規 則 蠨衰衡衲衳补衲 衲衵衬补蠩 產生各種模型類別。 生成 Ecore 模型後,衘衴补衸衴 會依照解析規則將 衒衯衢衯衴 程式碼轉換成符合 衅衣衯衲补 模 型的抽象語法樹。首先 Robot 解析規則會讀入整個程式碼,此規則包含了一組函式宣 告與主函式,CallFunc 解析規則會解析函式宣告並產生 IFunc 的物件回傳給 arg2,其. 政 治 大 串接起來。MainFunc 則會解析主函式宣告並將回傳的物件指定給 arg1,最後構成一個 立. 中 arg2+=CallFunc* 表示 arg2 為一個串列 蠨衬衩衳衴蠩,會將任意個 CallFunc 回傳的物件均. er. io. sit. y. Nat. 3.2.2 自 然 語 意. ‧. ‧ 國. 類別回傳。. 學. 名為 IBOT 且包含 arg1、arg2 兩個特徵項目 蠨衦补衡衴衵衲补蠩 的模型類別,並視為 IRobot 的子. 本研究採用 衒衇衄 的語法規格來作為 衄術行 自然語意的輸入,它是以 衘衴补衸衴 實作的一個. al. n. iv n C 衄術行,其格式則參考 衒衍行 並加以修改而形成的。衒衇衄 h e n g c h i U 的架構主要是由模組 蠨衭衯衤衵衬补蠩. 組成,每個模組定義了各自的結構,這些結構包含以下六種宣告:. • 匯入宣告 蠨衉衭衰衯衲衴 衤补衣衬衡衲衡衴衩衯衮蠩:以 import <PackageName> 表示。匯入其他套件的 模組或 衄術行 抽象語法樹的模型類別。 • 型態宣告 蠨衔衹衰补 衤补衣衬衡衲衡衴衩衯衮蠩:以 type = <ID> 表示。給予型態另外一個別名。 • 變數宣告 蠨衖衡衲衩衡衢衬补 衤补衣衬衡衲衡衴衩衯衮蠩:以 val = <Expr> 表式。宣告變數並指定初始 值。 • 資料型態宣告 蠨衄衡衴衡衴衹衰补 衤补衣衬衡衲衡衴衩衯衮蠩:宣告結構化的資料型態以及它的數值,以 便進行模式比對 蠨衰衡衴衴补衲衮 衭衡衴衣表蠩。 蠱蠶.

(29) 表 蠳蠮蠱蠺 衒衯衢衯衴蠮衸衴补衸衴 1. 2. grammar org . rageden . examples . robot . Robot with org . eclipse . xtext . common . Terminals. 3. 4. generate robot " http :// www . rageden . org / examples / robot / Robot ". 5. 6. 7. Robot returns IRobot : { IBOT } arg2 += CallFunc *. 立. 治 政 arg1 = MainFunc ;大. 8. ‧ 國. MainFunc returns IFunction : { IMAIN } ’ robot ’ arg1 += Command + ’end ’;. io. y. al. { IFUNC } ’ function ’ arg1 = ID ’: ’ arg2 += Command * ’end ’;. n. 13. 14. 15. sit. CallFunc returns IFunction :. er. 12. Nat. 11. ‧. 10. 學. 9. Ch. engchi. i Un. v. Command returns ICommand :. 16. { IUP }. ’up ’. 17. | { IDOWN }. ’ down ’. 18. | { ILEFT }. ’ left ’. 19. | { IRIGHT } ’ right ’. 20. | { IWHERE } ’ where ’. 21. | { ICALL }. ’>’ arg1 = ID. 22. | { ISET }. ’set ’ ’( ’ arg1 = INT ’,’ arg2 = INT ’) ’;. 蠱蠷.

(30) • 提取器宣告 蠨衅衸衴衲衡衣衴衯衲 衤补衣衬衡衲衡衴衩衯衮蠩:類似資料型態,宣告抽象語法樹的結構與型 態,並利用模式比對來匹配語法樹。 • 規則集合宣告 蠨衒衵衬补術补衴 衤补衣衬衡衲衡衴衩衯衮蠩:宣告一組規格集合,利用數學推論的方式來 描述語意。 其中引入宣告、型態宣告、變數宣告均為大部分程式語言常用的宣告,正式定義 請參見附錄 衁,於此不多介紹。我們在此僅詳加說明另外三個宣告:. 資料型態宣告. 立. 政 治 大. ‧ 國. 學. 在 衒衇衄 內,資料型態就像 術衍行 衛蠳蠷衝 的 datatype,例如表 蠳蠮蠲 宣告一個名為 Value 的 資料型態,並宣告 eval 規則集合來解譯 Value。Value 的數值不是 Empty、Real,就是. ‧. Max 建構式。其中 Empty 建構式 蠨衣衯衮衳衴衲衵衣衴衯衲蠩 沒有任何參數,而 Real 建構式包含了一. sit. y. Nat. 個型態為 Float 的參數,Max 建構式則包含了兩個 Int 型態的參數。. n. al. er. io. 資料型態可當作規則集合的輸入參數並進行模式比對,以便判斷該用哪條規則來. i Un. v. 推論參數。表 蠳蠮蠲 的 eval 規則集合會讀入 Value 資料型態的數值當作參數,並進行. Ch. engchi. 模式比對。在相對應的規則內描述該如何計算數值,最後回傳 Int 型態的數值當作結 果。例如 eval(Empty()) 的輸入參數會符合 Empty() 結構式模式,則推論結果為 0 並 回傳。如果計算 eval(Real(3.2)),則輸入的參數會符合 Real(fVal),Real 建構式內的 3.2 會指定給 fVal 變數,此規則會呼叫 FloatToInt 將 fVal 轉換成整數 3,並將結果. 指定給 iVal,最後將 3 作為計算的結果回傳。若要計算 eval(Max(5, 2)),此參數會 符合 Max(x, y),則 Max 建構式內的參數 5、2 會分別指定給 x 與 y,在推論過程中, 若 x 比 y 的數值大,則 x > y => true 成立,並推導出 5 做為結果。然而,若 x 比 y 小,則 x > y => true 不成立,接著繼續比對下一條規則的模式。此輸入參數仍會符合 Max(x, y),並同樣將 Max 內的參數分別指定給 x 與 y,推導出 x > y => false 成立,. 回傳 y 做為計算的結果。 蠱蠸.

(31) 表 蠳蠮蠲蠺 資料型態宣告 1. datatype Value = Empty. 2. 3. | Real of Float. 4. | Max of Int * Int. 5. set eval ( Value ) : Int = {. 立. 學. ‧ 國. 7. 政 治 大. axiom Empty () = > 0. 8. 9. 11. ------------------------. 12. Real ( fVal ) = > iVal. ‧. rule FloatToInt ( fVal ) = > iVal. n. er. io. al. y. Nat. 10. sit. 6. 13. rule x > y = true. 14. 15. ----------------. 16. Max (x , y ) = > x. Ch. engchi. 17. rule x > y = true. 18. 19. ----------------. 20. Max (x , y ) = > y. 21. }. 蠱蠹. i Un. v.

(32) 提取器宣告 由 衘衴补衸衴 生成的 衄術行 編輯器、解析器與超模型,會將程式碼轉換成以 衅衍衆 為基礎的 抽象語法樹。由於抽象語法樹為模型物件,所以需要宣告提取器來分析與分解抽象語 法樹,並以代數的方式來表示這些模型物件,以便進行模式比對。 假設要生成一個 衆衲衵衩衴 衄術行 的執行與偵錯環境,首先需要新增表 蠳蠮蠳 的文法規則至 衆衲衵衩衴蠮衸衴补衸衴 檔案並生成編輯環境。表 蠳蠮蠴 則宣告了相對應的提取器,這樣才能在 衒衇衄 內使用代數建構式 Apple、Orange 來分析與分解抽象語法樹,並提取語法樹內的節點進 行模式比對。. 立. 政 治 大. ‧. ‧ 國. 學. 宣告提取器提取抽象語法樹的節點有以下兩個限制:. • 文法內所描述的模型類別名稱需與提取器的類別名稱相同,但多個前贅字 蠧I蠧。. Nat. sit. y. • 文法的解析規則裡,模組類別的特徵名稱需以 arg1、arg2、arg3 等依序命名,而. n. al. er. io. 提取器內的參數型態則需符合類別內屬性的型態。例如 Int 對應至 衅衍衆 的 EInt. i Un. ,String 對應至 EString,List 對應至 EList。. Ch. engchi. v. 除此之外,提取器的功用在於提取抽象語法樹進行模式比對,它只能讀取語法樹 但不能進行任何修改,不像資料型態一樣能夠任意新增或修改。. 規則集合宣告 自然語意使用邏輯上的推論規則 蠨衲衵衬补蠩 及公理 蠨衡衸衩衯衭蠩,藉此描述程式的語意。規則通 常表示成: premises conclusion. 蠲蠰.

(33) 表 蠳蠮蠳蠺 衆衲衵衩衴蠮衸衴补衸衴 1. 2. Fruit returns IFruit : Apple | Orange ;. 3. 4. Apple returns IApple :. 5. ’ apple ’ arg1 = INT ;. 政 治 大. 立. 6. ‧ 國. Orange returns IOrange : ’ orange ’ arg1 = STRING ’@ ’ arg2 = INT ;. ‧. 8. 學. 7. n. er. io. sit. y. Nat. al. Ch. engchi. i Un. 表 蠳蠮蠴蠺 衆衲衵衩衴蠮衲衧衤 1. 2. 3. extractor Fruit = Apple of List [ Int ] | Orange of String * Int. 蠲蠱. v.

(34) 表 蠳蠮蠵蠺 規則的形式 1. rule premise1. &. 2. premise2. &. 3. premise3. &. .... 4. 5. premiseN. 6. -----------. 7. conclusion. 立. }. 學. ‧ 國. 一條規則會有數個前提 蠨衰衲补衭衩衳补衳蠩 與一個結論 蠨衣衯衮衣衬衵衳衩衯衮蠩,當全部的前提均成立. ‧. 的情況下,結論才會成立。公理則可視為沒有前提的規則。. sit. y. Nat. 表 蠳蠮蠵 為規則在 衒衇衄 呈現的形式,一條規格以關鍵字 rule 開頭,後面接著數個. io. 由 & 區隔的前提,中間隔著一組破折號 - 構成的虛線,最底下則為結論 衛蠱蠸衝。結論. al. er. 8. 政 治 大. v. n. 在 衒衇衄 下的形式為 <Pattern> => <Expression>,左端的 <Pattern> 為模式,右端的. Ch. engchi. i Un. <Expression> 為表達式。當規則集合在進行推導時,首先會把輸入的參數與結論左端. 的模式進行比對,判斷此表達式是否符合。模式比對的結果若成功,則會利用匹配的 變數依序推論前提,直到全部的前提均滿足時,代表結論成立,並以右端的表達式計 算的結果做為回傳。 規 則 蠨衲衵衬补蠩 描 述 一 次 執 行 中 , 其 初 始 蠨衩衮衩衴衩衡衬蠩 與 最 終 蠨蠌衮衡衬蠩 狀 態 之 間 的 關 聯 蠨衲补衬衡衴衩衯衮蠩 衛蠵衝。擁有相同輸入與輸出型態的規則可被組織成表 蠳蠮蠶 的規則集合,名稱為 name,輸入的參數型態為零或數個 inputType1, ...,回傳結果的型態為 resultType。. 模式的種類有以下幾種:. 蠲蠲.

(35) 表 蠳蠮蠶蠺 規則集合的形式 set name ( inputType1 , ...) : resultType = {. 2. axiom pattern1 = > result1. 3. rule premise1. &. 4. premise2. &. 5. premise3. &. 6. .... 7. premiseN. 8. -----------------. 9. pattern2 = > result2. ‧. ‧ 國. y. Nat. • 萬用字元模式 蠨街衩衬衤衣衡衲衤 衰衡衴衴补衲衮蠩:萬用字元模式 蠨_蠩 會符合任何輸入,亦即任何 輸入與 _ 進行模式比對均會符合。. io. n. al. er. }. 學. 10. 立. 政 治 大. sit. 1. i Un. v. • 常數模式 蠨衃衯衮衳衴衡衮衴 衰衡衴衴补衲衮蠩:常數模式包括了整數、浮點數、字串與布林值等. Ch. engchi. 等,其中空串列可用 Nil 表示。. • 變數模式 蠨衖衡衲衩衡衢衬补 衰衡衴衴补衲衮蠩:變數模式就像萬用字元一樣,可以符合任何輸入, 但它會綁定 蠨衢衩衮衤蠩 一個變數名稱給此輸入。另外,head :: rest 的形式會比對輸 入的參數是否為串列,若是的話,則取出串列內第一個元素,並綁定給 head,而 剩下的串列則綁定給 rest。 • 建構式模式 蠨衃衯衮衳衴衲衵衣衴衯衲 衰衡衴衴补衲衮蠩:建構式模式會比對資料型態或是提取器宣告 的建構式是否與之符合。 • 衔衵衰衬补 模式 蠨衔衵衰衬补 衰衡衴衴补衲衮蠩:衔衵衰衬补 的形式就像 (a, b, c),它會對每個 衴衵衰衬补 內 的元素也進行比對。 蠲蠳.

(36) • 變數綁定 蠨衖衡衲衩衡衢衬补 衢衩衮衤衩衮衧蠩:除了模式比對外,我們可以將任何一個符合模式比 對的參數綁定至一個變數,在後續的推論中即可以使用此變數來代表此參數。它 的格式為 variable as pattern,亦即如果比對的參數符合 pattern 時,參數的數 值會被指定給 variable。. 當我們藉由模式比對,找出符合的規則並進行匹配之後,還要依序推導其前提是 否全部成立,前提的種類有以下幾種:. 政 治 大 數與 Expr 表達式的運算結果符合的話,則前提才會成立。 立. • 相等前提 蠨衅衱衵衡衬 衰衲补衭衩衳补蠩:以 <ID> = <Expr> 的形式表達。如果名稱為 ID 的變. ‧ 國. 學. • 否定前提 蠨衎衯衴 衰衲补衭衩衳补蠩:以 not <Premise> 的形式表達。如果 Premise 成立的 話,則此否定前提不成立,反之亦然。. ‧. y. Nat. • 假設前提 蠨衬补衴 衰衲补衭衩衳补蠩:以 let <Pat> = <Expr> 的形式表達。此前提會假設 Expr. er. io. sit. 表達式會符合 Pat 模式。. al. • 呼叫前提 蠨衃衡衬衬 衰衲补衭衩衳补蠩:以 <ID>(<Expr>, <Expr>, ...)=> <Pat> 的形式表達。. n. iv n C h e nExpr 呼叫名為 ID 的規則集合,並以 Pat 模式比 hi U g c當作參數,最後將回傳結果與 對。. • 運算前提 蠨衏衰补衲衡衴衩衯衮 衰衲补衭衩衳补蠩:以 <Operation> => <Pat> 的形式表達,Operation 定義了基本的二元運算與關聯運算,運算結果會與 Pat 模式比對。. 當一條規則的前提均成立之後 ,我們需要回傳推論的結果 。結果會以表達式 蠨补衸衰衲补衳衳衩衯衮蠩 的形式呈現,可分為以下幾種:. • 常數表達式 蠨衃衯衮衳衴 衅衸衰衲补衳衳衩衯衮蠩:常數表達式包括了整數、浮點數、字串與布林值 等等。 蠲蠴.

(37) 表 蠳蠮蠷蠺 衭衡衩衮蠮衲衧衤 1. module Main. 2. set main () { rule parseSource () = > model &. 3. 4. Robot . evalRobot ( model ). 5. ---------------------------. 6. _ = > (). 政 治 大. }. 立. • 變數表達式 蠨衖衡衲衩衡衢衬补 衅衸衰衲补衳衳衩衯衮蠩:變數表達式以英文字母或是 _ 為起頭,之後. 學. ‧ 國. 可以參雜數字來命名。. ‧. • 結構式表達式 蠨衃衯衮衳衴衲衵衣衴衯衲 衅衸衰衲补衳衳衩衯衮蠩:建構式表達式為資料型態或是提取器宣. sit. y. Nat. 告的建構式。. io. • 串 列 表 達 式 蠨行衩衳衴 衅衸衰衲补衳衳衩衯衮蠩: 串 列 的 表 達 方 式 為 [a, b, c], 代 表 此 為 包 含. n. al. er. 7. a, b, c 三個元素的串列。. Ch. engchi. i Un. v. • 衔衵衰衬补 表達式 蠨衔衵衰衬补 衅衸衰衲补衳衳衩衯衮蠩:衔衵衰衬补 的表達方式為 (a, b, c),代表此為包含 a, b, c 三個元素的 衴衵衰衬补。. 最後我們需要定義一個名為 Main 的模組,並宣告一個 main 的規則集合當作 衒衇衄 程式的進入點(补衮衴衲衹 衰衯衩衮衴蠩。例如表 蠳蠮蠷 為 衒衯衢衯衴 的程式進入點,main 沒有輸入參數 以及回傳結果,所以我們以萬用字元模式與參數進行比對,而回傳值則以空括號 () 表 示並無回傳值。模式比對符合之後,會呼叫 parseSource 來讀取抽象語法樹,並將取得 的抽象語法樹綁定給 model。接著再呼叫 Robot.evalRobot,將 model 傳遞給 Robot 模 組內的 evalRobot 規則集合進行解譯。. 蠲蠵.

(38) 3.2.3 偵 錯 指 令 實作語意的執行元件雖然能夠解譯 衄術行 抽象語法樹,計算程式執行的結果,但無法進 行偵錯。所以我們需在 衒衇衄 內加入偵錯指令,讓產生的執行元件能夠具備偵錯機制, 與偵錯器互動。我們實現以下兩種偵錯機制: • 偵錯模式下,執行元件能夠在特定的位置暫停,並等待偵錯器的回應。 • 暫停時,能控制程式的執行流程並觀測程式目前的狀態。控制執行流程的命令包. 政 治 大. 括了新增、移除中斷點與恢復執行的偵錯命令,以及各種 術衴补衰 的操作。程式的. 立. 狀態則包括了函式 蠨也可能是子程序或副程式等等蠩 呼叫順序以及函式內的區域變. ‧ 國. 學. 數及其數值。. sit. y. Nat. 意義:. ‧. 所以我們定義四種偵錯指令來描述這些機制,以下將一一解釋這些指令的用法與. n. al. er. io. • 中斷檢查點:檢查執行元件執行至此處時是否需要暫停。. Ch. i Un. v. • 新增 衳衴衡衣衫 衦衲衡衭补:表示執行元件開始執行函式呼叫,並新增一個 衳衴衡衣衫 衦衲衡衭补 記 錄函式的資訊。. engchi. • 移除 衳衴衡衣衫 衦衲衡衭补:表示執行元件已離開目前所在的函式,並移除記錄函式資訊的 衳衴衡衣衫 衦衲衡衭补。 • 更新變數:更新目前所在函式內的區域變數及其數值。. 中斷檢查點 中斷檢查點的語法規則為 SuspendCheck <ID>,其中 ID 為綁定抽象語法樹節點的變 數 名 稱 。 例 如 表 蠳蠮蠸 中 的 evalCommand 會 解 譯 表 蠳蠮蠱 中 衒衯衢衯衴 衄術行 的 ICommand 類 蠲蠶.

(39) 表 蠳蠮蠸蠺 中斷檢查點設置 1. set a dd D e bu g I ns t r uc t i on ( Command , Location ) : Location = { rule SuspendCheck cmd &. 2. 3. evalCommand ( cmd , c ) = > c2. 4. --------------------------. 5. ( cmd , c ) = > c2 }. 7. 立. set evalCommand ( Command ,. 9. {. }. ‧ y. Nat. sit. 11. ‧ 國. .... 10. =. 學. 8. 政 治 大 Location ) : Location. 別,其中 Command 為 ICommand 的提取器,Location 為記錄機器人座標的資料型態。. io. er. 6. 若要以 ICommand 作為執行一次步驟 蠨衳衩衮衧衬补蠭衳衴补衰蠩 的最小單位 ,則可額外宣告一個. al. n. iv n C addDebugInstruction 規 則 集 合 , 解 譯 ICommand 命 令 前 , 加 入 h在e執n行g cevalCommand hi U SuspendCheck cmd。表示在偵錯模式下,若執行元件解譯至此指令時,會檢查目前是否. 需要暫停,若為是則暫停並等待偵錯器的回應。cmd 則是 ICommand 在模式比對時綁定 的變數,它代表著 ICommand 的模型物件。我們可利用此物件取得目前 ICommand 所在的 程式碼行號,以便判斷目前執行元件執行至 衄術行 程式碼的哪一行。. 新 增 stack frame 新增 衳衴衡衣衫 衦衲衡衭补 的語法規則為 StackFrame <Expr> @ <Expr>。前者的 Expr 代表此函式 的名稱,它必須為字串,或是數值為字串的變數。後者的 Expr 則代表此函式的抽象語. 蠲蠷.

(40) 表 蠳蠮蠹蠺 新增與移除 衳衴衡衣衫 衦衲衡衭补 設置 1. set evalCall ( Location , Function ) : Location = { rule StackFrame fid @ node &. 2. 3. evalCommands ( cmds , c ) = > c2 &. 4. endStackFrame. 5. ----------------------------------. 6. (c , node as FUNC ( fid , cmds ) ) = > c2 }. 立. 政 治 大. 法樹節點。例如表 蠳蠮蠹 中的 evalCall 為 衒衯衢衯衴 解譯函式呼叫的規則集合,而其中的. 學. ‧ 國. evalCommands 會解譯函式內包含的命令,並回傳執行完函式呼叫後,機器人所處的座. ‧. 標。我們需要在執行 evalCommands 前加入 StackFrame id @ node,指示偵錯器新增一. sit. io. al. n. 移 除 stack frame. y. Nat. 個 衳衴衡衣衫 衦衲衡衭补 來記錄函式內的資訊。. er. 7. Ch. engchi. i Un. v. 移除 衳衴衡衣衫 衦衲衡衭补 的語法規則為 endStackFrame。執行元件在執行完函式呼叫後,需要 加入 endStackFrame,指示偵錯器移除記錄此函式的 衳衴衡衣衫 衦衲衡衭补。. 更新變數 更新變數的語法規則為 Variable <Expr> : <Expr> = <Expr>。前者的 Expr 表示此變數 的名稱,中間的 Expr 表示此變數的型態名稱,最後的 Expr 則表示此變數的數值。 如表 蠳蠮蠱蠰 所示,Variable "x" : "int" = x 以及 Variable "y" : "int" = y 會新增名 為 x 與 y,型態名稱均為 int ,數值分別為 x、y 的變數,並加入至目前所處的 衳衴衡衣衫. 蠲蠸.

(41) 表 蠳蠮蠱蠰蠺 更新變數設置 1. set updateCoord ( Int , Int ) { rule Variable " x " : " int " = x &. 2. 3. Variable " y " : " int " = y. 4. ----------------------. 5. (x , y ) = > () }. 立. 政 治 大. 學 ‧. ‧ 國. 圖 蠳蠮蠳蠺 衒衇衄蠲衣衯衤补 架構. sit. y. Nat. 衦衲衡衭补 內。若 衳衴衡衣衫 衦衲衡衭补 內已有名稱為 x 或 y 的變數,則會更新它們的數值。. io. n. al. er. 6. 3.3 RGD2Code. Ch. engchi. i Un. v. 衒衇衄蠲衃衯衤补 可以讀入描述 衄術行 自然語意以及偵錯指令的 衒衇衄 程式碼,轉換並生成具 備偵錯機制的 衄術行 執行元件。圖 蠳蠮蠳 為執行元件的生成過程,使用者可以利用 衒衇衄 編輯器編輯 衒衇衄 程式碼,衒衇衄 生成器則會從編輯器取得由 衒衇衄 程式碼轉換成的抽 象語法樹,並依照 衒衇衄蠲衃衯衤补 生成樣板的定義,解析抽象語法樹並生成實作語意的偵 錯元件。. 蠲蠹.

(42) 3.4 RageDen 執 行 平 台 衒衡衧补衄补衮 執行平台是一個讓執行元件能夠運作的環境,它包含了執行元件所需的函式 庫,以及直譯器與偵錯器通用框架。當使用者想執行或偵錯 衄術行 程式時,只要啟動直 譯器或偵錯器通用框架,載入特定 衄術行 的執行元件,即可對特定的 衄術行 程式碼進行 執行與偵錯。由於 衄術行 的執行元件本身即可直接解譯 衄術行 程式碼,所以直譯器僅需 載入並呼叫執行元件。至於偵錯器則需要控制執行元件,讓使用者跟隨程式的執行流. 政 治 大 加入偵錯指令的 衒衇衄 立會生成具備偵錯機制的執行元件,其中暫停的機制由中. 程,在任何想要的地方暫停執行元件並觀測程式的狀態。. ‧ 國. 學. 斷檢查點來實現。另外還有新增與移除 衳衴衡衣衫 衦衲衡衭补,以及更新變數的偵錯指令,這 些指令指示了 衄術行 的函式呼叫流程。所以偵錯器需要一個控制堆疊 蠨衣衯衮衴衲衯衬 衳衴衡衣衫蠩. ‧. 來 紀 錄 衄術行 函 式 呼 叫 的 順 序 , 以 及 函 式 內 的 區 域 變 數 。 圖 蠳蠮蠴 為 我 們 定 義 的 控. sit. y. Nat. 制堆疊超模型 ,ControlStack 為一個堆疊 蠨術衴衡衣衫蠩,它包含了一組記錄函式資訊的. er. io. ActivationRecord。當偵錯器收到新增 衳衴衡衣衫 衦衲衡衭补 的指令時,代表此時執行元件已進. al. iv n C h e n g c h衳衴衡衣衫 入堆疊的最頂層。若在函式下又再度收到新增 i U 衦衲衡衭补 的指令,則會新增另外一個 n. 入一個 衄術行 函式,便會產生一個新的 ActivationRecord,然後呼叫 push 函式將它推. ActivationRecord,同樣推入堆疊的最頂層。所以顯示堆疊最頂層的 topMostFrame 函. 式代表執行元件目前所處的 衳衴衡衣衫 衦衲衡衭补。直到接收到離開 衳衴衡衣衫 衦衲衡衭补 的指令時,表示 此時已離開函式,才會呼叫 pop 函式將紀錄目前函式資訊的 ActivationRecord 從堆疊 的最頂層取出並丟棄。ActivationRecord 中的 name 表示函式名稱,line 表示在此函式 下,程式執行至哪一行,source 則為對應此函式的 衄術行 抽象語法樹節點,callerFrame 則指向呼叫此函式的 ActivationRecord。 偵 錯 器 若 收 到 更 新 變 數 的 指 令 時 , 會 將 變 數 的 資 訊 儲 存 在 topMostFrame 的 variables 內 , 每 個 Variable 均 有 一 個 name 儲 存 變 數 的 名 稱 , 且 擁 有 一 個 Value. 蠳蠰.

(43) 立. 政 治 大. ‧ 國. 學 圖 蠳蠮蠴蠺 控制堆疊超模型. ‧. y. Nat. 。Value 為一個介面,它定義 getValueString 抽象方法,目的在於以字串的形式表達. io. sit. 目前數值的內容。若 Value 包含一個以上的 Variable,則表示此 Value 擁有樹狀的結. n. al. er. 構。此控制堆疊可傳遞給偵錯套件,呈現目前 衄術行 的函式呼叫順序。. Ch. engchi. i Un. v. 3.5 RageDen 偵 錯 套 件 能夠執行與偵錯 衄術行 程式後,還需要提供使用者圖形介面,以方便使用者在偵錯模式 下操作與觀測被偵錯的 衄術行 程式。由於 衒衡衧补衄补衮 偵錯器沒有使用者圖形介面,所以 我們利用 衅衣衬衩衰衳补 的偵錯視圖做為使用者與偵錯器互動的介面。衒衡衧补衄补衮 偵錯套件會實 作 衅衣衬衩衰衳补 偵錯平台提供的框架,並定義一套偵錯命令與事件與偵錯器交流,讓使用者 透過偵錯視圖經由偵錯套件來與偵錯器互動。以下是偵錯套件需具備的元件與功能:. 蠳蠱.

數據

表 蠴蠮蠲 內的 module.fileName 會取得 module 生成的檔案名稱。當一個類別為 Module 的物件呼叫 fileName 時 ,它會取得此物件的套件名稱與物件名稱,並將名稱中的句點 蠨蠮蠩 取 代為斜線 蠨蠯蠩 以便符合檔案系統名稱。最後面再加上 蠮衳衣衡衬衡 副檔名,因為我們生 成的語意實作程式碼為 術衣衡衬衡 衛蠴蠰衝 程式。 4.2 建建 建構 構 構 RageDen 執 執 執行行 行平平 平台 台台 衒衡衧补衄补衮 執行平台包含執行元件需要的函式庫、直譯器與偵錯器通用框架。
表 蠵蠮蠳 為解譯 Command 模型串列的語意描述。我們希望以 Command 模型作為執 行 一次 術衴补衰 的間隔。所以在每個解譯命令的 evalCmd(cmd, coord, funcs) 前均加入

參考文獻

相關文件

cognition, culture) 框架的串連運用,以及實際於教學活動及教案設計時,如何平衡內容及語 言。課程中將安排一個搭配生活與綜合活動的

二、 自然與生活科技領域之學習

一、訓練目標:增進在職人員對自動化機械控制的原理、實務技術與相關專業知

一、訓練目標:增進在職人員對自動化機械控制的原理、實務技術與相關專業知

 TPR教學法是一種利用肢體動作和聲音 連結的直覺教學法,研究發現TPR教學

Step 3: : : :模擬環境設定 模擬環境設定 模擬環境設定 模擬環境設定、 、 、 、存檔與執行模擬 存檔與執行模擬

從視覺藝術學習發展出來的相關 技能與能力,可以應用於日常生 活與工作上 (藝術為表現世界的知

個人、社會及人文教育學習領域課程架構提供一個框架讓學校自行規劃和發展校