private Set<String> checkTreeForMissingDefinitions(Tree t) {
		Set<String> missing = new HashSet<String>();
		if (t.type == NodeType.identifier) {
			if (!definitions.containsKey(t.node)) {
				missing.add(t.node);
			}
		} else if (t.type == NodeType.choice || t.type == NodeType.sequence ||
				t.type == NodeType.optional || t.type == NodeType.repetition) {
			for (Tree b : t.branches) {
				if (b != null) {
					missing.addAll(checkTreeForMissingDefinitions(b));
				}
			}
		}
		return missing;
	}