We develop compilers for standard and custom languages. We use tools like ANTLR or JastAdd for generation of lexers and parser generating code in C or other languages.
We develop custom and domain specific languages allowing to express solutions in the idiom and at the level of abstraction of the problem domain.
We develop parsers, analysers and tranformation engines for various data formats using tools like JastAdd. We can validate, correct and transform data for migration and other purposes.
Danfoss offers an IDE for programming micro controllers. Their diagram-based programming language Guide Plus+1 had to be complemented with five standard languages (IEC 61131-3) specific for the domain (DSL) of programmable logic controllers (PLC).
Softwerk implemented the DSL-to-C compilers. Resulting code can be executed & debugged together with C code generated from Guide Plus+1. We maintain this compiler for almost three years and take care of updates of the standard & other change requests.
Danfoss owns a modern, fast, maintainable & reliable compiler extending their offerings to their customers.
Danfoss is a leading provider of programmable logic controllers (PLC) for the heavy vehicle industry. For PLC programming they offer a graphical programming language with a development environment called Plus+1 Guide to program their equipment.
Within this environment, we developed a compiler for Structured Text 2.0 (ST2) to C which works together with the existing Plus+1 Guide code. As a result, it is possible to compile existing graphical programs together with new ST2 programs and libraries to more powerful programs bringing micro controllers to the next level.
The key value for Danfoss is that they provide a simple transition for new customers to Plus+1 allowing to reuse and integrate their legacy codes.
Guide Plus+1 tools support a graphical language and Structured Text 2.0 which is compiled to C code to run on Programmable Logic Controllers (PLC). PLCs have memory restrictions and therefore code needs to be optimized for space. Applications have real-time requirements and therefore code needs to be optimized for performance
We implemented a number of compiler optimizations including standard optimizations like Dead Code Elimination and Constant Propagation as well as tailored optimizations such as clever Code Selection and Code Movement algorithms.
The resulting optimized code greatly improved compactness of the code, its runtime memory requirements and performance allowing for better resource utilization and more on chip functionality.