Complier design by Alfred V. Aho, Ravi sethi and Jeffrey D. ullman