Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Design pattern implementation in Java and aspectJ
OOPSLA '02 Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Composing programming languages by combining action-semantics modules
Science of Computer Programming - Special issue: Language descriptions, tools and applications (LDTA'01)
JastAdd: an aspect-oriented compiler construction system
Science of Computer Programming - Special issue: Language descriptions, tools and applications (LDTA'01)
A two-dimensional separation of concerns for compiler construction
Proceedings of the 2005 ACM symposium on Applied computing
Processing heterogeneous abstract syntax trees with the mutable class pattern
Companion to the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
The aspect-oriented design of the PUMA C/C++ parser framework
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
PUMA: an aspect-oriented code analysis and manipulation framework for C and C++
Transactions on aspect-oriented software development VIII
Hi-index | 0.01 |
A major difficulty in compiler development regards the proper modularization of concerns among the various compiler phases. The traditional object-oriented development paradigm has difficulty in providing an optimal solution towards modularizing the analysis phases of compiler development, because implementation of each phase often crosscuts the class hierarchy defined by language syntax constructs. Object-oriented design patterns, such as the Visitor pattern, also cannot solve the crosscutting problem adequately because an object is not a natural representation of a collection of operations. This paper demonstrates the benefits of applying aspect-oriented programming languages (e.g., AspectJ) and principles to compiler design and implementation. The experience result shows that the various language constructs in AspectJ (e.g., inter-type declaration, pointcut-advice model, static aspect members and aspect inheritance) fit well with the various computation needs of compiler development, which results in a compiler implementation with improved modularity and better separation of concerns. The ideas utilized in this paper can also be generalized to other software systems with a tree-like structure.