395 papers · page 1 of 20
Luke Bessant, Eric Van Wyk
This tool paper introduces AGTix, an extension to reference attribute grammars that allows constraints, inspired by Visser et al.'s Statix system, that construct and query scope graphs to be written alongside traditional attribute equations. Previous work has shown that a restric…
Cédric Brun
For over 20 years, the Software Language Engineering community has pushed languages forward. More expressive. More formal. Better tooled. Metamodeling frameworks, transformations, graphical and textual notations, language workbenches. At Obeo, we have contributed to this journey …
David Delgado, Lola Burgueño, Robert Clarisó
Large Language Models (LLMs) are increasingly used for code generation, yet their support for programming languages is uneven, particularly for low-resource languages and infrequently used language constructs. Existing evaluation methodologies primarily assess functional correctn…
Antonino Yann William Gillard, Tetsuro Yamazaki, Tomoharu Ugawa
Effect handlers and dynamic wind provide mechanisms for implementing language constructs, such as generators and dynamically scoped variables, as libraries or embedded domain-specific languages (EDSLs). This paper presents a library implementation of dynamic wind in OCaml that is…
Duncan Guthrie, Paul Harvey, Michele Sevegnani
Resource Description Framework (RDF) is a widespread W3C standard defining a domain-specific language for knowledge representation, providing a platform to build higher-level languages such as OWL or SHACL. RDF concrete syntaxes define an external representation of its abstract m…
Christian Gutsche, Sebastian Götz, Uwe Aßmann
Context-awareness is crucial for developing cyber-physical systems to enable dynamic behavior. Context-oriented programming (COP) aims to improve the definition of context-dependent behavioral variations. However, existing layer-based COP approaches have two major limitations: la…
Georg Hinkel
Maintaining consistency across heterogeneous textual DSLs that describe the same system is a recurring challenge in software language engineering. We advocate a separation of concerns: (i) language-specific model-to-text synchronizations that relate the concrete syntax to its abs…
Akram Idani, Germán Vega
Model-driven transformations play a central role in MDE processes, yet their correctness is most often validated through testing or simulation. However, in contexts where critical scenarios may compromise system integrity or certification objectives, stronger guarantees are neces…
Luís Maia, Simão Cunha, João Saraiva
Just-in-time (JIT) compilation is a core feature of many modern programming languages, combining the portability of interpreted languages with the performance benefits of ahead-of-time compilation. Originally introduced to improve the runtime performance of interpreted languages,…
Uraz Odyurt, Ömer Sayilir, Mariëlle Stoelinga, Vadim Zaytsev
Industrial cyber-physical systems generate vast amounts of semi-structured time-series data that require careful preprocessing before they can be effectively used for machine learning applications such as fault detection and identification. Raw sensor datasets are often corrupted…
Emanuel Rodrigues, José Nuno Macedo, João Saraiva
This tool paper presents the Ztrategic framework, which integrates strategic term rewriting and attributes grammars through a unifying navigation abstraction based on functional zippers. The resulting zipper-based embedding is both concise and expressive, integrating the strength…
Ramy Shahin
Datalog is a lightweight logic programming language, based on the logic of Horn clauses. Lean, on the other hand, is a proof assistant system and language based on the Calculus of Inductive Constructions (CIC). Datalog is more constrained and less expressive than Lean but has a l…
Alberto Tontoni, Mikhail Barash
Many widely adopted programming languages (e.g., C++, Java, JavaScript, WebAssembly) have specification documents that provide authoritative answers about the language and its semantics. However, such specification documents are oftentimes demanding to read and navigate. This esp…
Vadim Zaytsev
The Software Language Engineering (SLE) community has accumulated nearly two decades of content. This content comprises not only papers as such, but also other tangible artefacts like conference descriptions, calls for papers, tools, repositories. Yet, the field's self-descriptio…
Anton Risberg Alaküla, Niklas Fors, Christoph Reichenbach
Many software language tools use declarative domain-specific languages (DDSLs) to implement parts of their functionality, such as context-free grammars for parsing or inference rules for type analysis. For interoperability and ease of use, DDSLs often rely on embedded general-pur…
Thorsten Berger
DSLs are the ultimate abstraction in software engineering. While programming languages have --- since the advent of computers --- continuously increased their level of abstraction, they are still limited to the domain of computing, with their instances containing many technicalit…
Luke Bessant, Eric Van Wyk
Recognizing that name binding is often done in an ad-hoc manner, Visser and his colleagues introduced scope graphs as a uniform representation of a program's static binding structure along with a generic means for interrogating that representation to resolve name references to th…
Michele Chiari, Michele Giornetta, Dino Mandrioli, Matteo Pradella
Deterministic parsing of tree-structured data is usually performed sequentially left-to-right. Recently however, also motivated by the need to process extremely large data sets, a parallel version thereof has been devised which, thanks to the theoretical features of operator prec…
Aleksandar S. Dimovski
Fault localization is an important step in software debugging that aims to isolate and localize the bugs (errors) to a small part of the program. This becomes more challenging in Software Product Lines (SPLs) due to the variable nature of bugs (so-called variability bugs). This p…
Joeri Exelmans, Ciprian Teodorov, Hans Vangheluwe
Live modeling is the ability to change an executable model at runtime, and without having to restart its execution. Sometimes this 'breaks' the ongoing execution, but in many cases, it does not have to. In earlier work, we reduced this problem to detecting fine-grained read/write…