Component-based language engineering with Object Algebras Programming languages and domain-specific languages are often implemented from scratch even though many languages have features in common. A recent trend in the context of software language engineering is the development of techniques for code reuse within the development of software languages. The object algebra design pattern is a relatively new technique, taking advantage of some advanced features of Java/Scala (generics, default methods) to implement software languages with a high degree of reuse and modularity. Simultaneously, the PLanCompS project has identified a large library of fundamental programming constructs (called 'funcons') with which the semantics of many kinds of programming languages can be defined. This project aims to bring together these two research results by implementing the funcons of the PLanCompS projects using object algebras in Java or Scala. Your task will be to investigate the different ways in which this can be achieved and to report on the consequences of the design choices with respect to functional and non-functional requirements. This project offers you the opportunity to demonstrate your skills in Java/Scala (or other OO-language with generics) and to learn about programming language design and implementation. Moreover, you will be exposed to cutting edge research on the topic of agile software language engineering. More about the PLanCompS project can be read [here](https://plancomps.github.io/CBS-beta/). Further reading about funcons and object algebras is provided in the references below. Keywords: _software language engineering, reusable components, Java, Scala, generics, interpretation, modularity, operational semantics_ #### References [1] Bruno C. d. S. Oliveira and William R. Cook. 2012. _Extensibility for the Masses - Practical Extensibility with Object Algebras_. In ECOOP 2012 – Object-Oriented Programming. Springer Berlin Heidelberg, 2–27. [2] Inostroza Valdera, P.A, & van der Storm, T. (2017). _Modular interpreters with implicit context propagation_. Computer Languages, Systems and Structures, 48, 39–67. [3] _Executable Component-Based Semantics_. L. Thomas van Binsbergen, Peter D. Mosses, and Neil Sculthorpe. Journal of Logical and Algebraic Methods in Programming, 2019