2012-05-10 7 views
2

xtextでninja buildの文法を定義しようとしています。Ninja build in xText

私が答えることができない3つのトリッキーポイントがあります。タブによって

  • インデント:インデントを処理する方法

。 A のninjaビルドファイルには、前のタブ間隔(makeファイルに類似)を持つ複数の変数定義が含まれている場合があります。 :これは

cflags = -g 
rule cc 
    command = gcc $cflags -c $in -o $out 
  • クロス変数名の予約されたセットを参照(...、パイソン、作る)言語は、SLのコメントを持っているホワイトスペースを無視し、タブでインデントを行う際に問題となります

    予約された変数があります。オートコンプリートは、予約された変数とユーザー定義の変数の両方を参照できる必要があります。 WS

org.eclipse.xtext.common.Terminalsで区切られていない相互参照変数名をオートコンプリート

command = gcc $cflags -c $in -o $out 
  • はWSトークンを隠します。 IDトークンは空白で区切られています。しかし、忍者スクリプト(makeファイルに似ています)では、最も長い変数名と一致するように解析する必要があります。

    some_var = some_value 
    command = $some_var.h 
    

    いずれかのアイデアがあります。ありがとう。

+0

まだこのヘルプが必要ですか? –

+1

この関連する質問を参照してください:http://stackoverflow.com/questions/7167834/xtext-grammar-for-language-with-significant-semantic-whitespace –

+0

積極的ではありませんが、答えがいいです。 –

答えて

1

のXtext 2.8.0リリースチェックアウト:https://www.eclipse.org/Xtext/releasenotes.html

Whitespace-Aware Languagesセクションの状態:

をのXtext 2.8には空白が 構造を指定するために使用される言語、例えばをサポートしていますインデントを使用して Pythonのコードブロックを区切ります。これらのトークンは文法ルールで他の端末と同じように使用することができます

terminal BEGIN: 'synthetic:BEGIN'; 
terminal END: 'synthetic:END'; 

WhitespaceAwareBlock: 
    BEGIN 
     ... 
    END; 

Eclipseの例で使用可能な新しい例言語ホームオートメーション(ファイルこれは、文法で定義された合成のトークンを介して行われます→新規→例→Xtext例)は、この概念を実証しています。それは以下のようなコードを可能にします:

Rule 'Report error' when Heater.error then 
    var String report 
    do 
     Thread.sleep(500) 
     report = HeaterDiagnostic.readError 
    while (report == null) 
    println(report) 

詳細はドキュメントにあります。