The context of this research is testing and building software systems and, specifically, software language repositories (SLRs), i.e., repositories with components for language processing (interpreters, translators, an- alyzers, transformers, pretty printers, etc.). SLRs are typically set up for developing and using metaprogram- ming systems, language workbenches, language definition frameworks, executable semantic frameworks, and modeling frameworks.
This work is an inquiry into testing and building SLRs in a manner that the repository is seen as a collection of language-typed artifacts being related by the applications of language-typed functions or relations which serve language processing. The notion of language is used in a broad sense to include text-, tree-, and graph- based languages as well as representations based on interchange formats and also proprietary formats for serialization.
The overall approach underlying this research is one of language design driven by work on a particular SLR, YAS, which features a significant number of processed languages and language processors as well as a noteworthy heterogeneity in terms of representation types and implementation languages.
The knowledge gained by our research is best understood as a declarative language design for regression testing and build management; we introduce a corresponding language Ueber with an executable semantics which maintains relationships between language-typed artifacts in an SLR.
The grounding of the reported research is based on the executable, logic programming-based definition of the Ueber language and its systematic application to the management of YAS which consists of hundreds of language definition and processing components (such as interpreters and transformations) for more than thirty languages (not counting different representation types) with Prolog, Haskell, Java, and Python being used as implementation languages.
The importance of this work stems from its objective of helping to understand and maintain relationships in SLRs, thereby directly helping users and developers of SLRs.
Language processing. Build management. Regression testing. Software language repository. Software language engineering. Megamodeling. YAS. Ueber.