class ExpressionParsingNode {
    
    private final String input;
    private final Expression expression;

    ExpressionParsingNode(final String input) {
        super();
        // INPUT SHOULD NEVER BE NULL!!!
        this.input = input.trim();
        this.expression = null;
    }
    
    ExpressionParsingNode(final Expression expression) {
        super();
        this.expression = expression;
        this.input = null;
    }

    boolean isInput() {
        return this.input != null;
    }

    boolean isExpression() {
        return this.expression != null;
    }
    
    boolean isSimpleExpression() {
        return this.expression != null && this.expression instanceof SimpleExpression;
    }
    
    boolean ComplexExpression() {
        return this.expression != null && this.expression instanceof ComplexExpression;
    }
    
    String getInput() {
        return this.input;
    }
    
    Expression getExpression() {
        return this.expression;
    }

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}
    
}

        return (isExpression()? 
                    "[" + this.expression.getStringRepresentation() + "]" : this.input);
    
<no_super_class>