public String toString() {
   StringBuilder sb = new StringBuilder();
   List<String> ruleStrings = new ArrayList<String>();
   for (String leftChild : binaryRulesByLeftChild.keySet()) {
     for (BinaryRule binaryRule : getBinaryRulesByLeftChild(leftChild)) {
       ruleStrings.add(binaryRule.toString());
     }
   }
   for (String child : unaryRulesByChild.keySet()) {
     for (UnaryRule unaryRule : getUnaryRulesByChild(child)) {
       ruleStrings.add(unaryRule.toString());
     }
   }
   for (String ruleString : CollectionUtils.sort(ruleStrings)) {
     sb.append(ruleString);
     sb.append("\n");
   }
   return sb.toString();
 }