目录
MPS
Xtext
ANTLR
谈谈Parser
编辑器与IDE
Language workbench
JetBrains MPS
Xtext
Language Workbench Challenge
First videos of the structured editor prototype
What are the main differences between Jetbrains' MPS and Eclipse Xtext?
MPS
How Does MPS Work?
不以文本表示程序語言,省略剖析的部分,直接對 AST 操作。
Structure editor
又稱
Projectional Editing
,相對於傳統的
Source code editor
(直接撰寫程序文本,又稱
Source Editing
)。所謂的 projectional,是指將編輯的 AST 投影成程序文本 (也就是我們在 source code editor 編輯的部分)。注意! 我們存檔的時候,是將 AST 存起來,而不是程序文本。
MPS Projectional Editor
Fast Track to MPS
MPS User's Guide
Xtext
基本上我們是撰寫 xtext 語法,再經由 xtext 編譯器:
產生 antlr grammer,調用 antlr 工具產生 parser。
產生 emf,產生 IDE 組件。
What's the relationshiop between Xtext and ANTLR?
xtext: Relation between AST, Metamodel and parse tree
Interview with Sven Efftinge on Xtend and Xtext
Develop DSLs for Eclipse and IntelliJ using Xtext
Xtext Webinar
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Xtext vs. EMFText: Development Process
Xtext Documentation
The Grammar Language
linking phase: 符號解析 (symbol resolution)。
parse tree: node model, instance of EMF ECore Model。
abstract syntax tree: semantic model。
ANTLR
ANTLR
ANTLR 4 Documentation
Getting Started with ANTLR v4
ANTLR: Is there a simple example?
ANTLR 4: using the lexer, parser and listener with example grammar
相對於 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 規則開頭小寫。