The C programming language
Introduction to combinators and &lgr;-calculus
Introduction to combinators and &lgr;-calculus
Revised report on the algorithmic language scheme
ACM SIGPLAN Notices
Syntactic extensions in the programming language LISP
Syntactic extensions in the programming language LISP
Macro-by-example: Deriving syntactic transformations from their specifications
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Notational definition and top-down refinement for interactive proof development systems
Notational definition and top-down refinement for interactive proof development systems
On the expressive power of programming languages
Proceedings of the third European symposium on programming on ESOP '90
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Expansion-passing style: beyond conventional macros
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
The next 700 programming languages
Communications of the ACM
A staging calculus and its application to the verification of translators (preliminary report)
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Science of Computer Programming
ESOP'08/ETAPS'08 Proceedings of the Theory and practice of software, 17th European conference on Programming languages and systems
Hi-index | 0.00 |
Syntactic abbreviations or macros provide a powerful tool to increase the syntactic expressiveness of programming languages. The expansion of these abbreviations can be modeled with substitutions. This paper presents an operational semantics of macro expansions and evaluation where substitutions are handled explicitly. The semantics is defined in terms of a confluent, simple, and intuitive set of rewriting rules. The resulting semantics is also a basis for developing correct implementations.