private static void tallyTree(Tree<String> tree,
			Counter<UnaryRule> unaryRuleCounter,
			Counter<BinaryRule> binaryRuleCounter) {
		if (tree.isLeaf())
			return;
		if (tree.isPreTerminal())
			return;
		if (tree.getChildren().size() == 1) {
			UnaryRule unaryRule = makeUnaryRule(tree);
			unaryRuleCounter.incrementCount(unaryRule, 1.0);
		}
		if (tree.getChildren().size() == 2) {
			BinaryRule binaryRule = makeBinaryRule(tree);
			binaryRuleCounter.incrementCount(binaryRule, 1.0);
		}
		if (tree.getChildren().size() < 1 || tree.getChildren().size() > 2) {
			throw new RuntimeException(
					"Attempted to construct a Grammar with an illegal tree (unbinarized?): "
							+ tree);
		}
		for (Tree<String> child : tree.getChildren()) {
			tallyTree(child, unaryRuleCounter, binaryRuleCounter);
		}
	}