/**
         * Realises a phrase element.
         *
         * @param phrase
         *            the element to be realised
         * @return the realised element.
         */
        private NLGElement realisePhraseElement(PhraseElement phrase)
        {
            NLGElement realisedElement = null;

            if (phrase != null)
            {
                ElementCategory category = phrase.Category;

                if (category is PhraseCategory)
                {
                    switch (((PhraseCategory)category).GetPhraseCategory())
                    {
                    case PhraseCategory.PhraseCategoryEnum.CLAUSE:
                        realisedElement = ClauseHelper.realise(this, phrase);
                        break;

                    case PhraseCategory.PhraseCategoryEnum.NOUN_PHRASE:
                        realisedElement = NounPhraseHelper.realise(this, phrase);
                        break;

                    case PhraseCategory.PhraseCategoryEnum.VERB_PHRASE:
                        realisedElement = VerbPhraseHelper.realise(this, phrase);
                        break;

                    case PhraseCategory.PhraseCategoryEnum.PREPOSITIONAL_PHRASE:
                    case PhraseCategory.PhraseCategoryEnum.ADJECTIVE_PHRASE:
                    case PhraseCategory.PhraseCategoryEnum.ADVERB_PHRASE:
                        realisedElement = PhraseHelper.realise(this, phrase);
                        break;

                    default:
                        realisedElement = phrase;
                        break;
                    }
                }
            }

            return(realisedElement);
        }