Language-Parametric Program Restructuring
-- NWO Research Project (Software Engineering) --
Vrije Universiteit and Centrum voor Wiskunde en Informatica
Project approved per July 17, 2003, 2 PhD students for 4 years
Abstract:
Program restructuring is the key technology for achieving scalability
of various processes and methods in software maintenance, or, more
specifically, in software reengineering. Program restructuring is used
to revitalise legacy software by migrations and conversions, to
perform mass changes as batch jobs, and to interactively refactor
code. Program restructuring or program transformation is crucial in
other contexts of software development as well; it is at the heart of
current trends for 'intentional programming', 'aspect weaving',
`aspect mining', `open compilers', and others.
While previous work is normally geared towards specific languages and
specific restructuring scenarios, the present project aims at a
general approach to program restructuring that abstracts from
language and application specifics in a well-defined manner. This
means that operator suites for program restructuring can be reused for
different languages (be it for Java and Cobol and
Haskell), and for different restructuring tasks. It also means that
the derivation of restructuring tools can be further automated.
The project is centred around the following deliverables:
- a
- An approach to the executable specification for
language-parametric program restructuring.
- b
- A framework with analyses and transformations for language-parametric program restructuring.
- c
- Properties of language-parametric functionality
and their validation.
- d
- Framework instantiations for
specific languages and specific usage scenarios.
- e
- Reusable dialogue models for interactive program restructuring.
We bundle expertise in program transformation, formal language
definition, executable specification, interactive language
environments, and software re-engineering. Our approach pays attention
to challenges that are posed by the application of transformation
technology in the context of
software re-engineering. These
challenges include the multitude of languages that are subject to
re-engineering, the component-based nature of restructuring tools,
correctness and reliability requirements, and realities like
incomplete or complex language semantics. We address these challenges
with designated specification constructs, reuse methods, formal
methods, as well as generic and generative programming concepts.
| Name |
Affiliation |
Phone |
|
| NN1 |
NWO OiO (at CWI) |
|
|
| NN2 |
NWO OiO (at VU) |
|
|
| Dr. M. van den Brand |
CWI & VU |
020 592 4213 |
|
| J. Heering |
CWI |
020 592 4130 |
|
| Prof. Dr. P. Klint |
CWI & UvA |
020 592 4126 |
supervisor NN1 |
| Dr. R. Lämmel |
VU & CWI |
020 444 7824 |
principal Investigator |
| Prof. Dr. C. Verhoef |
VU |
020 444 7760 |
supervisor NN2 |
The team involves two research groups, namely Prof. P. Klint's group
at CWI, which specialises in Interactive Software Development
and Renovation (Dept. Software Engineering), and Prof. C. Verhoef's
group at VU, which specialises in Information Systems and
Software Maintenance (Dept. Information Management and Software
Engineering). The project application asks for two funded researchers,
i.e., one for each group. The assembled research team joins efforts
and expertise in executable specification (to `implement' operators
and suites for formal restructuring), program transformation (the
notion underlying program restructuring), formal methods (to enable
formal reason about framework and instantiation properties), formal
language definition (to transpose semantic concepts to the
restructuring context), generic programming (to provide a concise
specification of restructuring), software re-engineering (as the
primary application domain), and interactive language tools (to enable
complete automation of program restructuring). The precursor NWO
project 612.014.006 -- ``Generation of Program Transformation
Systems'' -- delivered key publications.
The situation in program restructuring is comparable to the situation
in formal language definition in the early 1980ies: little is known
about the fundamental building blocks of restructuring
environments. They are usually designed and implemented for both a
specific language and a specific usage scenario. This is
in contrast to the desired situation where such specific environments
are derived from reusable building blocks using appropriate forms of
modular composition. The present project will work out methods,
specification constructs, and further concepts to supply a notion of
LANGUAGE-PARAMETRIC PROGRAM RESTRUCTURING. In this course, we
will identify and organise restructuring notions that apply to many
different languages and usage scenarios. As a result, one can reason
about restructuring in the abstract. We will capture the restructuring
notions in a language-parametric framework, which is complemented by a
method for deriving specific restructuring environments in a
well-defined manner.
- a
- An approach to the executable specification for
language-parametric program restructuring.
- b
- A framework with analyses and transformations for language-parametric program restructuring.
- c
- Properties of language-parametric functionality
and their validation.
- d
- Framework instantiations for
specific languages and specific usage scenarios.
- e
- Reusable dialogue models for interactive program restructuring.
This development will naturally involve the integration and
reconciliation of so far scattered research results and applications
scenarios for program restructuring. Here are few examples. Firstly,
there are fundamental notions of program transformation which are
often spelled out in a specific context, e.g., the beautiful notion of
stepwise enhancement [Lak89,PS90,SS94,KMS96], which is
geared towards logic programming. This is an `obvious' candidate to be
lifted to the language-parametric level. Secondly, today's software
development landscape has created many application scenarios for
transformation, e.g., refactoring [Opd92,Fow99], component
composition [Aßm98], aspect
weaving [KLM$^+$97,FS98,Aßm97,Läm99,AL99], and
legacy software renovation [ABFP86,SSV02,Sne98]. The speed at which
these scenarios pop up truly calls for a more language-parametric
approach. Also, such often pragmatic results invite for an extraction
of concerns that can be formally captured in a language-parametric
setup, e.g., means of abstraction to account for the lack of a full
language semantics in re-engineering.
There are the following cornerstones of a research method:
- Transposition of research results on modular language
definition. An important source for our project is the body of
excellent work on extensible or modular semantics. This includes
action semantics [Mos92], denotational semantics using
monads [Mog91,LHJ95], extensible or modular operational
semantics [CF94,Mos99], and abstract state
machines [Gur95]. These approaches demonstrate how to
separate building blocks for language design in a way that they can be
reused across languages. Similar results exist in the context of
language implementation based on executable language definitions. This
includes extensions of the attribute grammar formalism by remote
access, higher-orderness, object-oriented features, and
others [FMY92,KW94,SV91,Hed94,SS99]. We contend that a
transposition or such research results on language semantics or
language implementation to program restructuring appears
promising. Some concrete ideas are found in [Läm98,LR99].
- Abstraction techniques. Program restructuring, as the
term suggests, is normally driven by structure, be it the
language syntax, the control-flow and data-flow graphs that are
derived from programs, or others. Generic programming helps with the
complexity of these structures. By generic programming, we mean
generic functional
programming [CS92,JJ97,SAS99,BJJM99,Hin00,Jay01] or generic
term traversal as in our previous
work [BKV01,LV02,Läm02c,LV03,LP03]. A good
example is any operator suite for restructuring that abstracts from
language specifics. Such a suite must employ rich forms of
parameterisation. An illustration of this idea can be found
in [Läm02b]. Besides generic programming, we rely on
further abstraction techniques:
- Interrelation between specific languages and intermediate
representations [FOW87,CFR$^+$91].
- Means to account for the possible lack of the full language
semantics subject to restructuring.
- Variation points for different usage scenarios, e.g., local
vs. global transformations.
We have preliminary ideas regarding these issues. For example, an
intermediate language for certain transformations with languages as
different as C and COBOL is described in [BDFH97]. As an aside, in
the view of restructuring scenarios that assume readable
transformation outputs which look as similar to the input as possible,
the intermediate language approach needs to perform non-trivial
`origin tracking' [DKT92]. The restructuring component in a
compiler can arbitrarily mangle the program. This illustrates that
requirements for the various usage scenarios need to be harmonised.
- Generative programming [EC00]. We will need to
generate various components of restructuring environments from
domain-specific notations. Obvious examples include parsers and
pretty-printers. Other examples are the dialolgue model of a
language-specific refactoring browser, or the theorem-prover input to
approve a framework instantiation. Generative programming has already
played some role in our previous work on software
re-engineering [BKV96,BKV97,BSV00].
- A tailored specification approach. The notion of
language-parametric program restructuring is basically a challenge in
executable specification because there are various aspects that need
to be managed: language parameters, transformation rules,
pre-conditions, the link between restructuring operators and dialogue
models for interactive tools, the obligations for the instantiation of
a language-parametric setup, and others. We cannot commit ourselves
to a specific specification language because these different aspects
deserve `domain-specific' notations. Furthermore, we will have to
identify the right balance between a pragmatic specification approach
vs. a rigorous formal approach. In any case, our specifications need
to be executable because, at the end, we aim at actual restructuring
tools. Furthermore, our specifications need to be concise, scalable,
and comprehensible. In designing and implementing such a specification
language for language-parametric restructuring, we receive inspiration
from our previous work on domain-specific languages, and research on
language-specific restructuring [DKV00,Läm98,SSV02].
- Well-defined criteria for project success. There are
minimum requirements for our research to be considered successful. We
must be able to reconstruct common examples of
language-specific operator suites for restructuring including
corresponding prototypes for transformation tooling. Here we assume
that language-specific operator suites are obtained by an effective
instantiation of our language-parametric framework, and that the
interactive restructuring tools are derived semi-automatically from
suitable specification fragments. We plan for 2-3 reconstructions
from the following candidate list, while the selection must cover
different languages and different usage scenarios:
- Stepwise enhancement of logic programs [SS94,Lak89,KMS96].
- Cobol control-flow restructuring [SSV02].
- Refactoring of object-oriented class hierarchies [Opd92,Fow99,Moo96,RBJ97].
- Adaptation of grammars, XML, and database schemes [HTJC93,LL01,Läm01].
- Refactoring of functional programs [TR01,Läm00,KL02].
The overall contribution of the project can be stated as
follows. Previous research results on program restructuring are
integrated by capturing the key notions in a manner that they are
normative for performing restructuring for the full range of
programming languages, and in the different application contexts. This
is a normal, genuine process in science.
The current situation is different. For example, beautiful theoretical
results, even if they are relevant for program restructuring, are not
accessible in the often rather applied contexts of program
transformation. Examples of the former include work by Pettorossi et
al. [PP96], or by Sheard, Taha, et al. [TS97,She01], or
by Cousot and Cousot [CC02]. There is nothing worse than theory
which is not applied although its potential applications are just
there, e.g., in the context of aspect weaving and refactoring. This
distance problem also backfires in the other direction. Software
re-engineering, as an applied discipline, so far triggered only little
basic research on program transformation, but this is very well
possible and eligible. There are, for example, original ideas for
reasoning about correctness of transformations, without insisting on a
full semantics. These ideas of abstraction would need to be formally
worked out. It is similar but not identical to the formal notion of
abstract interpretation [CC02]. Our project is dedicated to the
integration of research results on program restructuring. This
includes decreasing the gap between theory and practice.
At a more concrete level, the significance of the project can be
stated in terms of the following added value for program restructuring
with immediate benefits for software re-engineering:
- Reuse of operators for program restructuring for different
programming languages.
- Generic aquisition of properties of both operators and operator suites.
- Reproducible, traceable methods for the implementation of quality
restructuring environments.
- Concise, integrated and executable specification of all aspects
of program restructuring.
- Automated derivation of tool support for interactive restructuring.
This is challenging, interdisciplinary subject. We are confident that
this is the right time for such an endeavour because a large body of
foundations on program transformation, program analysis,
meta-programming, formal specification, and programming language
semantics has been accumulated while important application domains of
program restructuring call for improved reuse, reliability,
scalability, and automation.
Throughout this text, we pointed out that program restructuring is
typically studied in the context of a particular paradigm or even a
specific programming language, and then normally in the context of a
certain application scenario. There is an enormous amount of related
work. Here are some indications grouped per language: object-oriented
programs [Opd92,Moo96,RBJ97,Sne98,Fow99], logic
programs [PS90,PP96], (higher-order) functional
programs [PP96,Bel95,Läm00,TR01], grammars or
syntax definitions [Pep99,Läm01], preprocessor
macros [Fav96,KR01], and so on.
There is a perception of program transformation, which is less
applicable for our purposes, namely the mathematical
calculation of programs. In this area, one typically aims at deriving
efficient programs from high-level
specifications [Par90,dRE98]. We share with this perception
the interest in preservation properties such as semantics
preservation. In our case, semantics preservation is often constrained
by structural properties to make given restructuring goals feasible,
to be able to check for correctness, or to take characteristics of a
given code portfolio into account. In the re-engineering context,
program restructuring relies on weaker properties than conservative
semantics preservation.
The idea of reusable building blocks for program analyses and
transformations is not new. Relevant elements play a role in related
work on language processing and language implementation. For example,
the Stratego project [VBT98,Vis00,Vis01] advocates generic
traversal schemes for analysis and transformation, which can be
instantiated by language-specific ingredients. A good example is a
free variable analysis with arguments for the declaring and referring
constructs. Similar ideas have been proposed on the basis of
extensions of the attribute grammar formalisms, most notably
in [FMY92,KW94,SS99]. There are ingredients of our project that
are not addressed by such related work, in particular:
- Operator suites for language-parametric program restructuring.
- Aquisition of properties of framework functionality at the generic level.
- The link between restructuring and semantics,
- The link between executable specification and interactive restructuring.
In the terminology of meta-programming [She01], program
transformations for restructuring are meta-programs on
object programs. The present project poses a challenge for
meta-programming in that the object language has to be viewed as a
parameter. Contrast that with the common situation where meta-language
and object language are fixed [BK82,Bow98,TS00,ER02,SP02],
and they are normally even amalgamated. Nevertheless, research on
meta-programming has revealed a number of notions that are valuable in
our project. To give a concrete example, in the Ergo project,
higher-order abstract syntax [PE88] is used for the
representation of object programs. Higher-order abstract syntax allows
to capture the binding constructs of a language, which implies that
meta-programs immediately respect this part of the language semantics.
Further examples of the relevance of meta-programming include the
following:
- Proper representation of object variables in the meta
language [BK82,Bow98].
- The design of update calculi that respect the type system of the
object language [ER02,ER03].
- The proper handling of binding times in multi-staged programming
or program synthesis [TS00].
- The verification of meta- and object-program properties [Pfe89].
We will now elaborate on the major deliverables [a]-[e] that were
stated earlier. The detailed deliverables will be arranged in categories
``Inventory'', ``Foundations'', and ``Automation''.
Deliverables in the category Inventory:
- I1
- Modular semantics. The different approaches to formal
semantics support modularity in some way or another. That is, the
different language concepts can be specified in separation, and the
corresponding constructs can be combined in different language
designs. These techniques are analysed in depth to identify what ideas
can be transposed to the program restructuring context.
- I2
- Abstraction mechanisms in program transformation.
Some work on program transformation and analysis attempts to cover an
entire class of languages. Also, the idea of the ultimate intermediate
representation is ubiquitous. A well-organised inventory of these
techniques including their limitations regarding a seamless, and
general language-parametric restructuring approach is needed.
- I3
- Operators suites for program restructuring. In the
various specific contexts of program restructuring, many different
operator suites have been proposed with completely different designs,
usage scenarios, and targeted applications. All such operator suites
will be systematically categorised to use this existing know-how
in our language-parametric approach.
- I4
- Principles of tool support. Program restructuring is
either performed in an interactive manner or in batch jobs. Looking at
academic as well as commercial setups, we will make an inventory of
the principles underlying such tool support. For example: what kind
of dialogs are offered, what forms of consistency checking are used,
what kind of mechanisms for evolution and feedback are provided.
- I5
- Semi-automatic user interface design. In the area of
graphical user interface design, it is an established approach to
generate semi-automatically interfaces or prototypes thereof from
analysis and design artifacts, e.g., from process models or
work-flows. An inventory of these approaches will be of use to link
interactive program restructuring and the underlying specifications in
a similar way.
Deliverables in the category Foundations:
- F1
- Abstraction and modularity mechanisms. We will
identify and integrate all forms of polymorphism and modular
composition that are relevant for language-parametric restructuring.
For example, it is clear that generic traversal is indispensable to
handle complex syntactical or other structures. At the same time,
provisions are needed to abstract from the specific static and dynamic
semantics of a language.
- F2
- Properties of restructuring operators. In a naive
sense, operators should preserve well-typedness and semantics. In
order to be scalable, and to cover all scenarios of program
restructuring, the provision of well-founded weaker properties is a
main goal of this project. This deliverable is challenged by
the aspiration to be language-parametric.
- F3
- Properties of operator suites. The design space of
properties, and the methods to enforce them need to be identified.
Typical properties of suites are completeness (e.g., `editing'
completeness), orthogonality, implementability, scalability,
usability, most general abstraction, and relations between operator
suites.
- F4
- Obligations for framework instantiation. The
instantiation of language-parametric program transformations for a
specific language is more than `parameter passing' because we want to
retain abstract properties of the framework in the obtained
instantiation. So the obligations for the instantiation process need
to be identified, and the process needs to be set up in a way to
enforce the obligations.
- F5
- An executable specification language. This is the
culmination point of the development. The ultimate specification
language should not just cover the actual transformation rules based
on seamless support for the needed abstraction mechanisms, but also
all kinds of formal aspects related to the properties of the
operators, properties of the operator suites, and the obligations for
the instantiation.
Deliverables in the category Automation:
- A1
- Encoding schemes. Using existing specification or
programming languages like ASF+SDF, Haskell, Stratego and Prolog the
executable specification of language-parametric transformations is
attempted. This will uncover the trade-offs of using such technology,
it will trigger suggestions for extensions, and it will lead to
familiarity with the programming idioms in the area of program
restructuring.
- A2
- Extension of the Meta-Environment. The ASF+SDF
Meta-Environment [Kli93,BDH$^+$01] is our primary setup for
providing specification and tool support for language-parametric
restructuring. Its component-based architecture will allow us to
integrate external components whenever necessary, taking advantage of
standard components, e.g., for parsing, and pretty printing. We will
extend our Meta-Environment technology to support the specification
language as of [F5].
- A3
- Language-specific restructuring tools. Using the
developed methods, the designed specification language, and the
prototyped technology, we will derive actual language-specific
restructuring tools in the framework as a proof-of-concept. We will
reconstruct a refactoring browser for Java, a goto-elimination tool
for Cobol, and maybe tools for one or two other languages.
- A4
- Semi-automated browser derivation. The ASF+SDF
Meta-Environment supports the development of interactive language
tools. For example, this is automated for structure editors, but there
is little support for the automated derivation of interactive
restructuring tools. So we need to complement our specification
approach in a way to enable a semi-automatic derivation of such tools.
- A5
- Integration of proof checkers and theorem provers.
The automated verification of properties and obligations necessitates
the employment of proof checkers or theorem provers. These encodings
need to be defined: the program transformations, the properties of
operators and suites, the abstractions of the object language
semantics, and the obligations for instantiation.
The following publications by the applicants
lay out relevant results that will contribute to the conception of
language-parametric program restructuring:
- [Läm02b]
- This paper proposes the notion of
``generic refactoring'', which is a special case of
language-parametric program restructuring. The paper demonstrates the
feasibility of a generic approach to certain program transformations
using a specific technical setup based on generic functional
programming. The present project aims at the following generalisation:
- General characterisation of a suitable specification framework.
- Several forms of program restructuring as opposed to refactoring.
- Complete operator suites as opposed to isolated operators.
- Aquisition of properties of framework functionality at the generic level.
- Full framework instantiations for several languages including validation.
- Integration of tool support, in particular, for interactive transformation.
- [BKV01,Läm02c]
- These two papers develop central
expressiveness for the executable specification of generic program
analyses and transformations. The central idea is to support a clear
separation of problem-specific functionality and otherwise generic
traversals.
- [HK00]
- This paper accomplishes a tool-oriented approach
to the semantics of programming languages. Restructuring tools are
among the many tools that can be derived from executable semantics
specifications, maybe using ``language design assistants'' which
incorporate large parts of language knowledge that can effectively
assist tool development. A good example is the specification of
scope rules of a language that can be used in many tools.
- [SSV02]
- This paper discusses a powerful program
restructuring approach for the challenging Cobol language. Certain
elements of language parametricity are present. For example, most of
the Cobol syntax and semantics is irrelevant for this approach. There
is ongoing work on proving the correctness of the transformations
using an abstract semantics as opposed to the full Cobol semantics.
- [BDFH97]
- This paper develops a formal transformational
toolkit (i.e., an equational logic) for tools that analyse and
manipulate programs. The language underlying the logic is a (so to say
language-parametric) intermediate language which can be naturally
targeted from many specific programming languages. The paper proves
completeness of the setup in the sense that, in particular, all
semantics-preserving transformations can be derived in the logic.
There are several other publications by the applicants that will be of
use in this project that seeks integration of research results on
program transformation:
[BHK89,Kli93,DHK96,BKV96,BKV97,BSV97,BK98,Läm98,DKV99,Läm99,DKV00,Läm00,BSV00,BDH$^+$01,LV01,BHKO02,LV02,Läm02a,LV03].
- ABFP86
-
G. Arango, I. Baxter, P. Freeman, and C. Pidgeon.
TMM: Software maintenance by transformation.
IEEE Software, 3(3):27-39, May 1986.
- AL99
-
U. Aßmann and A. Ludwig.
Aspect weaving by graph rewriting.
In U.W. Eisenecker and K. Czarnecki, editors, Generative
Component-based Software Engineering (GCSE), volume 1799 of Lecture
Notes in Computer Science, pages 24-36. Springer-Verlag, October 1999.
- Aßm97
-
U. Aßmann.
AOP with design patterns as meta-programming operators.
Technical Report 28, Universität Karlsruhe, October 1997.
- Aßm98
-
U. Aßmann.
Meta-programming composers in second-generation component systems.
In J. Bishop and N. Horspool, editors, Systems Implementation
2000 - Working Conference IFIP WG 2.4, Berlin, February 1998. Chapman and
Hall.
- BDFH97
-
J. A. Bergstra, T. B. Dinesh, J. Field, and J. Heering.
Toward a complete transformational toolkit for compilers.
ACM Transactions on Programming Languages and Systems,
19(5):639-684, September 1997.
- BDH$^+$01
-
M.G.J. van den Brand, Deursen, A. van, J. Heering, H.A. de Jong, M.
de Jonge, T. Kuipers, P. Klint, L. Moonen, P.A. Olivier, J. Scheerder, J.J.
Vinju, E. Visser, and J. Visser.
The ASF+SDF Meta-Environment: a Component-Based
Language Development Environment.
In R. Wilhelm, editor, Compiler Construction (CC '01), volume
2027 of Lecture Notes in Computer Science, pages 365-370.
Springer-Verlag, 2001.
- Bel95
-
F. Bellegarde.
Notes for Pipelines of Transformations for ML.
Technical Report 95-021, Oregon Graduate Institute, 1995.
- BHK89
-
J.A. Bergstra, J. Heering, and P. Klint.
The algebraic specification formalism ASF.
In J.A. Bergstra, J. Heering, and P. Klint, editors, Algebraic
Specification, ACM Press Frontier Series, pages 1-66. The ACM Press in
co-operation with Addison-Wesley, 1989.
- BHKO02
-
M.G.J. van den Brand, J. Heering, P. Klint, and P.A. Olivier.
Compiling language definitions: the ASF+SDF compiler.
ACM Transactions on Programming Languages and System,
24(4):334-368, 2002.
- BJJM99
-
R. Backhouse, P. Jansson, J. Jeuring, and L. Meertens.
Generic programming -- an introduction.
In Swierstra et al. [SHO99], pages 28-115.
- BK82
-
K.A. Bowen and R.A. Kowalski.
Amalgamating Language and Metalanguage in Logic Programming.
In K.L. Clark and S.-A. Tarnlund, editors, Logic programming,
volume 16 of APIC studies in data processing, pages 153-172. Academic
Press, 1982.
- BK98
-
J. Bergstra and P. Klint.
The discrete time ToolBus - a software coordination architecture.
Science of Computer Programming, 31(2-3):205-230, 1998.
- BKV96
-
M.G.J. van den Brand, P. Klint, and C. Verhoef.
Core technologies for system renovation.
In K.G. Jeffery, J. Král, and M. Bartosek, editors, SOFSEM'96: Theory and Practice of Informatics, volume 1175 of LNCS,
pages 235-255. Springer-Verlag, 1996.
- BKV97
-
M.G.J. van den Brand, P. Klint, and C. Verhoef.
Re-engineering needs generic programming language technology.
ACM SIGPLAN Notices, 32(2):54-61, 1997.
- BKV01
-
M.G.J. van den Brand, P. Klint, and J.J. Vinju.
Term rewriting with traversal functions.
Technical Report SEN-R0121, CWI, July 2001.
Submitted for journal publication.
- Bow98
-
A. Bowers.
Effective Meta-programming in Declarative Languages.
PhD thesis, Department of Computer Science, University of Bristol,
January 1998.
- BSV97
-
M.G.J. van den Brand, M.P.A. Sellink, and C. Verhoef.
Generation of components for software renovation factories from
context-free grammars.
In I.D. Baxter, A. Quilici, and C. Verhoef, editors, Proceedings
Fourth Working Conference on Reverse Engineering, pages 144-153, 1997.
- BSV00
-
M.G.J. van den Brand, M.P.A. Sellink, and C. Verhoef.
Generation of Components for Software Renovation Factories from
Context-free Grammars.
Science of Computer Programming, 36(2-3):209-266, 2000.
- CC02
-
P. Cousot and R. Cousot.
Systematic design of program transformation frameworks by abstract
interpretation.
In Conference Record of POPL'02: The 29th ACM
SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages
178-190, Portland, Oregon, January 16-18, 2002.
- CF94
-
R. Cartwright and M. Felleisen.
Extensible denotational language specifications.
In M. Hagiya and J.C. Mitchell, editors, Theoretical Aspects of
Computer Software: International Symposium, volume 789 of LNCS, pages
244-272. Springer-Verlag, April 1994.
- CFR$^+$91
-
R. Cytron, J. Ferrante, B.K. Rosen, M.N. Wegman, and F.K. Zadeck.
Efficiently computing static single assignment form and the control
dependence graph.
ACM Transactions on Programming Languages and Systems,
13(4):451-490, October 1991.
- CS92
-
J.R.B. Cockett and D. Spencer.
Strong categorical datatypes I.
In R.A.G. Seely, editor, Proceedings Int. Summer Category
Theory Meeting, Montréal, Québec, 23-30 June 1991, volume 13 of
Canadian Mathematical Society Conf. Proceedings, pages 141-169.
American Mathematical Society, Providence, RI, 1992.
- DHK96
-
Deursen, A. van, J. Heering, and P. Klint, editors.
Language Prototyping, volume 5 of AMAST Series in
Computing.
World Scientific, 1996.
- DKT92
-
Deursen, A. van, P. Klint, and F. Tip.
Origin tracking.
In 217, page 48. Centrum voor Wiskunde en Informatica (CWI),
ISSN 0169-118X, December 31 1992.
CS-R9230.
- DKV99
-
Deursen, A. van, P. Klint, and C. Verhoef.
Research issues in software renovation.
In J.-P. Finance, editor, Fundamental Approaches to Software
Engineering (FASE '99), pages 1-21. LNCS, 1999.
- DKV00
-
Deursen, A. van, P. Klint, and J. Visser.
Domain-specific languages: An annotated bibliography.
ACM SIGPLAN Notices, 35(6):26-36, June 2000.
- dRE98
-
W.-P. de Roever and K. Engelhardt.
Data Refinement: Model-Oriented Proof Methods and their
Comparison, volume 47 of Cambridge Tracts in Theoretical Computer
Science.
Cambridge University Press, New York, NY, 1998.
- EC00
-
U.W. Eisenecker and K. Czarnecki.
Generative Programming: Methods, Tools, and Applications.
Addison-Wesley, 2000.
- ER02
-
M. Erwig and D. Ren.
A rule-based language for programming software updates.
In Proceedings of the 2002 ACM SIGPLAN workshop on Rule-based
programming, pages 67-78. ACM Press, 2002.
- ER03
-
M. Erwig and D. Ren.
Type-Safe Update Programming.
In Proc. of 12th European Symp. on Programming (ESOP'03),
2003.
To appear.
- Fav96
-
J. Favre.
Preprocessors from an abstract point of view.
In Proc. of the International Conference on Software
Maintenance, pages 329-339, Washington, November 4-8 1996. IEEE Computer
Society Press.
- FMY92
-
R. Farrow, T.J. Marlowe, and D.M. Yellin.
Composable Attribute Grammars.
In Proc. of 19th ACM Symposium on Principles of Programming
Languages (Albuquerque, NM), pages 223-234, January 1992.
- FOW87
-
J. Ferrante, K.J. Ottenstein, and J.D. Warren.
The Program Dependence Graph and Its Use in Optimization.
ACM Transactions on Programming Languages and Systems,
9(3):319-349, July 1987.
- Fow99
-
M. Fowler.
Refactoring: Improving the Design of Existing Code.
Addison Wesley, 1999.
- FS98
-
P. Fradet and M. Südholt.
AOP: towards a generic framework using program transformation and
analysis.
In Position papers of the Aspect-Oriented Programming Workshop
at ECOOP'98, July 1998.
- Gur95
-
Y. Gurevich.
Evolving Algebras 1993: Lipari Guide.
In E. Börger, editor, Specification and Validation Methods,
pages 9-36. Oxford University Press, 1995.
- Hed94
-
G. Hedin.
An Overview of Door Attribute Grammars.
In P. Fritzon, editor, Compiler Construction, 5th International
Conference, volume 786 of Lecture Notes in Computer Science, pages
31-51, Edinburgh, U.K., 7-9 April 1994. Springer.
- Hin00
-
R. Hinze.
A New Approach to Generic Functional Programming.
In T.W. Reps, editor, Conference record of POPL '00: the 27th
ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages
119-132. ACM Press, January 2000.
- HK00
-
J. Heering and P. Klint.
Semantics of programming languages: A tool-oriented approach.
ACM SIGPLAN Notices, 35(3):39-48, March 2000.
- HTJC93
-
J.-L. Hainaut, C. Tonneau, M. Joris, and M. Chandelon.
Schema Transformation Techniques for Database Reverse Engineering.
In Proc. of the 12th Int. Conf. on ER Approach,
Arlington-Dallas, 1993. E/R Institute.
- Jay01
-
C.B. Jay.
Distinguishing data structures and functions: the constructor
calculus and functorial types.
In S. Abramsky, editor, Typed Lambda Calculi and Applications:
5th International Conference TLCA 2001, Kraków, Poland, May 2001,
Proceedings, volume 2044 of LNCS, pages 217-239. Springer-Verlag,
2001.
- JJ97
-
P. Jansson and J. Jeuring.
PolyP - a Polytypic Programming Language Extension.
In Conference record POPL '97: the 24th ACM SIGPLAN-SIGACT
Symposium on Principles of Programming Languages, pages 470-482.
ACM Press, 1997.
- KL02
-
J. Kort and R. Lämmel.
A Framework for Datatype Transformation.
Technical Report cs.PL/0204018, arXiv, December 2002.
23 pages; 2nd edition.
- Kli93
-
P. Klint.
A meta-environment for generating programming environments.
ACM Transactions on Software Engineering and Methodology, 2(2),
pages 176-201, 1993.
- KLM$^+$97
-
G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C. Lopes, J.-M. Loingtier, and
J. Irwin.
Aspect-oriented programming.
In M. Aksit and S. Matsuoka, editors, Proc. of
ECOOP'97--Object-Oriented Programming, 11th European Confernce, volume
1241 of LNCS, pages 220-242, Jyväskylä, Finland, 9-13 June 1997.
Springer-Verlag.
- KMS96
-
M. Kirschenbaum, S. Michaylov, and L.S. Sterling.
Skeletons and Techniques as a Normative Approach to Program
Development in Logic-Based Languages.
In Proceedings ACSC'96, Australian Computer Science
Communications, 18(1), pages 516-524, 1996.
- KR01
-
B. Kuhlbach and V. Riediger.
Folding: An Approach to Enable Program Understanding of Preprocessed
Languages.
In E. Burd, P. Aiken, and R. Koschke, editors, Proc. of Eighth
Working Conference on Reverse Engineering; WCRE'01, pages 3-12. IEEE
Computer Society, 2001.
- KW94
-
U. Kastens and W.M. Waite.
Modularity and reusability in attribute grammars.
Acta Informatica 31, pages 601-627, 1994.
- Lak89
-
A. Lakhotia.
A Workbench for Developing Logic Programs by Stepwise
Enhancement.
PhD thesis, Case Western Reserve University, 1989.
- Läm98
-
R. Lämmel.
Functional meta-programs towards reusability in the declarative
paradigm.
PhD thesis, Universität Rostock, Fachbereich Informatik, 1998.
Published by Shaker Verlag, ISBN 3-8265-6042-6.
- Läm99
-
R. Lämmel.
Declarative aspect-oriented programming.
In O. Danvy, editor, Proc. of 1999 ACM SIGPLAN Workshop on
Partial Evaluation and Semantics-Based Program Manipulation (PEPM'99), San
Antonio (Texas), BRICS Notes Series NS-99-1, pages 131-146, January 1999.
- Läm00
-
R. Lämmel.
Reuse by Program Transformation.
In Greg Michaelson and Phil Trinder, editors, Functional
Programming Trends 1999. Intellect, 2000.
Selected papers from the 1st Scottish Functional Programming
Workshop.
- Läm01
-
R. Lämmel.
Grammar Adaptation.
In J.N. Oliveira and P. Zave, editors, Proc. Formal Methods
Europe (FME) 2001, volume 2021 of LNCS, pages 550-570.
Springer-Verlag, 2001.
- Läm02a
-
R. Lämmel.
The Sketch of a Polymorphic Symphony.
In B. Gramlich and S. Lucas, editors, Proc. of International
Workshop on Reduction Strategies in Rewriting and Programming (WRS 2002),
volume 70 of ENTCS. Elsevier Science, 2002.
21 pages.
- Läm02b
-
R. Lämmel.
Towards Generic Refactoring.
In Proc. of Third ACM SIGPLAN Workshop on Rule-Based
Programming RULE'02, Pittsburgh, USA, October5 2002. ACM Press.
14 pages.
- Läm02c
-
R. Lämmel.
Typed Generic Traversal With Term Rewriting Strategies.
Journal of Logic and Algebraic Programming, 54:1-64, September
2002.
- LHJ95
-
S. Liang, P. Hudak, and M.P. Jones.
Monad transformers and modular interpreters.
In ACM, editor, Conference record of POPL '95, 22nd ACM
SIGPLAN-SIGACT Symposium on Principles of Programming Languages: papers
presented at the Symposium: San Francisco, California, January 22-25, 1995,
pages 333-343, New York, NY, USA, 1995. ACM Press.
- LL01
-
R. Lämmel and W. Lohmann.
Format Evolution.
In Proc. of 7th International Conference on Reverse
Engineering for Information Systems (RETIS 2001), volume 155 of books@ocg.at. OCG, 2001.
- LP03
-
R. Lämmel and S. Peyton Jones.
Scrap your boilerplate: a practical design pattern for generic
programming.
In Proc. of the 2003 ACM SIGPLAN international workshop on
Types in languages design and implementation, pages 26-37. ACM Press,
2003.
- LR99
-
R. Lämmel and G. Riedewald.
Reconstruction of paradigm shifts.
In Proc. of Second Workshop on Attribute Grammars and their
Applications, WAGA 99, pages 37-56, March 1999.
Published as INRIA Technical Report, ISBN 2-7261-1138-6.
- LV01
-
R. Lämmel and C. Verhoef.
Cracking the 500-Language Problem.
IEEE Software, pages 78-88, November/December 2001.
- LV02
-
R. Lämmel and J. Visser.
Typed Combinators for Generic Traversal.
In S. Krishnamurthi and C.R. Ramakrishnan, editors, Proc. of
Practical Aspects of Declarative Programming PADL 2002, volume 2257 of LNCS, pages 137-154. Springer-Verlag, January 2002.
- LV03
-
R. Lämmel and J. Visser.
A Strafunski Application Letter.
In V. Dahl and P. Wadler, editors, Proc. of Practical Aspects
of Declarative Programming 2003 (PADL'03), LNCS. Springer-Verlag, January
2003.
To appear; 18 pages.
- Mog91
-
E. Moggi.
Notions of computation and monads.
Information and Computation, 93(1):55-92, July 1991.
- Moo96
-
I. Moore.
Automatic Inheritance Hierarchy Restructuring and Method
Refactoring.
In OOPSLA '96 Conference Proc.: Object-Oriented Programming
Systems, Languages, and Applications, pages 235-250. ACM Press, 1996.
- Mos92
-
P.D. Mosses.
Action Semantics.
Number 26 in Cambridge Tracts in Theoretical Computer Science.
Cambridge University Press, 1992.
- Mos99
-
P.D. Mosses.
Foundations of Modular SOS.
Technical Report RS-99-54, BRICS Report Series, December 1999.
- Opd92
-
W.F. Opdyke.
Refactoring Object-Oriented Frameworks.
PhD thesis, University of Illinois at Urbana-Champaign, 1992.
- Par90
-
H.A. Partsch.
Specification and Transformation of Programs.
Springer-Verlag, 1990.
- PE88
-
F. Pfenning and C. Elliot.
Higher-order abstract syntax.
ACM SIGPLAN Notices, 23(7):199-208, July 1988.
- Pep99
-
P. Pepper.
LR Parsing = Grammar Transformation + LL Parsing.
Technical Report CS-99-05, TU Berlin, April 1999.
- Pfe89
-
Frank Pfenning.
Elf: A language for logic definition and verified
meta-programming.
In Fourth Annual Symposium on Logic in Computer Science, pages
313-322, Pacific Grove, California, June 1989. IEEE Computer Society Press.
- PP96
-
A. Pettorossi and M. Proietti.
Rules and Strategies for Transforming Functional and Logic
Programs.
ACM Computing Surveys, 28(2):360-414, June 1996.
- PS90
-
A.J. Power and L.S. Sterling.
A Notion of Map Between Logic Programs.
In D. Warren and P. Szeredi, editors, Proc. of 7th
International Conference on Logic Programming (ICLP), pages 390-404. The
MIT Press, 1990.
- RBJ97
-
D. Roberts, J. Brant, and R.E. Johnson.
A Refactoring Tool for Smalltalk.
Theory and Practice of Object Systems (TAPOS), 3(4):253-263,
1997.
- SAS99
-
S. Doaitse Swierstra, P. R. A. Alcocer, and J. Saraiva.
Designing and implementing combinator languages.
In Swierstra et al. [SHO99], pages 150-206.
- She01
-
T. Sheard.
Accomplishments and Research Challenges in Meta-programming.
In Workshop on Semantics, Applications, and Implementation of
Program Generation (SAIG 2001), volume 2196, pages 2-44, 2001.
Invited talk.
- SHO99
-
S.D. Swierstra, P.R. Henriques, and J.N. Oliveira, editors.
Advanced Functional Programming, Third International School, AFP
'98, volume 1608 of LNCS, Braga, Portugal, September 1999.
Springer-Verlag.
- Sne98
-
H.M. Sneed.
Objektorientierte Softwaremigration.
Addison-Wesley, 1998.
In German.
- SP02
-
T. Sheard and S. Peyton Jones.
Template meta-programming for haskell.
In Proceedings of the workshop on Haskell workshop, pages
1-16. ACM Press, 2002.
- SS94
-
L.S. Sterling and E.Y. Shapiro.
The Art of Prolog.
MIT Press, 1994.
2nd edition.
- SS99
-
J. Saraiva and D. Swierstra.
Generic Attribute Grammars.
In D. Parigot and M. Mernik, editors, Second Workshop on
Attribute Grammars and their Applications, WAGA'99, pages 185-204,
Amsterdam, The Netherlands, March 1999. INRIA rocquencourt.
- SSV02
-
M.P.A. Sellink, H.M. Sneed, and C. Verhoef.
Restructuring of COBOL/CICS Legacy Systems.
Science of Computer Programming, 45(2-3):193-243, 2002.
- SV91
-
D. Swierstra and H. Vogt.
Higher Order Attribute Grammars.
In Henk Alblas and Borivoj Melichar, editors, Attribute
grammars, Applications and Systems, Proceedings of the International Summer
School SAGA, Prague, Czechoslovakia, volume 545 of LNCS, pages
256-296. Springer-Verlag, June 1991.
- TR01
-
S. Thompson and C. Reinke.
Refactoring Functional Programs.
Technical Report 16-01, Computing Laboratory, University of Kent at
Canterbury, October 2001.
- TS97
-
W. Taha and T. Sheard.
Multi-stage programming.
In Proceedings of the ACM SIGPLAN International Conference
on Functional Programming (ICFP-97), volume 32,8 of ACM SIGPLAN
Notices, pages 321-321, New York, June 9-11 1997. ACM Press.
- TS00
-
W. Taha and T. Sheard.
MetaML and multi-stage programming with explicit annotations.
Theoretical Computer Science, 248(1-2):211-242, October 2000.
- VBT98
-
E. Visser, Z. Benaissa, and A. Tolmach.
Building Program Optimizers with Rewriting Strategies.
In International Conference on Functional Programming
(ICFP'98), volume 34.1 of ACM Sigplan Notices, pages 13-26. ACM
Press, September 1998.
- Vis00
-
E. Visser.
Language Independent Traversals for Program Transformation.
In J. Jeuring, editor, Proc. of WGP'2000, Technical Report,
Universiteit Utrecht, pages 86-104, July 2000.
- Vis01
-
E. Visser.
Stratego: A Language for Program Transformation based on Rewriting
Strategies. System Description of Stratego 0.5.
In A. Middeldorp, editor, Rewriting Techniques and Applications
(RTA'01), volume 2051 of LNCS, pages 357-361. Springer-Verlag, May
2001.
Language-Parametric Program Restructuring
-- NWO Research Project (Software Engineering) --
This document was generated using the
LaTeX2HTML translator Version 2002 (1.62)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html abstract.tex -split 0 -nonavigation -html_version 4.0 -lcase_tags
The translation was initiated by Vadim Zaytsev on 2005-01-26
Vadim Zaytsev
2005-01-26