如何在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)*;
答案 0 :(得分:3)
在Xtext中有两种不同的服务:
包含静态方法的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))