Compilers: Principles, Techniques, & Tools