
eu.stratosphere.meteor.SopremoTreeAdaptor Maven / Gradle / Ivy
The newest version!
package eu.stratosphere.meteor;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.antlr.runtime.Token;
import org.antlr.runtime.tree.BaseTreeAdaptor;
import org.antlr.runtime.tree.TreeAdaptor;
import eu.stratosphere.sopremo.expressions.ExpressionFactory;
import eu.stratosphere.sopremo.expressions.UnevaluableExpression;
import eu.stratosphere.util.reflect.ReflectUtil;
public class SopremoTreeAdaptor extends BaseTreeAdaptor implements TreeAdaptor {
private final ExpressionFactory expressionFactory = new ExpressionFactory();
@Override
public void addChild(final Object t, final Object child) {
if (child != null)
((PlaceholderExpression) t).getParams().add(child);
}
@Override
public Object becomeRoot(final Object newRoot, final Object oldRoot) {
return newRoot;
}
@Override
public Object becomeRoot(final Token newRoot, final Object oldRoot) {
return super.becomeRoot(newRoot, oldRoot);
}
@Override
public Object create(final int tokenType, final String text) {
assert tokenType == MeteorParser.EXPRESSION : "token type not supported";
return new PlaceholderExpression(this.expressionFactory.getExpressionType(text));
}
@Override
public Object create(final int tokenType, final Token fromToken) {
assert tokenType == MeteorParser.EXPRESSION : "token type not supported";
return new PlaceholderExpression();
}
@Override
public Object create(final Token payload) {
return this.create(payload.getType(), payload.getText());
}
@Override
public Token createToken(final int tokenType, final String text) {
throw new UnsupportedOperationException();
}
@Override
public Token createToken(final Token fromToken) {
throw new UnsupportedOperationException();
}
@Override
public Object dupNode(final Object treeNode) {
throw new UnsupportedOperationException();
}
@Override
public int getChildIndex(final Object t) {
throw new UnsupportedOperationException();
}
@Override
public Object getParent(final Object t) {
throw new UnsupportedOperationException();
}
@Override
public Token getToken(final Object t) {
throw new UnsupportedOperationException();
}
@Override
public int getTokenStartIndex(final Object t) {
throw new UnsupportedOperationException();
}
@Override
public int getTokenStopIndex(final Object t) {
throw new UnsupportedOperationException();
}
@Override
public Object nil() {
return new PlaceholderExpression();
}
@Override
public void replaceChildren(final Object parent, final int startChildIndex, final int stopChildIndex, final Object t) {
throw new UnsupportedOperationException();
}
@Override
public Object rulePostProcessing(final Object root) {
if (root == null)
return null;
PlaceholderExpression placeholder = (PlaceholderExpression) root;
if (placeholder.params.isEmpty())
return placeholder;
if (!(placeholder.params.get(0) instanceof PlaceholderExpression))
return placeholder.params.get(0);
placeholder = (PlaceholderExpression) placeholder.params.get(0);
final Class> expressionClass = placeholder.getExpressionClass();
if (expressionClass == null)
return null;
assert expressionClass != null : "could not determine expression class";
final Object[] params = placeholder.params.toArray(new Object[0]);
return this.instantiate(expressionClass, params);
}
@Override
public void setChildIndex(final Object t, final int index) {
throw new UnsupportedOperationException();
}
@Override
public void setParent(final Object t, final Object parent) {
throw new UnsupportedOperationException();
}
@Override
public void setTokenBoundaries(final Object t, final Token startToken, final Token stopToken) {
}
protected Object instantiate(final Class> expressionClass, final Object[] params) {
return ReflectUtil.newInstance(expressionClass, params);
}
public class PlaceholderExpression extends UnevaluableExpression {
private final List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy