FOAL: Foundations of Aspect-Oriented Languages