【问题标题】:xtext generator forward input to outputxtext 生成器将输入转发到输出
【发布时间】:2012-07-02 15:50:34
【问题描述】:

如何在 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)*;

【问题讨论】:

    标签: java eclipse-emf xtext xtend emf


    【解决方案1】:

    在 Xtext 中有两种不同的服务可以做到这一点:

    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))
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多