MPS
-
- 不以文本表示程序語言,省略剖析的部分,直接對 AST 操作。
-
- 又稱 Projectional Editing,相對於傳統的 Source code editor (直接撰寫程序文本,又稱 Source Editing)。所謂的 projectional,是指將編輯的 AST 投影成程序文本 (也就是我們在 source code editor 編輯的部分)。注意! 我們存檔的時候,是將 AST 存起來,而不是程序文本。
-
Xtext
基本上我們是撰寫 xtext 語法,再經由 xtext 編譯器:
- 產生 antlr grammer,調用 antlr 工具產生 parser。
- 產生 emf,產生 IDE 組件。
-
-
- linking phase: 符號解析 (symbol resolution)。
- parse tree: node model, instance of EMF ECore Model。
- abstract syntax tree: semantic model。
-
ANTLR
-
-
- 相對於 Yacc 產生 LALR (bottom-up) parser,ANTLR 會產生 LL (top-down) parser,即 recursive decent parser。
- ANTLR 4 預設採用 listener (callback) 方式,遍歷抽象語法樹,執行到某條規則時,即會調用使用者自己定義的 listener 函式。可以改回 ANTLR 3 以前採用的 visitor 方式。
- lexer 和 parser 的規則寫在單一檔案,*.g4 檔。lexer 規則開頭大寫,parser 規則開頭小寫。
-