26,036 research outputs found
Phobos: A front-end approach to extensible compilers (long version)
This paper describes a practical approach for implementing certain types of domain-specific languages with extensible compilers. Given a compiler with one or more front-end languages, we introduce the idea of a "generic" front-end that allows the syntactic and semantic specification of domain-specific languages. Phobos, our generic front-end, offers modular language specification, allowing the programmer to define new syntax and semantics incrementally
Dual-Context Calculi for Modal Logic
We present natural deduction systems and associated modal lambda calculi for
the necessity fragments of the normal modal logics K, T, K4, GL and S4. These
systems are in the dual-context style: they feature two distinct zones of
assumptions, one of which can be thought as modal, and the other as
intuitionistic. We show that these calculi have their roots in in sequent
calculi. We then investigate their metatheory, equip them with a confluent and
strongly normalizing notion of reduction, and show that they coincide with the
usual Hilbert systems up to provability. Finally, we investigate a categorical
semantics which interprets the modality as a product-preserving functor.Comment: Full version of article previously presented at LICS 2017 (see
arXiv:1602.04860v4 or doi: 10.1109/LICS.2017.8005089
Capture-Avoiding and Hygienic Program Transformations
Program transformations in terms of abstract syntax trees compromise referential integrity by introducing variable capture. Variable capture occurs when in the generated program a variable declaration accidentally shadows the intended target of a variable reference. Existing transformation systems either do not guarantee the avoidance of variable capture or impair the implementation of transformations.
We present an algorithm called name-fix that automatically eliminates variable capture from a generated program by systematically renaming variables. name-fix is guided by a graph representation of the binding structure of a program, and requires name-resolution algorithms for the source language and the target language of a transformation. name-fix is generic and works for arbitrary transformations in any transformation system that supports origin tracking for names. We verify the correctness of name-fix and identify an interesting class of transformations for which name-fix provides hygiene. We demonstrate the applicability of name-fix for implementing capture-avoiding substitution, inlining, lambda lifting, and compilers for two domain-specific languages
Tracing program transformations with string origins
Program transformations play an important role in domain-specific languages and model-driven development. Tracing the execution of such transformations has well-known benefits for debugging, visualization and error reporting. In this paper we introduce string origins as a lightweight, generic and portable technique to establish a tracing relation between the textual fragments in the input and output of a program transformation. We discuss the semantics and the implementation of string origins using the Rascal meta programming language as an example. Furthermore, we illustrate the utility of string origins by presenting data structures and operations for tracing generated code, implementing protected regions, performing name resolution, and fixing inadvertent name capture in generated code
From nominal sets binding to functions and lambda-abstraction: connecting the logic of permutation models with the logic of functions
Permissive-Nominal Logic (PNL) extends first-order predicate logic with
term-formers that can bind names in their arguments. It takes a semantics in
(permissive-)nominal sets. In PNL, the forall-quantifier or lambda-binder are
just term-formers satisfying axioms, and their denotation is functions on
nominal atoms-abstraction.
Then we have higher-order logic (HOL) and its models in ordinary (i.e.
Zermelo-Fraenkel) sets; the denotation of forall or lambda is functions on full
or partial function spaces.
This raises the following question: how are these two models of binding
connected? What translation is possible between PNL and HOL, and between
nominal sets and functions?
We exhibit a translation of PNL into HOL, and from models of PNL to certain
models of HOL. It is natural, but also partial: we translate a restricted
subsystem of full PNL to HOL. The extra part which does not translate is the
symmetry properties of nominal sets with respect to permutations. To use a
little nominal jargon: we can translate names and binding, but not their
nominal equivariance properties. This seems reasonable since HOL---and ordinary
sets---are not equivariant.
Thus viewed through this translation, PNL and HOL and their models do
different things, but they enjoy non-trivial and rich subsystems which are
isomorphic
Static and dynamic semantics of NoSQL languages
We present a calculus for processing semistructured data that spans
differences of application area among several novel query languages, broadly
categorized as "NoSQL". This calculus lets users define their own operators,
capturing a wider range of data processing capabilities, whilst providing a
typing precision so far typical only of primitive hard-coded operators. The
type inference algorithm is based on semantic type checking, resulting in type
information that is both precise, and flexible enough to handle structured and
semistructured data. We illustrate the use of this calculus by encoding a large
fragment of Jaql, including operations and iterators over JSON, embedded SQL
expressions, and co-grouping, and show how the encoding directly yields a
typing discipline for Jaql as it is, namely without the addition of any type
definition or type annotation in the code
- …