@Override
public ParseToken transform(ParseToken node) {
TokenType type = node.tokenType;
switch (type) {
case SimpleTensor:
ParseTokenSimpleTensor st = (ParseTokenSimpleTensor) node;
NameAndStructureOfIndices ds = st.getIndicesTypeStructureAndName();
return new ParseTokenSimpleTensor(transformIndices(st.getIndices(), ds),
transformer.newName(ds.getName(), ds));
case TensorField:
ParseTokenTensorField tf = (ParseTokenTensorField) node;
ParseToken[] newContent = transformContent(tf.content);
SimpleIndices[] newArgsIndices = new SimpleIndices[tf.argumentsIndices.length];
for (int i = newArgsIndices.length - 1; i >= 0; --i)
newArgsIndices[i] = IndicesFactory.createSimple(null, newContent[i].getIndices());
NameAndStructureOfIndices dsf = tf.getIndicesTypeStructureAndName();
return new ParseTokenTensorField(transformIndices(tf.getIndices(), dsf),
transformer.newName(dsf.getName(), dsf), newContent, newArgsIndices);
case Number:
return node;
case ScalarFunction:
return new ParseTokenScalarFunction(((ParseTokenScalarFunction) node).function, transformContent(node.content));
case Expression:
ParseToken[] nContent = transformContent(node.content);
return new ParseTokenExpression(((ParseTokenExpression) node).preprocess, nContent[0], nContent[1]);
default:
return new ParseToken(node.tokenType, transformContent(node.content));
}
}