2011-05-05 14 views
16

私はちょうどそこに編集のためのIDEと同様、DSLをcreatするための非常に素晴らしいツールXtextに出くわしました。私はウェブ上でいくつかの検索を行い、ANTLRのすべての機能を提供していないと言っている人々を見つけました。私はパーサージェネレータとしてANTLRを使用しています。XTextが提供しないANTLRの機能は何ですか?

mylanguage用の完全なパーサを書くのにANTLRのどの機能が必要なのかもよく分かりませんが、ANTLRはかなり長い間Xtext以外の機能をサポートしています。

誰でもXtext文法で何が指定できないのかいくつかの例を挙げてください。

答えて

18

Xtext文法でセマンティック述部を指定することはできません。さらに、Xtextで任意のアクション(読み込み:ターゲット言語コードブロック)を含めることはできません。唯一サポートされているターゲットプラットフォームはJavaです。

Xtextは、これらの制約を誘導することによって大きな利益を得ることができます。あなたは、あなたの文法に合った任意のモデル/構文グラフを直列化することを可能にするアンパーザを得るでしょう。構文グラフについて言えば、Xtextを使用すると、IDEで編集できる言語用の型付けされたASTが得られます。

Xtextの表現で一意の文法機能は、順序付けられていないグループです。つまり、文法の特定の要素が任意の順序で発生する可能性がありますが、それぞれの要素は1回だけ直接表現することができます。あなたは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機能をサポートしていますよね:) –

+0

XtextはアクションAntlrのブラックボックスターゲット言語リテラルと混同して)演算子の優先順位を実装します。特に、エラーリカバリが重要なインタラクティブな環境では、非常にうまく動作します。私は、Antlrの新しい計画を事前に実施するために移行することは考えていません。 –

関連する問題