Implementing Extensible Compilers

New extensions to programming languages are constantly being proposed. But implementing these extensions usually turns out to be a very difficult and expensive task, since conventional compilers often lack extensibility and reusability. In this paper we present some fundamental techniques to implement extensible compilers in an object-oriented language. For being able to implement extensible compiler passes, we introduce an extensible form of algebraic datatypes. Our extensible algebraic datatypes with defaults yield a simple programming protocol for implementing extensible and reusable compiler passes in a functional style. We propose an architectural design pattern Context-Component which is specifically targeted towards building extensible, hierarchically composed systems. Our software architecture for extensible compilers combines the use of algebraic types, known from functional languages, with this object-oriented design pattern. We show that this approach enables us to extend existing compilers flexibly without modifying any source code. Our techniques have been successfully applied in the implementation of the extensible Java compiler JaCo.

Published in:
Proceedings of the ECOOP 2001 Workshop on Multiparadigm Programming with Object-Oriented Languages
Presented at:
ECOOP 2001 Workshop on Multiparadigm Programming with Object-Oriented Languages, Budapest, June 2001

 Record created 2006-01-24, last modified 2018-03-17

Download fulltext

Rate this document:

Rate this document:
(Not yet reviewed)