@Override
	public Vocabulary parse(Expression expression) throws ExpressionParserException {
		Vocabulary vocabulary = new Vocabulary();
		
		setDefaults(vocabulary);
		
		// vocabulary definition should be compound
		List<Expression> nested = getNested(expression);
		
		for (Expression exp : nested) {
			String identifier = exp.getIdentifier();
			
			if ("verbs".equals(identifier)) {
				parseVerbs(vocabulary, exp);
			} else if ("articles".equals(identifier)) {
				vocabulary.addArticles(getList(exp));
			} else if ("prepositions".equals(identifier)) {
				vocabulary.addPrepositions(getList(exp));
			} else if ("messages".equals(identifier)) {
				parseMessages(vocabulary, exp);
			} else if ("magicPhrases".equals(identifier)) {
				parseMagicPhrases(vocabulary, exp);
			} else if ("specialEntities".equals(identifier)) {
				parseSpecialEntities(vocabulary, exp);
			} else {
				throw new ExpressionParserException(identifier + " is not valid within expression.", exp);
			}
		}
		
		return vocabulary;
	}