Formal language theory