2011-11-26 13 views
9

非常に単純なAntlr文法をXtextに変換したいので、syntactic predicatesfancy features of Antlr not provided by Xtextはありません。この文法に単純なAntlr文法をXtextに変換する

grammar simple; // Antlr3 

foo: number+; 
number: NUMBER; 
NUMBER: '0'..'9'+; 

とのXtextの対応

grammar Simple; // Xtext 
import "http://www.eclipse.org/emf/2002/Ecore" as ecore 
generate Simple "http://www.example.org/Simple" 

Foo: dummy=Number+; 
Number: NUMBER_TOKEN; 
terminal NUMBER_TOKEN: '0'..'9'+; 

を考えるのXtextは舞台裏ANTLRを使用しますが、2つのフォーマットがまったく同じではありません。

  • は、端末が
  • がトップに機能を追加し動作させるためにimport "http://www.eclipse.org/emf/2002/Ecore" as ecoreを含めるterminalキーワードと

    • プレフィックス端子:を含む、私は変更する必要がかなりの数の迷惑な(そして部分的に理解しやすい)ものがありますが、例えばレベルルールfoo: dummy=number+
    • ルール名と端末名は、大文字と小文字を区別しないで一意である必要があります。
    • 必要に応じて、Java規則に従うようにルール名の最初の文字を大文字にします。

    少なくとも単純なケースでは、この変換を自動的に行うツールはありますか?そうでない場合は、そのような修正のチェックリストが完全にありますか?

  • +0

    あなたが望むものはまったくわからないツールですが、文法をXMLに変換して(http://bottlecaps.de/convert/)、その結果をXQueryまたはXSLTで実行することができます希望するターゲット形式に変換します。コンバータはANTLR文法の基本構造のみを理解しますが、それはあなたが求めていたものです。 – Gunther

    +0

    @BartKiersとGunther、私はあなたの助けを借りてお互いに感謝していますが、この会話は話題にならないようです。 Gunther、あなたはあなたのコンバーターのための問題トラッカーを持っているかもしれません(私はこれも多くの喜びをもって使います)。 –

    +1

    @AdamSchmideg、そうです、それは全く話題ではありませんでしたが、それはトピックに関する_was_から始まりました。正直言って、あなたはちょっとしたことだと思います。しかし、十分に公正な、あなたの質問、私は私のノイズを削除します。私の謝罪。 @Gunther、このQ&Aで '〜' charの使い方を説明しようとしました:http://stackoverflow.com/questions/8284919/negating-inside-lexer-and-parser-rules –

    答えて

    3

    Antlr文法にはXtext文法で必要な情報がないため、この変換を自動的に行うことは基本的に不可能です。 Xtextのルール名は、それらからクラスを作成するために使用されます。 Xtextには、これらのクラスのgetterとsetterになる割り当てがあります。しかし、結果のASTのノイズを減らすことができる特殊なパターンがXtextに存在するため、これらの割り当てはすべてのルール呼び出しで使用するべきではありません。このようなものは、この変換を自動的に行うことはほとんどできません。しかし、Antlr文法をXtextエディタにコピーし、手動で問題を修正するのは、通常は簡単です。

    +1

    XtextはASTについて考えさせるので、手作業で問題を解決することができますが、Antlrは厄介なことに満足しています。 ASTのアプローチについて気にしています。 –

    関連する問題