Variability-Aware Parsing in the Presence of Lexical Macros and Conditional Compilation
In many projects, lexical pre-processors are used to manage different variants of the project (using conditional compilation) and to define compile-time code transformations (using macros). Unfortunately, while being a simple way to implement variability, conditional compilation and lexical macros hinder automatic analysis, even though such analysis is urgently needed to combat variability-induced complexity. To analyze code with its variability, the authors need to parse it without pre-processing it. However, current parsing solutions use unsound heuristics, support only a subset of the language, or suffer from exponential explosion.