Massimiliano Poggi, Nicola Pirritano Giampietro, Walter Cazzola (University of Milan)
Modular language development frameworks allow developers to quickly create new domain-specic programming languages (DSLs) by joining pre-existing components with newly-created ones in order to achieve maximum productivity. In a modular language development framework, a language is seen as a composition of language features that collaborate to provide a complete language implementation. Each feature represents a language construct and is specied in its own module(s), allowing for both decoupling and reuse of its syntax and behavior.
To be really productive with the new DSL, the programmer must have access to dedi-cated development-aiding tools such as editors and debuggers. A modular language development framework must therefore provide a way to generate such tools along with the interpreter/compiler for the language.
However, an integrated development environment (IDE) is generally built in a monolithic fashion and tailored to a specic programming language, both elements that work against the concept of modularity intrinsic in the idea of modularly developed language. The goal is thus to find a way to include enough information inside each module to allow the framework to generate an IDE for the language. To make it possible, each construct should provide meta-information about itself. Such meta-information are specified by the language designer, shipped with the related module and combined with those coming from other modules when needed to generate the IDE for the new DSL.
Neverlang is a JVM-based framework for modular language development that emphasizes code reuse through composition of language features: the language developer can specify syntax and evaluation of programming constructs independently in different modules and provide hooks for other modules, enabling the composition and reuse of previously written modules. The framework generates an interpreter for the language by collecting the different modules and
joining them into a complete language definition.
However, the implementation is currently only a proof-of-concept and can be improved in several ways: syntax highlighting is currently syntactic only, the Neverlang parser is not error-tolerant and the debugger currently does not support multiple stack frames or expression evaluation. Solutions to these problems have been laid out but are currently not implemented due to time constraints. Nevertheless, our work can be considered a first step towards the creation of a synergy between modular language development frameworks and tools such as Eclipse that are not generally built with language modularity in mind.