package openmods.calc.parsing; import com.google.common.base.Preconditions; import java.util.List; import openmods.calc.BinaryOperator; import openmods.calc.UnaryOperator; public class DefaultExprNodeFactory<E> implements IExprNodeFactory<E> { private final IValueParser<E> valueParser; public DefaultExprNodeFactory(IValueParser<E> valueParser) { this.valueParser = valueParser; } @Override public IExprNode<E> createBracketNode(String openingBracket, String closingBracket, List<IExprNode<E>> children) { TokenUtils.checkIsValidBracketPair(openingBracket, closingBracket); Preconditions.checkState(children.size() == 1, "Invalid number of children for bracket node: %s", children); return new BracketNode<E>(children.iterator().next()); } @Override public IExprNode<E> createBinaryOpNode(BinaryOperator<E> op, IExprNode<E> leftChild, IExprNode<E> rightChild) { return new BinaryOpNode<E>(op, leftChild, rightChild); } @Override public IExprNode<E> createUnaryOpNode(UnaryOperator<E> op, IExprNode<E> child) { return new UnaryOpNode<E>(op, child); } @Override public IExprNode<E> createValueNode(E value) { return new ValueNode<E>(value); } @Override public IExprNode<E> createValueNode(Token token) { return createValueNode(valueParser.parseToken(token)); } @Override public IExprNode<E> createSymbolGetNode(String id) { return new SymbolGetNode<E>(id); } }