2011-05-05 145 views
16

我只是遇到了非常好的工具Xtext來創建DSL以及IDE進行編輯。我在網上做了一些搜索,發現有人說它不提供ANTLR的所有功能。我使用ANTLR作爲我的分析器生成器。XText不提供哪些ANTLR的功能?

我甚至不確定ANTLR的哪些功能需要爲mylanguage編寫完整的解析器,但ANTLR相當長時間,可能支持比Xtext更多的功能。

任何人都可以請一些例子什麼不能在Xtext語法中指定?

回答

18

您不能在Xtext語法中指定語義謂詞。此外,使用Xtext無法包含任意操作(讀取:目標語言代碼塊)。唯一支持的目標平臺是Java。好消息是,Xtext通過引入這些約束獲得很大的好處,例如,你會得到一個unparser,允許序列化與你的語法相匹配的任意模型/語法圖。說到語法圖,使用Xtext,您將獲得一個爲您的語言輸入的AST,您可以在IDE中對其進行編輯。

Xtext表示中唯一的語法功能是無序組。也就是說,你可以直接表達你的語法中的某些元素可能以任意順序出現,但每個元素只能出現一次。如果你想在Java改性劑,這可能是非常方便的:

visibility=('public'|'private') // this is a mandatory assignment 
& abstractOrFinal=('abstract'|'final')? // this is optional 
& static?='static'? // this will become a boolean value in your ast 

看一看在Xtext docs對語法語言的更多細節。

+0

重要的一點是,Xtext在內部使用ANTLR和afaik,你一定知道得更好,Xtext遲早會支持更多的ANTLR特性,比如運算符優先級等吧?:) – 2011-05-11 01:52:25

+0

Xtext有Actions的概念(不是與Antlr的黑匣子目標語言文字混淆)來實現運算符優先級。它非常適合我們,特別是在錯誤恢復非常重要的交互式環境中。我懷疑我們會遷移Antlr新計劃來實施precendencies。 – 2011-05-11 04:51:05