1

xtendジェネレーターで、解析されたツリーの一部を入力から出力に転送する方法は?

たとえば、出力コード生成のいくつかのケースでは、一部のコンストラクター/関数のパラメーターを解析する必要はありません。この定数、変数名、式などを出力コードに直接配置するだけで済みます (中かっこ内のすべてを転送します)。

入力 DSL コード:

CREATE_OBJECT_O(3, a, 5+6 )

出力 (Java または C++ コードの可能性があります):

Object o = new Object_Impl(3, a, 5+6 )

xtext 文法の一部:

ParameterList:
    (parameter+=Parameter ( "," parameter+=Parameter)* )?
    ;
Parameter:
    variableExpression=VariableExpression |(texts+=TextInParameter | macroSubstitutions+=MacroSubstitution)*;
4

1 に答える 1

3

Xtextでそれを行うための2つの異なるサービスがあります:

  1. org.eclipse.xtext.serializer.ISerializerサービスを挿入してから、serializer.serialize(EObject)を呼び出して、オブジェクトをテキスト形式で出力できます。ただし、編集中に機能しない場合(JVMModelInferrer内で使用する場合など)は、シリアル化ルールを使用します。
  2. ここで役立つ静的メソッドを含むクラスorg.eclipse.xtext.nodemodel.util.NodeModelUtils。これらのメソッドは、元のテキスト形式を使用し、元の形式を保持するため、編集中に使用できます。

    val eObjectNode = NodeModelUtils::getNode(eObject)
    eObjectNode.text //this is the output
    
    // Or alternatively getTokenText returns the string without hidden tokens
    NodeModelUtils::getTokenText(NodeModelUtils::getNode(eObject))
    
于 2012-07-03T20:14:45.660 に答える