Conference Proceedings

Saraiva JA, Rebêlo H, Cunha J, Mendes J, Maia P.  2015.  Towards the Design and Implementation of Aspect-Oriented Programming for Spreadsheets. International Conference on Software Engineering (ICSE) Workshops. Abstract1503.03463v1.pdf

A spreadsheet usually starts as a simple and singleuser software artifact, but, as frequent as in other software systems, quickly evolves into a complex system developed by many actors. Often, different users work on different aspects of the same spreadsheet: while a secretary may be only involved in adding plain data to the spreadsheet, an accountant may define new business rules, while an engineer may need to adapt the spreadsheet content so it can be used by other software systems. Unfortunately, spreadsheet systems do not offer modular mechanisms, and as a consequence, some of the previous tasks may be defined by adding intrusive “code” to the spreadsheet. In this paper we go through the design and implementation of an aspect-oriented language for spreadsheets so that users can work on different aspects of a spreadsheet in a modular way. For example, aspects can be defined in order to introduce new business rules to an existing spreadsheet, or to manipulate the spreadsheet data to be ported to another system. Aspects are defined as aspect-oriented program specifications that are dynamically woven into the underlying spreadsheet by an a aspect weaver. In this aspect-oriented style of spreadsheet development, different users develop, or reuse, aspects without adding intrusive code to the original spreadsheet. Such code is added/executed by the spreadsheet weaving mechanism proposed in this paper.

Saraiva JA, Martins P, Zhu Z, Ko H-S, Hu Z.  2015.  BiYacc: Roll Your Parser and Reflective Printer into One. Fourth International Workshop on Bidirectional Transformations (Bx 2015). :43-50. Abstractp43-zhu_1.pdf

Language designers usually need to implement parsers and printers. Despite being two related programs, in practice they are designed and implemented separately. This approach has an obvious disadvantage: as a language evolves, both its parser and printer need to be separately revised and kept synchronised. Such tasks are routine but complicated and error-prone. To facilitate these tasks, we propose a language called BiYacc, whose programs denote both a parser and a printer. In essence, BiYacc is a domain-specific language for writing putback-based bidirectional transformations — the printer is a putback transformation,
and the parser is the corresponding get transformation. The pairs of parsers and printers generated by BiYacc are thus always guaranteed to satisfy the usual round-trip properties. The highlight that distinguishes this reflective printer from others is that the printer —being a putback transformation — accepts not only an abstract syntax tree but also a string, and produces an updated string consistent with the given abstract syntax tree. We can thus make use of the additional input string, with mechanisms such as simultaneous pattern matching on the view and the source, to provide users with full control over the printing-strategies.

Lammel R, Saraiva JA, Visser J.  2013.  Generative and Transformational Techniques in Software Engineering. GTTSE - International Summer School. Abstract

This tutorial book presents revised and extended lecture notes for a selection of the contributions presented at the International Summer School on Generative and Transformational Techniques in Software Engineering (GTTSE 2009), which was held in Braga, Portugal, in July 2009. The 16 articles comprise 7 long tutorials, 6 short tutorials and 3 participants contributions; they shed light on the generation and transformation of programs, data, models, metamodels, documentation, and entire software systems. The topics covered include software reverse and re-engineering, model driven engineering, automated software engineering, generic language technology, and software language engineering.