  Attribute grammars allow the association of semantic actions to the
production rules in context-free grammars, providing a simple yet effective
formalism to define the semantics of a language. However, drafting the semantic
actions can be tricky and a large drain on developer time. In this work, we
propose a synthesis methodology to automatically infer the semantic actions
from a set of examples associating strings to their meanings. We also propose a
new coverage metric, derivation coverage. We use it to build a sampler to
effectively and automatically draw strings to drive the synthesis engine. We
build our ideas into our tool, PANINI, and empirically evaluate it on twelve
benchmarks, including a forward differentiation engine, an interpreter over a
subset of Java bytecode, and a mini-compiler for C language to two-address
code. Our results show that PANINI scales well with the number of actions to be
synthesized and the size of the context-free grammar, significantly
outperforming simple baselines.
