Semantic patches for documenting and automating collateral evolutions in Linux device drivers
Proceedings of the 3rd workshop on Programming languages and operating systems: linguistic support for modern operating systems
The rewriting logic semantics project
Theoretical Computer Science
Mechanical verification of refactorings
PEPM '08 Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Documenting and automating collateral evolutions in linux device drivers
Proceedings of the 3rd ACM SIGOPS/EuroSys European Conference on Computer Systems 2008
Aspect mining in the presence of the C preprocessor
Proceedings of the 2008 AOSD workshop on Linking aspect technology and evolution
Can we refactor conditional compilation into aspects?
Proceedings of the 8th ACM international conference on Aspect-oriented software development
Combining preprocessor slicing with C/C++ language slicing
Science of Computer Programming
Generating Rewritable Abstract Syntax Trees
Software Language Engineering
Refactoring and the evolution of Fortran
SECSE '09 Proceedings of the 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering
Regrowing a language: refactoring tools allow programming languages to evolve
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
CScout: A refactoring browser for C
Science of Computer Programming
Analysis of preprocessor constructs in Erlang
Proceedings of the 9th ACM SIGPLAN workshop on Erlang
Efficient extraction and analysis of preprocessor-based variability
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
TypeChef: toward type checking #ifdef variability in C
FOSD '10 Proceedings of the 2nd International Workshop on Feature-Oriented Software Development
Analyzing the discipline of preprocessor annotations in 30 million lines of C code
Proceedings of the tenth international conference on Aspect-oriented software development
Systematic improvement of web applications design
Journal of Web Engineering
Variability-aware parsing in the presence of lexical macros and conditional compilation
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
An empirical study of PHP feature usage: a static analysis perspective
Proceedings of the 2013 International Symposium on Software Testing and Analysis
OpenRefactory/C: an infrastructure for building correct and complex C transformations
Proceedings of the 2013 ACM workshop on Workshop on refactoring tools
Hi-index | 0.00 |
The C preprocessor is heavily used in C programs because it provides useful and even necessary additions to the C language. Since preprocessor directives are not part of C, they are removed before parsing and program analysis take place, during the phase called preprocessing. In the context of refactoring, it is inappropriate to remove preprocessor directives: if changes are applied on the preprocessed version of a program, it may not be possible to recover the un-preprocessed version. This means that after refactoring, all the source code would be contained in a single unit, targeted to a single configuration and without preprocessor macros. This thesis describes a novel approach to preserve preprocessor directives during parsing and program analysis, and integrate them in the program representations. Furthermore, it illustrates how the program representations are used during refactoring and how transformations preserve preprocessor directives. Additionally, the semantics of the C preprocessor are formally specified, and the results of implementing this approach in a refactoring tool for C, CRefactory, are presented.