Genetic Programming (GP) is an heuristic method that can be applied to many
Machine Learning, Optimization and Engineering problems. In particular, it has
been widely used in Software Engineering for Test-case generation, Program
Synthesis and Improvement of Software (GI).
Grammar-Guided Genetic Programming (GGGP) approaches allow the user to refine
the domain of valid program solutions. Backus Normal Form is the most popular
interface for describing Context-Free Grammars (CFG) for GGGP. BNF and its
derivatives have the disadvantage of interleaving the grammar language and the
target language of the program.
We propose to embed the grammar as an internal Domain-Specific Language in
the host language of the framework. This approach has the same expressive power
as BNF and EBNF while using the host language type-system to take advantage of
all the existing tooling: linters, formatters, type-checkers, autocomplete, and
legacy code support. These tools have a practical utility in designing software
in general, and GP systems in particular.
We also present Meta-Handlers, user-defined overrides of the tree-generation
system. This technique extends our object-oriented encoding with more
practicability and expressive power than existing CFG approaches, achieving the
same expressive power of Attribute Grammars, but without the grammar vs target
language duality.
Furthermore, we evidence that this approach is feasible, showing an example
Python implementation as proof. We also compare our approach against textual
BNF-representations w.r.t. expressive power and ergonomics. These advantages do
not come at the cost of performance, as shown by our empirical evaluation on 5
benchmarks of our example implementation against PonyGE2. We conclude that our
approach has better ergonomics with the same expressive power and performance
of textual BNF-based grammar encodings