@Override
    public String toString() {
        if (children == null || children.size() == 0) {
            return this.getText();
        }
        StringBuffer buf = new StringBuffer();
        if (children != null) {
            buf.append("(");
            buf.append(this.getText());
            buf.append(' ');
        }
        for (int i = 0; children != null && i < children.size(); i++) {
            ASTNode t = children.get(i);
            if (i > 0) {
                buf.append(' ');
            }
            buf.append(t.toString());
        }
        if (children != null) {
            buf.append(")");
        }
        return buf.toString();
    }