Compilers : principles, techniques, and tools