Formal Languages and Logic