private void addDefinition(String name, Vector<String> partproc, int depth) {
		if (!definitions.containsKey(name)) {
			definitions.put(name, new Vector<Vector<PatternComponent>>());
		}
		Pattern charcterRange = Pattern.compile("([a-zA-Z])-([a-zA-Z])");
		
		Vector<PatternComponent> components = new Vector<PatternComponent>(partproc.size());
		Vector<Token> newTokens = new Vector<Token>();
		for (int i = 0; i < partproc.size(); i++) {
			String part = partproc.get(i);
			Matcher matcher = charcterRange.matcher(part);
			if (part.startsWith("\'")) {
				Token token = new Token(part.substring(1, part.length()-1));
				if (!name.startsWith("*"))
					newTokens.add(token);
				components.add(token);
			} else if (part.equals("(*)")) {
				// TODO This should be as described in the format file
				components.add(SpecialToken.STRING_LITTERAL);
			} else if (part.equals("(**)")) {
				components.add(SpecialToken.STRING_LITTERAL);
				
			} else if (matcher.find()) {
				String start = matcher.group(1);
				String end = matcher.group(2);
				components.add(new CharacterRange(start, end));
			} else {
				// TODO reference limitations must be implemented
				PatternReference reference = new PatternReference(part, depth);
				components.add(reference);
			}
		}
		tokens.addAll(newTokens);
		definitions.get(name).add(components);
		
	}