000064402 001__ 64402
000064402 005__ 20190812204905.0
000064402 037__ $$aCONF
000064402 245__ $$aImplementing Extensible Compilers
000064402 269__ $$a2001
000064402 260__ $$c2001
000064402 336__ $$aConference Papers
000064402 520__ $$aNew 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.
000064402 700__ $$0241892$$g126007$$aZenger, Matthias
000064402 700__ $$0241835$$aOdersky, Martin$$g126003
000064402 7112_ $$dJune 2001$$cBudapest$$aECOOP 2001 Workshop on Multiparadigm Programming with Object-Oriented Languages
000064402 773__ $$tProceedings of the ECOOP 2001 Workshop on Multiparadigm Programming with Object-Oriented Languages
000064402 8564_ $$zn/a$$uhttps://infoscience.epfl.ch/record/64402/files/mpool01.ps.gz$$s182427
000064402 909C0 $$xU10409$$pLAMP$$0252187
000064402 909CO $$ooai:infoscience.tind.io:64402$$qGLOBAL_SET$$pconf$$pIC
000064402 937__ $$aLAMP-CONF-2001-004
000064402 970__ $$a24/LAMP
000064402 973__ $$sPUBLISHED$$aEPFL
000064402 980__ $$aCONF