Languages and Machines: An Introduction to the Theory of Computer Science (2nd Edition)