Formal Language: A Practical Introduction