<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>First-Person Realtime Collaborative Metaprogramming Adventures</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Riemer van Rozen1,</string-name>
          <email>rozen@cwi.nl</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Youri Reijne2, Clement Julia2 and Georgia Samaritaki2</string-name>
          <email>fy.reijne, clement.julia13, samaritakigeorgiag@gmail.com</email>
          <email>samaritakigeorgiag@gmail.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>1Centrum Wiskunde &amp; Informatica</institution>
          ,
          <addr-line>Amsterdam</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>2University of Amsterdam</institution>
          ,
          <addr-line>Amsterdam</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Game developers strongly rely on programming languages and tools for creating educative, adventurous, challenging, humorous and playful interactive experiences. However, it is not yet well-understood how to construct languages and tools for improving games and play. In this position paper we discuss how to leverage language workbenches and metaprogramming techniques for creating language-centric solutions that help speed-up game design and development. We present a research vision, followed by three illustrative examples that demonstrate how the available enabling technology can be applied to tackle recurring challenges in language prototyping. Finally, we reflect on threats to validity and discuss challenges and opportunities for future collaboration.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        We are at the frontier of an emerging research area that
explores what informs the design and construction of good
games. This field studies to what extent languages,
notations, patterns and tools, can offer experts theoretical
foundations, systematic techniques and practical solutions they
need to raise their productivity and improve the quality
of games and play. We have conducted a systematic
mapping study on ‘languages of games and play’ that maps the
breadth of related work
        <xref ref-type="bibr" rid="ref33">(van Rozen 2021)</xref>
        . This study gives
an overview of research areas and publication venues,
summarizes over 100 languages identified in more than 1400
publications, synthesizes a set of fourteen complementary
research perspectives, and relates challenges and approaches
to opportunities for automated game design.
      </p>
      <p>Our findings indicate that languages play a central role in
an increasing number of publications. Languages are
necessary in distinct research areas for a variety of technical and
non-technical reasons. Here we discuss a brief selection. For
a more elaborate overview, we refer to the mapping study.</p>
      <p>In practice, game developers rely on game engines,
languages and tools for constructing high quality games.
Authors propose languages as development tools or design aids
aimed at communication, creativity, productivity or quality.
Automated Game Design (AGD) proposes mixed-initiative
or co-creative languages and authoring tools for helping
domain-experts contribute in expressing a game’s design.
Copyright © 2021by the paper’s authors. Use permitted under
Creative Commons License Attribution 4.0 International (CC BY 4.0).
Procedural Content Generation (PCG) aims to deliver
generators that express and produce game content such as
behaviors, game mechanics, virtual worlds, dungeons, levels,
narratives or stories. In AI, the study of general game playing
requires Game Description Languages (GDLs) as a testbed
for algorithms that play many games well. Education or
Game-Based Learning (GBL) proposes languages that help
educators express lessons and training material for helping
learners master a subject, such as programming or game
design. Languages are needed for a myriad of reasons, and are
crucial components of research platforms, methodologies,
experimental setups and case studies.</p>
      <p>Unfortunately, developing the necessary language
prototypes comes at a high cost. Researchers and developers
spend a considerable amount of time and effort on
developing and maintaining languages, generators and tools. Several
recurring technical challenges present obstacles that
prevent them from rapidly creating high quality language
prototypes. It is not commonly known that this type programming
is called metaprogramming, and that language prototypes
for analyzing and transforming the source code of other
programs are metaprograms. To alleviate and speed-up
prototyping efforts, developers require appropriate meta-tooling.</p>
      <p>In this position paper, we argue for collaborative
multidisciplinary research and development of languages and
tools that tackle research challenges related to game
design and development. In particular, we pose that language
workbenches and metaprogramming techniques may be key
to advancing multi-disciplinary research in this area. These
tools can be leveraged to support the practice of
metaprogramming. Metaprogramming techniques can help
developers speed-up the construction of language prototypes, raise
the quality, bridge technological spaces and combine the
state-of-the-art in novel language-centric solutions.</p>
      <p>First, we detail our position in the context of, and based
on, a previously published research vision. Next, we discuss
three illustrative examples that apply the langue workbench
Rascal. Each example discusses the creation of a proof of
concept for an ongoing master project at the University of
Amsterdam in collaboration with Centrum Wiskunde &amp;
Informatica. We discuss selected challenges and demonstrate
how to leverage Rascal’s language features in creating
relatively small prototypes that serve our research needs.
1. First, we discuss studying PuzzleScript, an online script
language and game engine that offers a concise expressive
notation for designing a wide variety of puzzle games.
We demonstrate how to reverse engineer its JavaScript
implementation into a concise Rascal prototype for studying
its design space, analyzing the qualities of existing games,
and generating new ones using patterns and metrics.
2. Next, we discuss improving Ludoscope, a language and
tool for level generation that has been successfully applied
in the Unexplored series. We present ongoing work that
aims to add support for debugging, content orchestration
and improved quality assurance by combining constraints
with transformative grammars.
3. Finally, we present a live interactive visualization
prototype, achieved by combining meta-programming in
Rascal with Unity 3D. We illustrate how the synthesis of these
domain specific workbenches, and how modular language
creation and analysis could support game play.</p>
      <p>We conclude with reflections on threats to validity and
challenges and opportunities for future collaboration.</p>
    </sec>
    <sec id="sec-2">
      <title>Research Vision</title>
      <p>We reiterate a concise version of the research vision that
appears as part of a systematic mapping study on languages of
games and play, which has been previously published as:
van Rozen, R. 2021. Languages of Games and Play: A
Systematic Mapping Study. ACM Computing Surveys 53(6).</p>
      <p>The reader can navigate and explore the map’s interactive
website at the following url: https://vrozen.github.io/LoGaP/</p>
      <sec id="sec-2-1">
        <title>Languages of Games and Play</title>
        <p>Languages of games and play are language-centric
approaches for tackling challenges and solving problems
related to game design and development. We propose
studying existing languages and creating new ones. Two central
hypotheses drive this research. We formulate a general and
a specific hypothesis:
1. Languages, structured notations, patterns and tools can
offer designers and developers theoretical foundations,
systematic techniques and practical solutions they need to
raise their productivity and improve the quality of games
and play.
2. “Software” languages (and specifically domain-specific
languages) can help automate and speed-up game design
processes.</p>
        <p>Languages of games and play exist in many shapes and
forms. The next section describes a technical point of view
that we explore in more detail in this paper, and which also
details and motivates the second more specific hypothesis.</p>
      </sec>
      <sec id="sec-2-2">
        <title>Domain-Specific Languages</title>
        <p>We aim to deliver solutions that automate game design
and speed-up game development with so-called
DomainSpecific Languages (DSLs), an approach originating in the
field of Software Engineering. Van Deursen et al. define the
term as follows:
“A Domain-Specific Language is a programming language
or executable specification language that offers, through
appropriate abstractions and notations, expressive power
focused on, and usually restricted to, a particular problem
domain.” (van Deursen, Klint, and Visser 2000)</p>
        <p>
          DSLs have several compelling benefits. They have been
successfully created and applied to boost the productivity of
domain-experts and raise the quality of software solutions.
For instance, in areas like file carving in digital forensics
          <xref ref-type="bibr" rid="ref26 ref29 ref37 ref7">(van den Bos and van der Storm 2011)</xref>
          , engineering financial
products
          <xref ref-type="bibr" rid="ref32">(van Deursen, Klint, and Visser 2000)</xref>
          , and
controlling lithography machines
          <xref ref-type="bibr" rid="ref28">(Tikhonova et al. 2013)</xref>
          .
        </p>
        <p>
          DSLs divide work and separate concerns by offering
domain-experts ways to independently evolve and maintain
a system’s parts. Typically, DSLs raise the abstraction level
and incorporate domain-specific terminology that is more
recognizable to its users. Powerful language workbenches
enable analyses, optimizations, visualizations
          <xref ref-type="bibr" rid="ref9">(Erdweg et al.
2013)</xref>
          , and foreground important trade-offs, e.g., between
speed and accuracy in file carving.
        </p>
        <p>
          Naturally, there are also costs. DSLs are no silver bullet
for reducing complexity. Time and effort go into
developing the right language with features that are both necessary
and sufficient for its users. In addition, a DSL may have a
steep learning curve and users require training
          <xref ref-type="bibr" rid="ref32">(van Deursen,
Klint, and Visser 2000)</xref>
          . While DSLs help users maintain
products, DSLs themselves also demand maintenance and
must evolve to accommodate new requirements, usage
scenarios, restrictions and laws, such as new legislation on
financial transparency or privacy.
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>Visual Programming Languages</title>
        <p>Here we describe our position and motivation. We aim
to empower game designers with DSLs that automate and
speed-up the game design process. We wish to learn how to
facilitate the design space exploration and reduce design
iteration times. We envision a set of complementary visual
languages, techniques and tools that help designers boost
their productivity and raise the quality of games and play.
Challenges include offering abstractions and affordances for:
1. expressing a game’s parts as source code artifacts,
especially interaction-bound game elements, and modifying
these at any given moment.
2. evolving ‘games and play’ by steering changes in the
source code towards new gameplay goals for prototyping,
play testing, balancing, fine-tuning or polishing.
3. obtaining immediate and continuous (live) feedback on a
game’s quality by continuously play testing the effect of
changes on quantified gameplay hypotheses.
4. obtaining feed forward suggestions that focus creative
efforts and assist in exploring alternative design decisions
in a targeted way.
5. forming better mental models for learning to better predict
the outcome on play.</p>
        <p>The mapping study on languages of games and play
provides a good starting point for choosing areas, formulating
questions and charting research trajectories. Next, we
discuss how the necessary language prototypes can be created.</p>
      </sec>
      <sec id="sec-2-4">
        <title>Applying Language Workbenches</title>
        <p>
          We propose an approach to Automated Game Design (AGD)
that leverages language workbenches and metaprogramming
techniques. Many languages exist that facilitate
constructing DSLs, compilers, generators, tools and visualizations.
Erdweg et al. describe the state of the art in language
workbenches
          <xref ref-type="bibr" rid="ref9">(Erdweg et al. 2013)</xref>
          . Examples of
metaprogramming languages and language workbenches include Epsilon,
GemocStudio, Meta-Edit+, MPS, Racket, Rascal, Spoofax
and Xtext. These tools and techniques are part of
Programming Language research and a subject of Software
Language Engineering
          <xref ref-type="bibr" rid="ref15">(La¨mmel 2018)</xref>
          . We argue they provide
an indispensable means in prototyping languages, bridging
the gap between technological spaces and combining the
state-of-the-art in novel language-centric solutions.
        </p>
        <p>
          Previously, several authors have advocated the use of
generic language technology, and demonstrated its power in
relatively small, illustrative and educational examples
          <xref ref-type="bibr" rid="ref33">(van
Rozen 2021)</xref>
          . For instance,
          <xref ref-type="bibr" rid="ref37">Walter and Masuch (2011)</xref>
          discuss how to integrate DSLs into the game development
process. Maier and Volk (2008) report teaching experiences on
applying DiaMeta, an EMF-based language workbench for
creating visual DSLs, e.g., for level editors for classic games
such as PacMan and the platform game Pingus. Insights
include that metamodeling has a steep learning curve and that
the proposed approach speeds-up game prototyping.
          <xref ref-type="bibr" rid="ref10">Flatt
(2012)</xref>
          demonstrates in a tutorial-like manner how to
create languages in Racket, and describes an illustrative
textadventure DSL for interactive fiction.
        </p>
        <p>We present a more elaborate metaprogramming
perspective that adds a vision on AGD. We discuss three larger
language prototypes, each with distinct goals and applications,
developed for case studies in collaboration with indie game
developers. We share our experiences on applying Rascal.</p>
      </sec>
      <sec id="sec-2-5">
        <title>Applying the Rascal Metaprogramming Language</title>
        <p>Rascal is a programming language that has been
specifically designed by Klint, van der Storm and Vinju to
facilitate metaprogramming (2009a), and to create programs for
source code analysis and manipulation (2009b)1.</p>
        <p>
          Here we discuss how its features can help tackle
recurring technical challenges in language prototyping. For
instance, for parsing text, processing concrete syntax,
defining abstract data types, transforming data, traversing trees,
tracking origins and generating code, to name a few.
Compiler Construction Keeping language designs
simple and concise usually entails separating the translation into
phases, a common practice in compiler construction
          <xref ref-type="bibr" rid="ref1">(Aho,
Sethi, and Ullman 1986)</xref>
          . Therefore, developers have to
construct staged compilers using grammars, datatypes and
visitors that analyze and transform programs step by step, e.g.,
for parsing, checking contextual constraints, and
optimizing and generating code. Rascal provides functions, pattern
matching and the visit expression for separating code into
cases, and traversing trees in a concise manner. In addition,
the builtin loc datatype provides an vital means for origin
        </p>
        <sec id="sec-2-5-1">
          <title>1https://www.rascal-mpl.org</title>
          <p>
            tracking
            <xref ref-type="bibr" rid="ref30">(van Deursen, Klint, and Tip 1993)</xref>
            , tracing source
locations over successive transformations.
          </p>
          <p>Bridging the Gap between Technological Spaces
Translations from one formalism to another are often needed for
bridging the gap between technological spaces, e.g., for
applying model-checkers, SMT solvers and ASP for
calculating results or proofs, or libraries or algorithms written in a
different formalism In addition, it may be necessary to
separate games and tool ecosystems into modular components
across platforms for reusing game engines, visual
simulations, browsers, and other components.</p>
          <p>Rascal provides the ‘glue’ we need to put these
components together. For instance, string templates provide a
means to write concise code generators. Rascal offers many
libraries, e.g., JSON and CSV, but others can be easily added,
either natively or by wrapping Java methods. We will
discuss bridging the gap between Java-based Rascal and Unity
3D, which is Mono-based, in the context of code puzzles.
Formalizing Language Semantics Unfortunately,
precise program analyses are impossible without formal
language semantics, e.g., for simulating the effects on dynamic
user interactions and play. Existing languages may lack
formalizations altogether, which complicates efforts on reverse
engineering, and prevents reusing and extending tools in
successive case studies. In this paper, we study two
existing languages PuzzleScript and LudoScope. The prototypes
we describe represents necessary steps for further study.
Creating Interactive User Interfaces Usually, intended
language users are creative experts whose focus is on game
design or content creation. These users need well-designed
interactive visual interfaces for authoring and debugging
programs, e.g., for mixed-initiative co-creative design and
procedural content generation. Visual debuggers may also
require embeddable game engines with APIs for remote
access. Rascal enables creating web-based interfaces using its
Salix framework2. The prototypes we will discuss currently
still have an Eclipse interface that obtains syntax
highlighting from the respective grammars, which is a quick way to
start. Next, we discuss three illustrative language prototypes,
and show that Rascal has many built-in features we need.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Analysis and Generation of PuzzleScript</title>
      <p>
        A key challenge in Automated Game Design is defining
languages whose semantics directly describe playful
affordances. One way to approach this challenge is studying
existing tiny online game engines
        <xref ref-type="bibr" rid="ref39">(Warren 2019)</xref>
        for
combinatorial games such as card games and puzzle games.
      </p>
      <p>
        Here, we discuss a study of PuzzleScript, identified as
Language 91 in
        <xref ref-type="bibr" rid="ref33">(van Rozen 2021)</xref>
        , an online game engine
that offers a concise expressive notation for defining a wide
variety of puzzle games. We reverse engineer its JavaScript
implementation (referred to here as the ‘original’) into a
concise Rascal prototype for studying its design space,
analyzing the qualities of existing games and generating new
ones using patterns and metrics.
      </p>
      <sec id="sec-3-1">
        <title>2https://github.com/usethesource/salix</title>
        <p>
          LPuzzleScript
genre-specific / engine / practice
PuzzleScript is an online textual puzzle game design language and interpreter created by Stephen Lavelle using JavaScript and
HTML5/CSS1. PuzzleScript game levels are tile maps populated by objects (named sprites of 5x5 pixels) that can move and collide,
and whose game logic is defined as a set of rewrite rules. Figure 1 shows an example where the objective is to push crates into place.
When the player collides with a crate, both directionally move if possible. The sources are released under the MIT license2.
          <xref ref-type="bibr" rid="ref17">Lim and
Harell (2014)</xref>
          present an approach for automated evaluation and generation of PuzzleScript videogames and propose two heuristics.
The first, level state heuristics, determines how close the state of given level is to completion during gameplay. The second, ruleset
heuristics, evaluates rules defining a videogame’s mechanics and assesses them for playability.
          <xref ref-type="bibr" rid="ref23">Naus and Jeuring (2016)</xref>
          propose the
heuristicHint an algorithm for optimized heuristics search, and create a DSL for expressing rule-based problems. They apply the
algorithm to PuzzleScript and solve Sokoban levels.
          <xref ref-type="bibr" rid="ref36">Vermeulen (2018)</xref>
          creates a feature model of PuzzleScript mechanics and shows he
can use the model to analyze existing rules and generate new ones. Osborn et al. apply Playspecs (Language 57).
1https://www.puzzlescript.net (visited August 17th 2021)
2https://github.com/increpare/PuzzleScript (visited August 17th 2021)
=======
SOUNDS
=======
Crate MOVE 36772507
================
COLLISIONLAYERS
================
Background
Target
Player, Wall, Crate
======
RULES
======
[&gt; Player |
        </p>
        <p>Crate] -&gt; [&gt;
Player |&gt;
Crate]
==============
WINCONDITIONS
==============
All Target on Crate
=======
LEVELS
=======
####..
#.O#..
#..###
#@P..#
#..*.#
#..###
####..
######
#....#
#.#P.#
#.*@.#
#.O@.#
#....#
######
(b) First level
(c) Second level
(a) Source code with dynamic dynamic syntax highlighting of sprites</p>
        <sec id="sec-3-1-1">
          <title>Parsing PuzzleScript</title>
          <p>We aim to study all existing PuzzleScript games and
facilitate designing new ones. Therefore, we need a parser. The
original JavaScript parser is hand-crafted and line-based,
and comprises 1065 Lines of Code (LOC). We instead
provide a grammar for PuzzleScript, composed of just 50 LOC
of Rascal code3. Figure 2 shows lexicals, symbols consisting
of sequences of characters that are not interrupted by layout
symbols. For conciseness we omit keywords here. Figure 3
shows the syntax, a literal description of game definitions
that consist of the following sections.</p>
          <p>3https://github.com/ClementJ18/PS
1 layout LAYOUTLIST = LAYOUT* !&gt;&gt; [ntnrn ] !&gt;&gt; ”(”;
2 lexical LAYOUT //layout consists of
3 = [ntnrn ] //tab, carriage return and space (but not line break)
4 j ˆComment LBS //solitary comments
5 &gt; Comment; //comments
6 lexical Comment = @category=”Comment” ”(” (![()]*jComment)”)”;
7 lexical LB = [nn];
8 lexical LBS = LB+ !&gt;&gt; ”nn”;
9 lexical DELIM = [=]+;
10 lexical ID = [a−z0−9.A−Z]+ !&gt;&gt; [a−z0−9.A−Z] n Kwds;
11 lexical KeyChar = [a−zA−Z.!@#$%&amp;*];
12 lexical LegendKey = KeyChar+ !&gt;&gt; KeyChar n Kwds;
13 lexical SpriteLine = ”nn” &lt;&lt; [0−9.]+ !&gt;&gt; [0−9.] n Kwds;
14 lexical Pixel = [a−zA−Z.!@#$%&amp;*0−9];
15 lexical LevelLine = ”nn” &lt;&lt; Pixel+ !&gt;&gt; Pixel n Kwds;
16 lexical String = ![nn]+ &gt;&gt; [nn];
17 lexical SndIndex = [0−9]j”10” !&gt;&gt; [0−9]j”10”;
18 lexical Directional = [n&gt;n&lt;ˆv] !&gt;&gt; [a−z0−9.A−Z];
Osborn et al. introduce PlaySpecs, regular expressions for
specifying and analyzing desirable properties of game play
traces, sequences of player actions. PlaySpecs are validated
with the PuzzleScript engine, which is itself described as
Language 91, and Prom Week, a social simulation puzzle
game. The TypeScript sources of PlaySpecs are released
under the MIT license (visited August 17th 2021)1.</p>
          <p>1https://github.com/JoeOsborn/playspecs-js</p>
          <p>Objects describe named sprites. Legend enables users to
define short-hand symbols for expressing levels
(rectangular tile maps) using the assigned characters. Sounds can be
added for special effects. Collision layers determine which
objects collide, enabling or disabling their movement. Rules
define how players can interact with the objects on the tile
map, and how events trigger object movement. These are
rewrite rules whose left hand side is a pattern that must
match on the game’s current state for the rule to trigger. The
right hand side specifies a result in case the rule succeeds.</p>
          <p>Our grammar, which to the best of our knowledge is the
first complete syntax formalization, greatly simplifies
constructing PuzzleScript prototypes. With the exception of a
few corner cases, it already passes a test suite composed of
83 existing games. Most importantly, it is more compact and
readable, and easier to maintain and reuse than the original.</p>
        </sec>
        <sec id="sec-3-1-2">
          <title>Providing Errors and Warnings</title>
          <p>Developers require feedback and warnings, ideally ‘live’
during coding, for improving their designs. The original
JavaScript implementation solely provides syntax coloring
as feedback. Once the code is compiled, it provides more
explicit and comprehensive feedback. However, because of
the single phase parsing, errors tend to cascade forcing the
compilation to abort before the game is fully checked.</p>
          <p>We introduce a static checker for improving live
feedback, a contextual analysis phase that runs after every
change developers make to the code. On every change, it
parses the code, annotates the parse tree and visualizes errors
and warnings in the IDE. Developers obtain a wide variety
of messages, ranging from critical errors (invalid syntax,
undefined references and duplicate definitions) to informative
feedback, e.g., as shown in Figure 4.</p>
          <p>
            LLudoscope
generic / engine / practice
Lindenmayer systems (or L-systems) are generative grammars that were originally intended for describing plant growth patterns
            <xref ref-type="bibr" rid="ref18">(Lindenmayer 1968)</xref>
            and are now also used for PCG.
            <xref ref-type="bibr" rid="ref5">Dormans (2010)</xref>
            investigates strategies for generating levels for action adventure
games, and proposes mission and spaces as two separate structures. He analyzes a Zelda game level, and generates its missions and
spaces using transformative grammars. Ludoscope is a tool for designing procedurally generated game levels based on these
principles. In Ludoscope, level transformation pipelines step-by-step transform level content, gradually adding detail, dungeons, enemies,
encounters, missions, etc. These pipelines consist of grammar rules that work on content represented as tile maps, graphs, Voronoi
Diagrams and Strings.
            <xref ref-type="bibr" rid="ref12">Karavolos et al. (2015)</xref>
            explore applying Ludoscope in the design of two distinct pipelines that generate
dungeons of a rogue like game and platform levels of a metroidvania game. Van Rozen and Heijn propose two techniques for analyzing
the quality of level generation grammars called MAD and SAnR (see Language 58).
query
          </p>
          <p>The analysis consists of sub-phases with progressively
stricter rules, starting with the parsing. This allows isolating
errors, and ensuring they do not affect subsequent phases.</p>
          <p>Rascal’s functions can be overloaded with pattern signatures
to act like an extensible switch statement. We use these
‘partial functions’ for easily adding new checker cases.</p>
        </sec>
        <sec id="sec-3-1-3">
          <title>Preventing Bad Gameplay</title>
          <p>Predicting the outcome of changing a game’s rules on play
is hard in general. In PuzzleScript, Victory Conditions and
Rules define how the player interacts with the game.
Changing a rule can cause levels to become impossible to win or,
instead make them trivial to solve. Unfortunately, it is not
always possible to foresee how those changes impact levels.</p>
          <p>As part of future work, we aim to enable making more
informed design decisions by adding a dynamic analyzer,
a process capable of playing games, solving trivial puzzles,
and analyzing potentially negative impact of changes.</p>
        </sec>
        <sec id="sec-3-1-4">
          <title>Outlook and Ongoing Work</title>
          <p>Our PuzzleScript prototype is more maintainable and
extensible than the original JavaScript implementation. In
particular Rascal’s pattern matching and meta-programming
capabilities proved useful in creating a concise prototype. We
continue to develop a tool that empowers game designers in
writing more robust code and creating better games.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>A Ludoscope Debugger</title>
      <p>
        Procedural level generation studies how to generate high
quality game levels populated with items, quests, enemies
for unlikely encounters, astonishing stories and epic
adventures. LudoScope, identified as Language 36 in
        <xref ref-type="bibr" rid="ref33">(van Rozen
2021)</xref>
        , is a grammar-based language and tool that offers
powerful capabilities for creating diverse generators.
Language
58 LMAD
      </p>
      <p>generic / engine / practice
Van Rozen and Heijn study Ludoscope (Language 36) and
address quality issues of grammar-based level generation.
They propose two techniques for improving grammars to
generate better game levels. The first, Metric of Added
Detail (MAD), leverages the intuition that grammar rules
gradually add detail, and uses a detail hierarchy that indicates for
calculating the score of rule applications. The second,
Specification Analysis Reporting (SAnR) proposes a language
for specifying level properties, and analyzes level generation
histories, showing how properties evolve over time.
LudoScope Lite is a prototype that demonstrates the techniques1.</p>
      <sec id="sec-4-1">
        <title>1https://github.com/visknut/LudoscopeLite</title>
        <p>Currently, due to the lack of research, the tool has very
limited debugging capabilities. As a result, level designers
have to spend a great deal of time ‘eyeballing’ generated
game levels. We aim to improve grammar-based generators
in general, and study LudoScope in particular. Here, we
discuss ongoing work on LudoScope Lite, a prototype written
in Rascal for studying grammar-based generators.</p>
        <sec id="sec-4-1-1">
          <title>Creating a Manageable Language Prototype</title>
          <p>Instead of supporting every Ludoscope language feature, we
redesign a core portion of the language to study its
properties in isolation. We focus on transforming tile maps and
graphs, and design an understandable textual syntax for
creating pipelines for study, e.g., Figure 5. Therefore, we have
no need for its visual interface and we only support the
language features relevant to our question. Our code base is not
yet feature-complete but has a manageable size of 1.3 KLOC
compared to Ludoscope’s 21 KLOC of C#.</p>
        </sec>
        <sec id="sec-4-1-2">
          <title>Integrating ASP with Grammar-Based Approaches</title>
          <p>
            Grammar-based approaches for level generation enable
great flexibility, but are notoriously hard to control.
Answer Set Programming (ASP) on the other hand,
guarantees constraints are met. For instance,
            <xref ref-type="bibr" rid="ref26">Smith and Mateas
(2011)</xref>
            demonstrate through the Chromatic Maze written in
ASP (called design space) how users can redefine the game
spaces by iteratively adding constraints to the AnsProlog
program. We want the best of both worlds. Even though the
current version of our prototype does not yet fully combine
the two, our study borrows concepts from ASP. We still
consider translating grammars to ASP using Rascal.
          </p>
        </sec>
        <sec id="sec-4-1-3">
          <title>Adding Language Features for Error Handling</title>
          <p>One crucial issue of LudoScope remains the lack of error
handling. When a level generation pipeline generates
‘useless’ content, e.g. a map that cannot be crossed by the player,
it is impossible to know how or where the error occurred.
We borrow the concept of constraints from ASP to guide the
generation and offer a way to trace back errors by logging
them when they happen.</p>
          <p>This is achieved by the constraint seen in line 30 in
Figure 5. This feature can not only stop the generation from
happening, but also alter it at times if the designer wishes
so. At the same time, the constraints act as a form of fail-safe
for when the generation derails in an unwanted direction.</p>
          <p>Constraints that orchestrate content generation, are
labelled as resolvable. We offer these along with their
respective handlers as a way for the designer to bypass
unexpected/unwanted content at run time. The constraints are
periodically checked and whenever a module breaks one an error
is shown. The error logs are enhanced by Rascal’s capability
of storing source locations and look like this:</p>
          <p>Error message: addWall in module firstModule at
[@location=jproject://generatorv2/src/tests/test1/test.lmj
(934,1,&lt;68,24&gt;,&lt;68,25&gt;)] destoyed path:path</p>
        </sec>
        <sec id="sec-4-1-4">
          <title>Outlook and Ongoing Work</title>
          <p>LudoScope Lite’s new syntax, facilitated by Rascal’s
capabilities, paves the path to more accessible tools for content
generation and transformative grammars. The addition of
constraint-based checking gives the designer the control and
freedom to explore and create without the risk of
accidentally degrading quality or creating unplayable levels. These
constraints can make modules more composable and allow
for better content orchestration. Ultimately, our approach
can significantly improve the state-of-the-art in error
handling and debugging for grammar-based level generation.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>A Framework for Educational Code</title>
    </sec>
    <sec id="sec-6">
      <title>Visualizations and Game Mechanics</title>
      <p>A key challenge in programming education is providing
visualizations that assist learners in rapidly obtaining
feedback, exploring alternatives, learning from mistakes,
improving code quality, and forming mental models. We
hypothesize that suitable interactive 3D visualizations of code
structures and execution can help novice programmers to
form these mental models more easily.</p>
      <p>Here, we introduce the live interactive code puzzle
visualization (linco-puvi) framework45, a research platform
that enables experimentation with novel methods for
education. The framework offers an introductory programming
language for describing code exercises It furthermore
features a language independent visualization format and
editor, and live visualization application</p>
      <p>Educators can use these formalisms to compose code
puzzles as a combination of code exercise and live
interactive visualization. Learners can play code puzzles as
games with fixed mechanics whose educational content can
be adjusted and varied for improving learning trajectories.</p>
      <sec id="sec-6-1">
        <title>State-of-the-art in visual assistance</title>
        <p>We briefly describe related work that uses visual
components in aiding programming. The first related area is
learn</p>
        <sec id="sec-6-1-1">
          <title>4Textual Components: https://github.com/reijne/solvey</title>
          <p>
            5Visual Components: https://github.com/reijne/codeVisuals
ing and teaching through game play and development.
Findings have shown that computer games can be used to acquire
certain cognitive abilities and improve understanding in
presented topics
            <xref ref-type="bibr" rid="ref27">(Tang, Hanneghan, and El Rhalibi 2009)</xref>
            .
          </p>
          <p>
            This is supported by mental model matching theory,
which states that humans develop mental models of games
through play, which can transfer to understandings of
academic contexts
            <xref ref-type="bibr" rid="ref2 ref35">(Boyan, McGloin, and Wasserman 2018)</xref>
            .
Current approaches using game playing and/or designing
often utilize fully fletched general programming languages,
sometimes more than one per course
            <xref ref-type="bibr" rid="ref16">(Leutenegger and
Edgington 2007)</xref>
            , which are not tailored for introductory
programming
            <xref ref-type="bibr" rid="ref22">(McIver and Conway 1996)</xref>
            .
          </p>
          <p>
            Another approach for visual assistance is augmenting
development environments by presenting the user with a visual
interface beside one for altering the program. Alice
            <xref ref-type="bibr" rid="ref4">(Conway et al. 2000)</xref>
            and Kodu
            <xref ref-type="bibr" rid="ref19">(MacLaurin 2011)</xref>
            offer a visual
aid in 3D, and utilize a set of possible methods to change
the current state of the visualization. Scratch
            <xref ref-type="bibr" rid="ref21">(Maloney et al.
2010)</xref>
            is a visual programming language using a drag and
drop system. Its set of command blocks offers control over
2D-graphical objects in a separate view.
          </p>
          <p>The state-of-the-art showcases the effect of code
execution by coupling the execution of commands to static and/or
dynamic parts of the visualization. In contrast, our approach
also enables visualizing the structure of the code itself.</p>
          <p>The live visualization is created directly from the abstract
syntax tree (AST), of the student’s written code.</p>
        </sec>
      </sec>
      <sec id="sec-6-2">
        <title>Divide and Conquer</title>
        <p>
          The approach is subdivided into (A) the textual component,
for which we have chosen the metaprogramming language
workbench Rascal, which allows the creation of
modularized domain specific languages, and offers tools for code
extraction, analysis and transformation
          <xref ref-type="bibr" rid="ref13 ref14">(Klint, van der Storm,
and Vinju 2009b)</xref>
          . These properties make for an approach
that enables maintaining and evolution of the presented
framework. (B) The visual component, for which we have
chosen the 3D game engine Unity. This well-documented,
performant, popular and free game engine allows for the
creation of custom game worlds and in-game or editor-like
interfaces.
        </p>
      </sec>
      <sec id="sec-6-3">
        <title>Bridging the gap between Rascal and Unity</title>
        <p>In order to accurately visualize the live state of code we need
to bridge from Rascal over to Unity. This is accomplished by
employing clever extraction of data through Rascal
metaprogramming, which is condensed into string format. The string
parameter is then used to create a JSON remote process call,
using the sophisticated JSON library. This call is sent over
TCP to the running application (see Figure 6).</p>
        <p>@doc fRascal: Create a Remote Process Call to send over the Socket,
using JSON rpc format.g
str remoteCall(str method, str param, bool close) f
rpc = (”method”: method,
”param”: param,
”close”: close);
return asJSON(rpc);
1
Solvey
(c) TypeCheck
Showey</p>
        <p>CreateVisualisation
Save Load</p>
        <p>Import</p>
        <p>(d) Evaluate
(b) Traverser</p>
        <p>Sceney</p>
        <p>Visualise</p>
        <p>SpawnErrorEnemies
CreateFallingBranches
Separating the concerns into modules is where Rascal shines
(see Figure 7). We have designed a modular DSL for
introductory programming, with the necessary modules to allow
for (a) the creation of custom visualizations. This requires
the recursive extraction of the components of the language
Algebraic Data Type, which is done using the visit
expression6 in Rascal, that features built in traversals of a tree.</p>
        <p>The (b) traverser of an AST is generated using
Rascal’s powerful string templating7 that allows for inclusion of
statements. In the (c) Type Checking module the errors are
gathered along with their (source) location8, which in turn
allows the game to be updated by spawning enemies where
the errors occur. And finally the (d) Evaluation module
interprets the code, and is used to gather which control flow
is taken. This information lets the branches in the
visualization fall when stepped on if that branch is not existent in the
executed path.</p>
      </sec>
      <sec id="sec-6-4">
        <title>Full pipeline and Interaction</title>
        <p>The puzzle solver is presented with the two before
mentioned views, namely a textual editor and an interactive
6https://docs.rascal-mpl.org/unstable/Rascal/#ExpressionsVisit</p>
        <p>7https://docs.rascal-mpl.org/unstable/Recipes/#CommonStringTemplate
8https://docs.rascal-mpl.org/unstable/Rascal/#Values-Location
game. The Solvey language is used to code out
(simple) exercises using in- and output of expressions. The
following snippet is used to demonstrate a simple
exercise, where the solution contains an error. A modulo
operation will result in a number variable, which does
not fit the conditional expression of an if statement. The
solver will be presented with an error message along
with a source location, while at the same time having
the interactive game reflect the code by spawning the
visual representation based on the AST piped through
the Showey definition supplied by the puzzle creator.
1 // Output true if the received number is
an even number and false otherwise.
number received
received := input()
if (received % 2)</p>
        <p>output(true)
else</p>
        <p>output(false)
end if</p>
        <p>A ShoweyDefinition determines what a scene looks like.
It contains general variables, a list of created 3D artifacts
(blockies) and the mapping from code to blockies. This
definition is created using the interface shown in Figure 8.</p>
        <p>In this instance we have chosen to launch the shooter case
study. The game, built on top of the Showey visualization,
spawns Error Enemies at error locations. These enemies
break the code and attempt to hit the player, see Figure 9.</p>
      </sec>
      <sec id="sec-6-5">
        <title>Outlook and Ongoing Work</title>
        <p>We have described a novel, modular, extensible research
platform for static and dynamic code visualization that
combines Rascal and Unity. Educators can use its notation for
creating a wide variety of code exercises, study how
effective adjustable visualizations are, and iteratively improve
learning trajectories.</p>
        <p>We are opening the following possible paths into the
future: (a) Find effective visualizations and mechanics to aid
the programmer in understanding of underlying code
concepts. This would be possible by performing action research,
including this framework into the curriculum of an
introductory programming course. (b) Creating entire games, where
the user gets to explore coding in a novel manner. And (c)
enable a bi-directional transformation such that the game
world can trigger source code transformations, effectively
making it a 3D visual programming language.</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Discussion</title>
      <p>Here we briefly reflect on threats to validity and on how to
obtain a roadmap to collaborative research and development.</p>
      <sec id="sec-7-1">
        <title>Threats to Validity</title>
        <p>Our position is based on an extensive mapping study.
However, we have discussed just three examples that leverage
Rascal in language prototyping. We highlighted selected
challenges and design decisions for illustrating benefits.
Here, we reflect on costs and threats to validity.</p>
        <p>Like other languages, Rascal has a learning curve, and
mastering its concepts can be challenging. Rascal is used in
research and education at several institutions, e.g., at
Centrum Wiskunde &amp; Informatica, the University of
Amsterdam, the Open University, the University of Groningen and
the TU Eindhoven, to name a few.</p>
        <p>In general, it is hard to choose the right tool for the job.
When programming in Rascal, finding the right language
feature can challenging, especially to novices. The built-in
Tutor, provides a language reference and recipes that help
choosing an approach to a particular challenge9. Rascal’s
developers also actively answer questions on stack overflow.</p>
        <p>In addition, Rascal itself is an academic language that
regularly undergoes overhauls and maintenance. Naturally,
this can break features and existing programs. Spin-off
SWAT.engineering uses Rascal in an industrial context.</p>
        <p>
          Finally, it is not clear to what extent our experiences with
Rascal hold for language workbenches in general.
Comparing language workbenches has been an activity of the
language workbench challenge
          <xref ref-type="bibr" rid="ref9">(Erdweg et al. 2013)</xref>
          .
Comparing them on game languages could be an opportunity.
9The Tutor is also available online: https://docs.rascal-mpl.org
Of course, our argument can be further strengthened with
additional studies and comparisons that weigh costs and
benefits. Next, we discuss on how to approach this.
        </p>
      </sec>
      <sec id="sec-7-2">
        <title>Challenges, Opportunities and Road Map</title>
        <p>Here we reflect on obtaining a road map that brings together
researchers, developers and designers in multi-disciplinary
language-centric research that explores what informs the
design and construction of good games.</p>
        <p>
          Languages often represent months or years of research
and development. Unfortunately, an analysis of success
factors in revealed a ‘grave yard’ of dead language prototypes
          <xref ref-type="bibr" rid="ref33">(van Rozen 2021)</xref>
          . Key success factors include: 1) multiple
research angles and language reuse; 2) collaboration with
industry; 3) available language prototypes; 4) Wiki pages,
blogs, example materials, tutorials and workshops; 5) active
online user communities; and 6) mature evaluation research,
following solution proposals and validation research.
        </p>
        <p>
          Opportunities for languages in AGD exist at the
intersection of research areas
          <xref ref-type="bibr" rid="ref33">(van Rozen 2021)</xref>
          . Ontologies,
typologies and game design patterns are sources on what games
are, and how they can be understood. Content-centric
challenges include: 1) integrating subject matter knowledge; 2)
balancing and fine-tuning game mechanics; 3) generating
varied and interesting game levels; 4) authoring realistic
NPC behaviors; and 5) integrating narratives and story plot.
        </p>
        <p>Finally, technical view points on how to develop
languages and tools include 1) leveraging gameplay metrics
and analytics to relate content, player actions and
gameplay; 2) devising understandable visual notations inspired by
educative languages; 3) leveraging AI, in particular general
game playing, for analysis and play testing; 5) applying and
reusing techniques from model-driven engineering; and 6)
leveraging language work benches, as we have also argued.</p>
        <p>Each of these areas, subjects and approaches present
opportunities for future research and development.</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Conclusion</title>
      <p>In this position paper, we have proposed studying what
informs the design and construction of good games by
means of metaprogramming techniques and language work
benches. We have argued that these tools can help
language developers speed-up the construction of language
prototypes, raise the quality, bridge technological spaces and
combine the state-of-the-art in novel language-centric
solutions. We have discussed tackling technical challenges in
three ongoing master projects that leverage Rascal for rapid
language prototyping. Finally, we have reflected on
challenges and opportunities for embarking on first-person
realtime collaborative metaprogramming adventures.</p>
    </sec>
    <sec id="sec-9">
      <title>Acknowledgments</title>
      <p>We thank the organizers for hosting the 1st PLIE workshop.
In addition, we thank the anonymous reviewers for their
insightful comments that helped improve our paper. Finally,
we thank the Master of Software Engineering of the
University of Amsterdam for supporting our participation.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <surname>Aho</surname>
            ,
            <given-names>A. V.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Sethi</surname>
          </string-name>
          , R.; and
          <string-name>
            <surname>Ullman</surname>
            ,
            <given-names>J. D.</given-names>
          </string-name>
          <year>1986</year>
          . Compilers: Principles, Techniques, and
          <string-name>
            <surname>Tools</surname>
          </string-name>
          .
          <source>Addison-Wesley. ISBN 0-201-10088-6.</source>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <surname>Boyan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>McGloin</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Wasserman</surname>
            ,
            <given-names>J. A.</given-names>
          </string-name>
          <year>2018</year>
          .
          <article-title>Model matching theory: A framework for examining the alignment between game mechanics and mental models</article-title>
          .
          <source>Media and Communication</source>
          <volume>6</volume>
          (
          <issue>2</issue>
          ). doi:https://doi.org/10.17645/mac.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          v6i2.
          <fpage>1326</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <surname>Conway</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Audia</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ; Burnette,
          <string-name>
            <given-names>T.</given-names>
            ;
            <surname>Cosgrove</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ; and
            <surname>Christiansen</surname>
          </string-name>
          ,
          <string-name>
            <surname>K.</surname>
          </string-name>
          <year>2000</year>
          .
          <article-title>Alice: lessons learned from building a 3D system for novices</article-title>
          .
          <source>In Proceedings of the SIGCHI conference on Human factors in computing systems.</source>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <surname>Dormans</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <year>2010</year>
          .
          <article-title>Adventures in Level Design: Generating Missions and Spaces for Action Adventure Games</article-title>
          .
          <source>In Proceedings of the 2010 Workshop on Procedural Content Generation in Games, PCG2010</source>
          . ACM. doi:
          <volume>10</volume>
          .1145/1814256.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <surname>Dormans</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <year>2011</year>
          .
          <article-title>Level Design as Model Transformation: A Strategy for Automated Content Generation</article-title>
          .
          <source>In Proceedings of the 2nd Workshop on Procedural Content Generation in Games, PCG</source>
          <year>2011</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <surname>Dormans</surname>
          </string-name>
          , J.; and
          <string-name>
            <surname>Bakkes</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <year>2011</year>
          .
          <article-title>Generating Missions and Spaces for Adaptable Play Experiences</article-title>
          .
          <source>IEEE Transactions on Computational Intelligence and AI in Games</source>
          <volume>3</volume>
          (
          <issue>3</issue>
          ). doi:
          <volume>10</volume>
          .1109/TCIAIG.
          <year>2011</year>
          .
          <volume>2149523</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <surname>Dormans</surname>
          </string-name>
          , J.; and
          <string-name>
            <surname>Leijnen</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <year>2013</year>
          .
          <article-title>Combinatorial and Exploratory Creativity in Procedural Content Generation</article-title>
          .
          <source>In Workshop Proceedings of the 8th International Conference on the Foundations of Digital Games. SASDG.</source>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <surname>Erdweg</surname>
            ,
            <given-names>S.; Van Der</given-names>
          </string-name>
          <string-name>
            <surname>Storm</surname>
          </string-name>
          , T.; Vo¨lter, M.; et al.
          <year>2013</year>
          .
          <article-title>The State of the Art in Language Workbenches</article-title>
          .
          <source>In Software Language Engineering</source>
          , volume
          <volume>8225</volume>
          <source>of LNCS</source>
          . Springer. doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -02654-1
          <fpage>11</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <surname>Flatt</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <year>2012</year>
          .
          <article-title>Creating Languages in Racket</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>55</volume>
          (
          <issue>1</issue>
          ). doi:
          <volume>10</volume>
          .1145/2063176.2063195.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <string-name>
            <surname>Heijn</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          <year>2018</year>
          .
          <article-title>Improving the Quality of Grammars for Procedural Level Generation: A Software Evolution Perspective</article-title>
          .
          <source>Master's thesis</source>
          , University of Amsterdam.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <string-name>
            <surname>Karavolos</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Bouwer</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ; and Bidarra,
          <string-name>
            <surname>R.</surname>
          </string-name>
          <year>2015</year>
          .
          <article-title>MixedInitiative Design of Game Levels: Integrating Mission and Space into Level Generation</article-title>
          .
          <source>In Proceedings of the 10th International Conference on the Foundations of Digital Games</source>
          ,
          <string-name>
            <surname>FDG</surname>
          </string-name>
          <year>2015</year>
          . SASDG.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <string-name>
            <surname>Klint</surname>
          </string-name>
          , P.; van der Storm, T.; and
          <string-name>
            <surname>Vinju</surname>
            ,
            <given-names>J. J.</given-names>
          </string-name>
          <year>2009a</year>
          .
          <article-title>EASY Meta-programming with Rascal</article-title>
          . In Fernandes, J. M.; La¨mmel, R.; Visser, J.; and
          <string-name>
            <surname>Saraiva</surname>
          </string-name>
          , J., eds.,
          <source>Generative and Transformational Techniques in Software Engineering III - International Summer School</source>
          ,
          <string-name>
            <surname>GTTSE</surname>
          </string-name>
          <year>2009</year>
          .
          <article-title>Revised Papers</article-title>
          , volume
          <volume>6491</volume>
          <source>of LNCS</source>
          . Springer. doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -
          <fpage>18023</fpage>
          -1n 6.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          <string-name>
            <surname>Klint</surname>
          </string-name>
          , P.; van der Storm, T.; and
          <string-name>
            <surname>Vinju</surname>
            ,
            <given-names>J. J.</given-names>
          </string-name>
          <year>2009b</year>
          .
          <article-title>RASCAL: A Domain Specific Language for Source Code Analysis and Manipulation</article-title>
          .
          <source>In Ninth IEEE International Working Conference on Source Code Analysis and Manipulation</source>
          ,
          <string-name>
            <surname>SCAM</surname>
          </string-name>
          <year>2009</year>
          .
          <article-title>IEEE Computer Society</article-title>
          . doi:
          <volume>10</volume>
          .1109/SCAM.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          <article-title>La¨mmel</article-title>
          ,
          <string-name>
            <surname>R.</surname>
          </string-name>
          <year>2018</year>
          . Software Languages: Syntax, Semantics, and Metaprogramming.
          <source>Springer. ISBN 978-3-319- 90798-7</source>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -90800-
          <lpage>7</lpage>
          . URL http:// www.softlang.org/book.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          <string-name>
            <surname>Leutenegger</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Edgington</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <year>2007</year>
          .
          <article-title>A games first approach to teaching introductory programming</article-title>
          .
          <source>In Proceedings of the 38th SIGCSE technical symposium on Computer science education.</source>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          <string-name>
            <surname>Lim</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Harrell</surname>
            ,
            <given-names>D. F.</given-names>
          </string-name>
          <year>2014</year>
          .
          <article-title>An Approach to General Videogame Evaluation and Automatic Generation using a Description Language</article-title>
          .
          <source>In 2014 IEEE Conference on Computational Intelligence and Games</source>
          ,
          <string-name>
            <surname>CIG</surname>
          </string-name>
          <year>2014</year>
          . IEEE. doi:
          <volume>10</volume>
          .1109/CIG.
          <year>2014</year>
          .
          <volume>6932896</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          <string-name>
            <surname>Lindenmayer</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <year>1968</year>
          .
          <article-title>Mathematical Models for Cellular Interactions in Development</article-title>
          .
          <source>Journal of Theoretical Biology</source>
          <volume>18</volume>
          (
          <issue>3</issue>
          ).
          <source>ISSN 0022-5193</source>
          . doi:
          <volume>10</volume>
          .1016/
          <fpage>0022</fpage>
          -
          <lpage>5193</lpage>
          (
          <issue>68</issue>
          )
          <fpage>90079</fpage>
          -
          <lpage>9</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          <string-name>
            <surname>MacLaurin</surname>
            ,
            <given-names>M. B.</given-names>
          </string-name>
          <year>2011</year>
          .
          <article-title>The design of Kodu: A tiny visual programming language for children on the Xbox 360</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          <source>In Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages.</source>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          <string-name>
            <surname>Maloney</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ; Resnick,
          <string-name>
            <given-names>M.</given-names>
            ;
            <surname>Rusk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            ;
            <surname>Silverman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            ; and
            <surname>Eastmond</surname>
          </string-name>
          ,
          <string-name>
            <surname>E.</surname>
          </string-name>
          <year>2010</year>
          .
          <article-title>The scratch programming language and environment</article-title>
          .
          <source>ACM Transactions on Computing Education (TOCE) 10</source>
          (
          <issue>4</issue>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          <string-name>
            <surname>McIver</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Conway</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <year>1996</year>
          .
          <article-title>Seven deadly sins of introductory programming language design</article-title>
          .
          <source>In Proceedings 1996 International Conference Software Engineering: Education and Practice</source>
          . IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          <string-name>
            <surname>Naus</surname>
          </string-name>
          , N.; and
          <string-name>
            <surname>Jeuring</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <year>2016</year>
          .
          <article-title>Building a Generic Feedback System for Rule-Based Problems</article-title>
          . In
          <source>International Symposium on Trends in Functional Programming</source>
          , volume
          <volume>10447</volume>
          <source>of LNCS</source>
          . Springer. doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -14805-8
          <fpage>10</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          <string-name>
            <surname>Osborn</surname>
            ,
            <given-names>J. C.</given-names>
          </string-name>
          <year>2018</year>
          . Operationalizing Operational Logics.
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          <string-name>
            <surname>Osborn</surname>
            ,
            <given-names>J. C.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Samuel</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Mateas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Wardrip-Fruin</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <year>2015</year>
          .
          <article-title>Playspecs: Regular Expressions for Game Play Traces</article-title>
          .
          <source>In Proceedings of Artificial Intelligence and Interactive</source>
          Digital Entertainment,
          <string-name>
            <surname>AIIDE</surname>
          </string-name>
          <year>2015</year>
          . AAAI Press.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          <string-name>
            <surname>Smith</surname>
            ,
            <given-names>A. M.</given-names>
          </string-name>
          ; and Mateas,
          <string-name>
            <surname>M.</surname>
          </string-name>
          <year>2011</year>
          .
          <article-title>Answer Set Programming for Procedural Content Generation: A Design Space Approach</article-title>
          .
          <source>IEEE Transactions on Computational Intelligence and AI in Games</source>
          <volume>3</volume>
          (
          <issue>3</issue>
          ). doi:
          <volume>10</volume>
          .1109/TCIAIG.
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          <string-name>
            <surname>Tang</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ; Hanneghan,
          <string-name>
            <given-names>M.</given-names>
            ; and
            <surname>El Rhalibi</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          <year>2009</year>
          .
          <article-title>Introduction to games-based learning. In Games-based learning advancements for multi-sensory human computer interfaces: Techniques and effective practices</article-title>
          .
          <source>IGI Global.</source>
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          <string-name>
            <surname>Tikhonova</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Manders</surname>
          </string-name>
          , M.; van den Brand, M.;
          <string-name>
            <surname>Andova</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ; and Verhoeff,
          <string-name>
            <surname>T.</surname>
          </string-name>
          <year>2013</year>
          .
          <article-title>Applying Model Transformation and Event-B for Specifying an Industrial DSL</article-title>
          .
          <source>In Proceedings of the 10th International Workshop on Model Driven Engineering, Verification and Validation MoDeVVa</source>
          <year>2013</year>
          , volume
          <volume>1069</volume>
          .
          <article-title>CEUR-WS.org</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          <string-name>
            <surname>van den Bos</surname>
          </string-name>
          , J.; and
          <string-name>
            <surname>van der Storm</surname>
          </string-name>
          , T.
          <year>2011</year>
          .
          <article-title>Bringing Domain-Specific Languages to Digital Forensics</article-title>
          .
          <source>In Proceedings of the 33rd International Conference on Software Engineering</source>
          ,
          <string-name>
            <surname>ICSE</surname>
          </string-name>
          <year>2011</year>
          . ACM. doi:
          <volume>10</volume>
          .1145/1985793.
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          <string-name>
            <surname>van Deursen</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Klint</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Tip</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <year>1993</year>
          . Origin Tracking.
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          <string-name>
            <given-names>J.</given-names>
            <surname>Symb</surname>
          </string-name>
          . Comput.
          <volume>15</volume>
          (
          <issue>5</issue>
          /6):
          <fpage>523</fpage>
          -
          <lpage>545</lpage>
          . doi:
          <volume>10</volume>
          .1016/S0747-
          <volume>7171</volume>
          (
          <issue>06</issue>
          )
          <fpage>80004</fpage>
          -
          <lpage>0</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          <string-name>
            <surname>van Deursen</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Klint</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Visser</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <year>2000</year>
          .
          <article-title>DomainSpecific Languages: An Annotated Bibliography</article-title>
          .
          <source>ACM SIGPLAN Notices</source>
          <volume>35</volume>
          (
          <issue>6</issue>
          ). doi:
          <volume>10</volume>
          .1145/352029.352035.
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          <string-name>
            <surname>van Rozen</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <year>2021</year>
          .
          <article-title>Languages of Games and Play: A Systematic Mapping Study</article-title>
          .
          <source>ACM Computing Surveys</source>
          <volume>53</volume>
          (
          <issue>6</issue>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          <source>doi:10</source>
          .1145/3412843.
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          <string-name>
            <surname>van Rozen</surname>
          </string-name>
          , R.; and
          <string-name>
            <surname>Heijn</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          <year>2018</year>
          .
          <article-title>Measuring Quality of Grammars for Procedural Level Generation</article-title>
          .
          <source>In Proceedings of Foundations of Digital Games</source>
          ,
          <string-name>
            <surname>FDG</surname>
          </string-name>
          <year>2018</year>
          . ACM. doi:
          <volume>10</volume>
          .1145/3235765.3235821.
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          <string-name>
            <surname>Vermeulen</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <year>2018</year>
          .
          <source>Automated Game Generation met Gebruik van Meta-Programming. Bachelor's thesis</source>
          , Hogeschool van Amsterdam.
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          <string-name>
            <surname>Walter</surname>
            , R.; and Masuch,
            <given-names>M.</given-names>
          </string-name>
          <year>2011</year>
          .
          <article-title>How to Integrate DomainSpecific Languages into the Game Development Process</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          <source>In Proceedings of the 8th International Conference on Advances in Computer Entertainment Technology. ACM. doi: 10.1145/2071423</source>
          .2071475.
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          <string-name>
            <surname>Warren</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <year>2019</year>
          .
          <article-title>Tiny Online Game Engines. In Decision and Game Theory for Security -</article-title>
          10th International Conference, GameSec
          <year>2019</year>
          , volume
          <volume>11836</volume>
          <source>of LNCS</source>
          . Springer. doi:
          <volume>10</volume>
          .1109/GEM.
          <year>2019</year>
          .
          <volume>8901975</volume>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>