§ 瀏覽學位論文書目資料
  
系統識別號 U0002-1608201815334600
DOI 10.6846/TKU.2018.00463
論文名稱(中文) 引用Eclipse剖析器產生java語法樹
論文名稱(英文) Generating Java Syntax Tree by Eclipse Parser
第三語言論文名稱
校院名稱 淡江大學
系所名稱(中文) 資訊管理學系碩士班
系所名稱(英文) Department of Information Management
外國學位學校名稱
外國學位學院名稱
外國學位研究所名稱
學年度 106
學期 2
出版年 107
研究生(中文) 黃智健
研究生(英文) Chi-Kin Wong
學號 605630077
學位類別 碩士
語言別 繁體中文
第二語言別
口試日期 2018-06-02
論文頁數 110頁
口試委員 指導教授 - 廖賀田
委員 - 劉嘉傑
委員 - 魏世杰
委員 - 廖賀田
關鍵字(中) 語法樹
Eclipse
關鍵字(英) Syntax Tree
Eclipse
第三語言關鍵字
學科別分類
中文摘要
我們所開發之語法樹系統TkSynT可用以作為直譯、混亂化等用途。建立語法樹必須要透過剖析器,然而Java程式的語法持續在變動中,這導致剖析器的製作需耗費大量的資源。所以我們引用Eclipse剖析器產生AST語法樹,再利用AST產生TkSynT的語法樹,經過去模糊化後,就可以正常進行直譯及混亂化。
英文摘要
The syntax tree system TkSynT we have developed can be used for interpretation and obfuscation. Constructing a syntax tree must go through the parser. However, the syntax of the Java program continues to change, which means the parser will require extra resources. Therefore, we use the Eclipse parser to generate an AST syntax tree, then convert AST to the TkSynT syntax tree. After dis-ambiguous, we can perform interpretation and obfuscation.
第三語言摘要
論文目次
目錄
 第一章 緒論	1
1.1	研究動機與目的	1
1.2	論文概觀	2
 第二章 我們原有的語法樹 (TkSynT)	3
2.1	TkSynT介紹	3
2.1.1	TkSynT在直譯器之運用	3
2.1.2	TkSynT在混亂化之運用	4
2.2	TkSynT的結構	5
2.2.2	Precise節點	6
2.2.3	Ambiguous語法樹	19
2.3	建造TkSynT的方法	26
2.3.1	定義類	26
2.3.2	敘述類語法樹的建造	29
2.3.3	運算式語法樹的建造	30
2.4	我們開發之剖析器	35
 第三章 Eclipse 語法樹	37
3.1	Eclipse介紹	37
3.2	Eclipse Parser API概要	37
3.3	ASTView軟體介紹:	38
3.4	ASTNode種類介紹	39
3.4.1	Statement	40
3.4.2	Expression	41
3.4.3	Type	43
3.4.4	VariableDeclaration	44
3.5	ASTNode語樹結構介紹:	45
3.5.1	運算式	45
3.5.2	敘述式	53
3.5.3	定義類	60
 第四章 語法樹的比較與轉換	65
4.1	TkSynT vs. AST	65
4.2	ASTParser的使用	66
4.3	AST轉換為TkSynT	70
4.3.1	運算式的轉換	70
4.3.2	敘述式的轉換	75
4.3.3	定義類的轉換	78
 第五章 TkSynT語法樹內部型別之整修	81
5.1	Static Nested Classes	81
5.1.1	Static Nested Classes的宣告	81
5.1.2	Static Nested Classes物件的創建	82
5.2	Inner Classes	82
5.2.1	Inner Classes的宣告	82
5.2.2	Inner Classes物件的創建	83
5.2.3	Inner Classes存取enclosing object	83
5.2.4	Inner object與enclosing object 的關係	83
5.2.5	Enclosing object的儲存和設定	85
5.2.6	Inner class的繼承	86
5.2.7	Inner Class的父類建構子呼叫	87
5.3	Local class(局部類別)	88
5.3.1	Local class的Enclosing reference	88
5.3.2	Java對Local class使用外部之區域變數處理	89
5.4	Anonymous Class	90
5.4.1	Anonymous class的宣告	90
5.4.2	Anonymous class的預設建構子	91
5.5	TkSynT 內部型別語法樹之修正	92
5.5.1	Nested Types與Local Classes之語法樹	92
5.6	TkSynT的Inner Class在編譯時之處理	93
5.6.1	Inner Class類別實例創建節點在剖析期時之處理	93
5.6.2	Inner Class類別實例創建節點在連結期時之處理	93
5.7	TkSynT的Anonymous class在編譯時之處理	95
5.7.1	Anonymous class類別實例創建節點在剖析期時之處理	95
5.7.2	Anonymous class類別實例創建節點在連結期時之處理	96
5.8	TkSynT Inner Class和Local Class父類別呼叫節點在連結期之處理	96
5.9	TkSynT加入Local Class後架構之修改	98
 第六章 增補TkSynT語法樹	100
6.1	ForEach節點	100
6.2	Static Import 節點	101
 第七章 實驗案例	102
 第八章 結論與後續工作	105
8.1	結論	105
8.2	後續工作	105
參考文獻	106
附錄	108


圖目錄
圖 2 1直譯器之運用	4
圖 2 2 混亂化之運用	4
圖 2 3 前置運算符	7
圖 2 4 一元運算符語法樹結構	7
圖 2 5 二元運算符語法樹結構	8
圖 2 6 設值運算符語法樹結構	8
圖 2 7 三元運算符語法樹結構	9
圖 2 8 陣列存取語法樹結構	9
圖 2 9  2維陣列存取語法樹結構	9
圖 2 10 算式敘述的語法樹結構	10
圖 2 11 區塊敘述的語法樹結構	11
圖 2 12 區域變數宣告敘述的語法樹結構	11
圖 2 13 if敘述的語法樹結構	12
圖 2 14 switch敘述的語法樹結構	12
圖 2 15 case敘述的語法樹結構	12
圖 2 16 for迴圈語法樹結構	13
圖 2 17 while迴圈語法樹結構	14
圖 2 18 do-while迴圈語法樹結構	14
圖 2 19 try敘述的語法樹結構	15
圖 2 20 catch敘述的語法樹結構	15
圖 2 21 型別定義的類別繼承圖	16
圖 2 22 欄位定義類別圖	17
圖 2 23 函數定義類別圖	17
圖 2 24 建構子定義類別圖	18
圖 2 25  AmbigCallTN的語法樹結構	21
圖 2 26  DotAmbigMtdTN的語法樹結構	22
圖 2 27  AmbigMtdNameTN的語法樹結構	22
圖 2 28  PreciseCallTN的語法樹結構	22
圖 2 29  DotStaticMtdTN的語法結構	23
圖 2 30  DotInstMtdTN的語法結構	23
圖 2 31  AmbigNewTN的語法樹結構	24
圖 2 32  AmbigDotNewTN的語法樹結構	24
圖 2 33  PreciseNewTN的語法樹結構	24
圖 2 34  PreciseDotNewTN的語法樹結構	25
圖 2 35  AmbigNewArrTN的語法樹結構	25
圖 2 36  PreciseNewArrTN的語法樹結構	25
圖 2 37  TkParser剖析步驟	35
圖 3 1  ASTView軟體	38
圖 3 2  ASTNode類別繼承圖	39
圖 3 3  BodyDeclaration類別繼承圖	39
圖 3 4 Comment類別繼承圖	40
圖 3 5  型別類別繼承圖	43
圖 3 6  變數宣告類別繼承圖	44
圖 3 7  文數字類節點的語法樹	45
圖 3 8 二元運算符樹狀結構比較	46
圖 3 9  AST三元運算符的語法樹	48
圖 3 10  AST陣列存取的語法樹	48
圖 3 11  AST二維陣列存取的樹狀結構	48
圖 3 12  Ambiguous節點例子	49
圖 3 13  Ambiguous節點例子樹狀圖	49
圖 3 14  Precise節點例子樹狀圖	50
圖 3 15  函數的Ambiguous節點樹狀圖	51
圖 3 16  函數的Precise節點樹狀圖	51
圖 3 17  類別實例創建的語法樹	52
圖 3 18  陣列建立的語法樹	52
圖 3 19  AST變數宣告的語法樹	54
圖 3 20  TkSynT變數宣告的語法樹	54
圖 3 21  AST if條件敘述	55
圖 3 22  AST Switch-case 敘述	56
圖 3 23  AST for迴圈	56
圖 3 24  TkSynT for迴圈	57
圖 3 25  AST ForEach迴圈	57
圖 3 26  TkSynT ForEach迴圈	58
圖 3 27  AST WhileStatement	58
圖 3 28 AST DoStatement	58
圖 3 29 AST TryStatement	59
圖 3 30  AST類別宣告類別圖	60
圖 3 31  AST 欄位定義的語法樹	61
圖 3 32  VariableDeclarationFragment 的語法樹	62
圖 3 33  TkSynT TLvFldDefTN 的語法樹	62
圖 4 1  AST轉換為TkSynT過程	70
圖 4 2  運算式轉換函數	71
圖 4 3  二元運算式的轉換	72
圖 4 4  AST的二元運算式例子	72
圖 4 5  TkSynT的二元運算式例子	73
圖 4 6  方法呼叫轉換函數	74
圖 4 7  AST 方法呼叫語法樹	74
圖 4 8  TkSynT 方法呼叫語法樹	75
圖 4 9  敘述式轉換函數	75
圖 4 10 運算式敘述轉換函數	76
圖 4 11  區塊敘述轉換函數	76
圖 4 12  AST變數宣告樹狀結構	77
圖 4 13  TkSynT變數宣告樹狀結構	78
圖 4 14 檔案節點轉換函數	79
圖 4 15  型別轉換函數	79
圖 4 16 類別內部轉換函數	80
圖 5 1  Static Nested Classes物件的創建	82
圖 5 2  Inner object與enclosing object 的關係	84
圖 5 3  執行結果	84
圖 5 4  預設建構子	85
圖 5 5  反組譯結果	86
圖 5 6  inner class物件在創建時的流程	86
圖 5 7  inner class的繼承	87
圖 5 8  5.2.7	Inner Class的父類建構子呼叫	88
圖 5 9  Local class使用外部之區域變數例子	89
圖 5 10  使用一般類別模擬local class	90
圖 5 11  5.4.1	Anonymous class的宣告	91
圖 5 12  Inner Class AmbigNewTN在連結期時之處理	94
圖 5 13  inner class AmbigDotNewTN在連結期時之處理	95
圖 5 14  Anonymous class 在連結期時之處理	96
圖 5 15  TkSynT Inner Class和Local Class父類別呼叫節點在連結期之處理	98
圖 6 1  6.1	ForEach節點樹狀結構	101
圖 7 1  電梯系統執行結果	102
圖 7 2  魔方系統執行結果	103
圖 7 3  天文系統執行結果	104

表目錄
表 1 一元運算符對照表	45
表 2  二元運算符的對照表	47
參考文獻
參考文獻
[1]	郭肇安,“Java的語法樹與直譯機制”,淡江大學資訊管理學系碩士論文,2006/6

[2]	賴政良,“移除動態繫結的程式碼混亂化”,淡江大學資訊管理學系碩士論文,2009/6

[3]	Eclipse
http://www.eclipse.org

[4]	Eclipse AST View,
http://www.eclipse.org/jdt/ui/astview/index.php

[5]	By Thomas Kuhn, Eye Media GmbH, Olivier Thomann, IBM Ottawa Lab, Abstract Syntax Tree
http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

[6]	Eclipse documentation, Oxygen
http://help.eclipse.org/oxygen/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/package-summary.html

[7]	James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley and Daniel Smith, "The Java® Language Specification Java SE 9 Edition"

[8]	Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, "Compilers: Principles, Techniques, and Tools, 2/e", 2010

[9]	Heh-Tyan Liaw*, and Shih-Chieh Wei, "Obfuscation for object-oriented programs: dismantling instance methods," Software-Practice and Experience, [SCI] Volume 44, Issue 9, pp. 1077–1104, September 2014 DOI 10.1002/spe.2193

[10]	Deitel HM, Deitel PJ. Java How to Program, 5th edition. Pearson Prentice Hall: Upper Saddle River, New Jersey, 2003.

[11]	Heh-Tyan Liaw,“魔術方塊程式”, version 1, 2000/8. ftp://mail.im.tku.edu.tw/Prof_Liaw/Game/MCube,。
[12]	Heh-Tyan Liaw, “魔術方塊程式”, version 2, 2017/5/4. 未發表的程式。
[13]	<第10屆全國大專院校資訊管理實務專題暨資訊服務創新競賽> ICT2資訊技術組第一名, 天文觀星系統 (鄭立婷, 黃于珍, 劉定衡, 鐘文婕, 鄭聿倫, 林玟佑, 方姿文), 民國94年12月17日
[14]	By Ken Arnold, James Gosling, David Holmes, "java programming language 4th edition"
論文全文使用權限
校內
校內紙本論文立即公開
同意電子論文全文授權校園內公開
校內電子論文立即公開
校外
同意授權
校外電子論文立即公開

如有問題,歡迎洽詢!
圖書館數位資訊組 (02)2621-5656 轉 2487 或 來信