public static String formatNode(final Node node) {
        final StringBuilder text = new StringBuilder();
        text.append('[').append(node.getNodeName());
        String value = "";

        if (node.isType(NodeType.RULE)) {
            value = node.getAttribute(RuleNode.Attributes.NAME);
        } else if (node.isType(NodeType.TERMINAL)) {
            value = node.getAttribute(TerminalNode.Attributes.VALUE);
        } else if (node.isType(NodeType.IDENTIFIER)) {
            value = node.getAttribute(IdentifierNode.Attributes.VALUE);
        } else if (node.isType(NodeType.COMMENT)) {
            value = node.getAttribute(CommentNode.Attributes.VALUE);

            if (value.length() > MAX_VALUE_LENGTH) {
                value = value.substring(0, MAX_VALUE_LENGTH) + "...";
            }
        }

        if (!value.isEmpty()) {
            text.append("='").append(value).append('\'');
        }

        text.append(']');
        return text.toString();
    }