Block-Based Syntax from Context-Free Grammars
Block-based programming systems employ a jigsaw metaphor to write programs.
They are popular in the domain of programming education (e.g., Scratch), but also used as a programming interface for end-users in other disciplines, such as arts, robotics, and configuration management.
In particular, block-based environments promise a convenient interface for Domain-Specific Languages (DSLs) for domain experts who might lack a traditional programming education.
However, building a block-based environment for a DSL from scratch requires significant effort.
This paper presents an approach to engineer block-based language interfaces by reusing existing language artifacts.
We present Kogi, a tool for deriving block-based environments from context-free grammars.
We identify and define the abstract structure for describing block-based environments.
Kogi transforms a context-free grammar into this structure, which then generates a block-based environment based on Google Blockly.
The approach is illustrated with four case studies, a DSL for state machines, Sonification Blocks (a DSL for sound synthesis), Pico (a simple programming language), and QL (a DSL for questionnaires).
The results show that usable block-based environments can be derived from context-free grammars, and with an order of magnitude reduction in effort.