A Rewriting Logic Semantics Approach to Modular Program Analysis

The K framework, based on rewriting logic semantics, provides a powerful logic for defining the semantics of programming languages. While most work in this area has focused on defining an evaluation semantics for a language, it is also possible to define an abstract semantics that can be used for program analysis. Using the SILF language (Hills, Serbanuta and Rosu, 2007), this paper describes one technique for defining such a semantics: policy frameworks. In policy frameworks, an analysis-generic, modular framework is first defined for a language. Individual analyses, called policies, are then defined as extensions of this framework, with each policy defining analysis-specific semantic rules and an annotation language which, in combination with support in the language front-end, allows users to annotate program types and functions with information used during program analysis. Standard term rewriting techniques are used to analyze programs by evaluating them in the policy semantics.

[1]  Bertrand Meyer,et al.  Eiffel: A language and environment for software engineering , 1988, J. Syst. Softw..

[2]  José Meseguer,et al.  The Rewriting Logic Semantics Project , 2006, Electron. Notes Theor. Comput. Sci..

[3]  Wolfram Schulte,et al.  A Practical Verification Methodology for Concurrent Programs , 2009 .

[4]  Shuvendu K. Lahiri,et al.  A Reachability Predicate for Analyzing Low-Level Software , 2007, TACAS.

[5]  Claude Marché,et al.  The Why/Krakatoa/Caduceus Platform for Deductive Program Verification , 2007, CAV.

[6]  Jan A. Bergstra,et al.  Algebraic specification , 1989 .

[7]  Tijs van der Storm,et al.  RASCAL: A Domain Specific Language for Source Code Analysis and Manipulation , 2009, 2009 Ninth IEEE International Working Conference on Source Code Analysis and Manipulation.

[8]  Michael D. Ernst,et al.  An overview of JML tools and applications , 2003, Electron. Notes Theor. Comput. Sci..

[9]  Joseph A. Goguen,et al.  Algebraic semantics of imperative programs , 1996, Foundations of computing series.

[10]  Yang Meng Tan,et al.  LCLint: a tool for using specifications to check code , 1994, SIGSOFT '94.

[11]  Grigore Rosu,et al.  A Rewrite Framework for Language Definitions and for Generation of Efficient Interpreters , 2006, WRLA.

[12]  Joseph A. Goguen,et al.  Initial Algebra Semantics and Continuous Algebras , 1977, J. ACM.

[13]  Claude Marché,et al.  Multi-prover Verification of C Programs , 2004, ICFEM.

[14]  José Meseguer,et al.  Rewriting Logic Semantics: From Language Specifications to Formal Analysis Tools , 2004, IJCAR.

[15]  B Taylor,et al.  The NIST Reference on Constants, Units and Uncertainty : CODATA Internationally recommended values of the Fundamental Physical Constants , 1999 .

[16]  Paul Klint,et al.  EASY Meta-Programming with Rascal Leveraging the Extract-Analyze-SYnthesize Paradigm for Meta-Programming , 2009 .

[17]  Grigore Rosu,et al.  A Rewriting Logic Approach to Static Checking of Units of Measurement in C , 2012, RULE.

[18]  Paul Klint,et al.  EASY Meta-programming with Rascal , 2009, GTTSE.

[19]  Grigore Rosu,et al.  Rule-Based Analysis of Dimensional Safety , 2003, RTA.

[20]  J. Filliâtre,et al.  ACSL: ANSI/ISO C Specification Language , 2008 .

[21]  Feng Chen,et al.  Certifying measurement unit safety policy , 2003, 18th IEEE International Conference on Automated Software Engineering, 2003. Proceedings..

[22]  Alexander Aiken,et al.  A theory of type qualifiers , 1999, PLDI '99.

[23]  K. Rustan M. Leino,et al.  The Spec# Programming System: An Overview , 2004, CASSIS.

[24]  Mark Hills,et al.  Memory Representations in Rewriting Logic Semantics Definitions , 2009, WRLA.

[25]  Grigore Rosu,et al.  K: A Rewriting-Based Framework for Computations -- Preliminary version -- , 2007 .