Reversible Grammar in Natural Language Processing