Aspect-oriented approach to writing compilers