示例#1
0
  public String toPrettyString(String indent) {
    StringBuilder builder = new StringBuilder();

    builder.append(indent);

    builder.append('#');
    assert !operator.contains(":") && !operator.contains("(")
        : "Operator can not contain ':' or '('.";
    builder.append(operator);

    builder.append(nodeParameters.toString());

    if (internalNodes.size() == 0) {
      builder.append("()\n");
    } else {
      builder.append("(\n");
      for (Node child : internalNodes) {
        builder.append(child.toPrettyString(indent + "    "));
      }
      builder.append(indent).append("  ").append(")\n");
    }

    return builder.toString();
  }
示例#2
0
  public String toSimplePrettyString(String indent, Set<String> ignoreParams, String addOnString) {
    StringBuilder builder = new StringBuilder();

    if (ignoreParams.contains(operator)) {
      if (internalNodes.size() != 0) {
        for (Node child : internalNodes) {
          String childString = child.toSimplePrettyString(indent, ignoreParams, addOnString);
          if (!childString.replaceAll("\\s", "").equals("")) {
            builder.append(childString);
          }
        }
      }
    } else {
      if (operator.equals("combine")) {
        builder.append(indent);
        builder.append(addOnString);
        builder.append('#');
        assert !operator.contains(":") && !operator.contains("(")
            : "Operator can not contain ':' or '('.";
        builder.append(operator);
        ArrayList<String> combineWeightList = nodeParameters.collectCombineWeightList();
        if (combineWeightList.size() == 0 && internalNodes.size() > 0) {
          DecimalFormat formatter = new DecimalFormat("###.#####");
          String weightString = formatter.format(1.0 / internalNodes.size());
          int firstNonZeroIndex = -1;
          for (int i = 0; i < weightString.length(); i++) {
            if (weightString.charAt(i) != '0' && weightString.charAt(i) != '.') {
              firstNonZeroIndex = i;
              break;
            }
          }
          if (firstNonZeroIndex != -1) {
            if (weightString.length() >= 5) {
              firstNonZeroIndex = firstNonZeroIndex >= 4 ? firstNonZeroIndex : 4;
              weightString = weightString.substring(0, firstNonZeroIndex + 1);
            }
          }
          for (Node internalNode : internalNodes) {
            combineWeightList.add(weightString);
          }
        }
        // builder.append(nodeParameters.toSimpleString(ignoreParams, operator));
        builder.append("(\n");
        for (int i = 0; i < internalNodes.size(); i++) {
          Node child = internalNodes.get(i);
          String childString = child.toSimplePrettyString(indent + "    ", ignoreParams, "");
          if (!childString.replaceAll("\\s", "").equals("")) {
            if (i < combineWeightList.size()) {
              builder.append(
                  child.toSimplePrettyString(
                      indent + "    ", ignoreParams, combineWeightList.get(i) + "\t"));
            } else {
              builder.append(child.toSimplePrettyString(indent + "    ", ignoreParams, ""));
            }
            builder.append("\n");
          }
        }
        builder.append(indent).append(")");
      } else if (operator.equals("unordered")
          || operator.equals("ordered")
          || operator.equals("syn")) {
        builder.append(indent);
        builder.append(addOnString);
        builder.append('#');
        assert !operator.contains(":") && !operator.contains("(")
            : "Operator can not contain ':' or '('.";
        builder.append(operator);
        builder.append(nodeParameters.toSimpleString(ignoreParams, operator));
        builder.append("(");
        for (Node child : internalNodes) {
          String childString = child.toSimplePrettyString("", ignoreParams, "");
          if (!childString.replaceAll("\\s", "").equals("")) {
            builder.append(childString).append(" ");
          }
        }
        builder.append(")");
      } else if (operator.equals("extents") || operator.equals("counts")) {
        builder.append(indent);
        builder.append(addOnString);
        builder.append(nodeParameters.toSimpleString(ignoreParams, operator));
        for (Node child : internalNodes) {
          String childString = child.toSimplePrettyString(indent + "    ", ignoreParams, "");
          if (!childString.replaceAll("\\s", "").equals("")) {
            builder.append(childString);
          }
        }
      } else {
        builder.append(indent);
        builder.append(addOnString);
        builder.append('#');
        assert !operator.contains(":") && !operator.contains("(")
            : "Operator can not contain ':' or '('.";
        builder.append(operator);
        builder.append(nodeParameters.toSimpleString(ignoreParams, operator));
        if (internalNodes.size() > 0) {
          builder.append("(");
          for (Node child : internalNodes) {
            String childString = child.toSimplePrettyString(indent + "    ", ignoreParams, "");
            if (!childString.replaceAll("\\s", "").equals("")) {
              builder.append(childString);
            }
          }
          builder.append(indent).append("    ").append(")");
        }
      }
    }

    return builder.toString();
  }
示例#3
0
 public String getDefaultParameter() {
   return nodeParameters.get("default", null);
 }
示例#4
0
 /**
  * Deep-clones this Node. Be aware this clones the *entire* subtree rooted at this node, therefore
  * all descendants are also cloned.
  */
 @Override
 public Node clone() {
   return new Node(operator, nodeParameters.clone(), cloneNodeList(this.internalNodes), position);
 }