0

私は eclipse.org/Xtext/documentation のチュートリアルに取り組み、これらのサンプルを拡張していきました。Domainmodel.xtext サンプルを使用して、チュートリアルで説明されているように、エンティティごとに Java クラスファイルを生成します。

DSL は任意の数の機能 (別名クラス プロパティ) を指定します。

  Entity:
  'entity' name = ID 
          ('extends' superType = [Entity | QualifiedName])?
   '{'
   (features += Feature)*
   '}'
    ;

DomainmodelGenerator.xtend に、JAVA クラス コンストラクターを生成するコードを追加しました。XTEND-Forloop はすべての引数を循環します - 次のようになります:

def compile_Constructors(Entity e) '''
public «e.name.toFirstUpper»
       (
      «FOR f : e.features»
           «f.type.fullyQualifiedName» «f.name.toFirstUpper», 
      «ENDFOR»
        ) 
{}  
'''

問題 この最後のパラメータにはまだコンマが出力されています。XTEND で loopindex を制御して、ジェネレーターが正当な JAVA コードを発行できるようにするにはどうすればよいですか?

4

2 に答える 2

3

«FOR»ループには非常に便利なオプションがいくつかあります。

  • BEFORE string
  • SEPARATOR string
  • AFTER string

これらにより、アイテムの前、間、後に追加の文字列を発行できます。項目がない (空のリスト) 場合は、どれも出力されません。

したがって、あなたの場合は使用するだけです

«FOR f : e.features SEPARATOR ', '»
于 2013-08-31T16:06:48.523 に答える
2

どうですか:

def compile_Constructors(Entity e) '''
    public «e.name.toFirstUpper»
           (
           «e.features.map[type.fullyQualifiedName + ' ' + name.toFirstUpper].join(', ')»
           ) 
    {}
'''
于 2013-08-28T08:26:16.377 に答える