Logic for problem-solving
The Semantics of Predicate Logic as a Programming Language
Journal of the ACM (JACM)
A Sampler of Formal Definitions
ACM Computing Surveys (CSUR)
What can we do about the unnecessary diversity of notation for syntactic definitions?
Communications of the ACM
Natural Language Communication with Computers
Formalization and automatic derivation of code generators.
Formalization and automatic derivation of code generators.
An exercise in denotational semantics
SIGCSE '91 Proceedings of the twenty-second SIGCSE technical symposium on Computer science education
Implementing denotational semantics with logic programming
CSC '92 Proceedings of the 1992 ACM annual conference on Communications
Denotational semantics using horn concurrent transaction logic
ICLP'05 Proceedings of the 21st international conference on Logic Programming
Hi-index | 0.00 |
There have been many papers, conferences and theses concerned with the task of defining programming languages. Yet, twenty years after McCarthy's (1962) seminal paper there is still no widely accepted method which will deal with all parts of a language clearly and concisely. Everyone who invents a language writes a BNF definition and the more theoretically minded will attempt a denotational semantics. For a complete definition of the syntax, attribute grammars are gaining increasing acceptance while more practically minded language designers will use one of the compiler definition languages such as Meta4 or CDL. At the same time as the PROLOG language was defined, a grammar system called Metamorphosis Grammar (M-grammar for short) was invented by Colmerauer (1978). This has been shown to be suitable (Moss 1981) for defining both the full syntax and semantics of programming languages. The present paper attempts to give an overview of this method in the form of a practical guide to writing a language definition. This includes the context sensitive syntax, and semantics using denotational, relational or axiomatic methods. This definition is not simply of theoretical interest. Since PROLOG is a practical programming language, though with a sound theoretical basis (Warren, Pereira, Pereira 1977), the definition can be used as a prototyping tool for a new language. With the addition of plan-formation techniques one might form a PROLOG based compiler generator and by adding other axioms form a program proving system.