Theory of languages