5.3.6

Syntax: Meta-Programming Helpers

    1 Parsing and Specifying Syntax

      1.1 Introduction

      1.2 Examples

        1.2.1 Phases and Reusable Syntax Classes

        1.2.2 Optional Keyword Arguments

        1.2.3 Variants with Uniform Meanings

        1.2.4 Variants with Varied Meanings

          1.2.4.1 Syntactic Normalization

          1.2.4.2 Non-syntax-valued Attributes

        1.2.5 More Keyword Arguments

        1.2.6 Contracts on Macro Sub-expressions

      1.3 Parsing Syntax

      1.4 Specifying Syntax with Syntax Classes

        1.4.1 Pattern Directives

        1.4.2 Pattern Variables and Attributes

      1.5 Syntax Patterns

        1.5.1 Single-term Patterns

        1.5.2 Head Patterns

        1.5.3 Ellipsis-head Patterns

        1.5.4 Action Patterns

      1.6 Defining Simple Macros

      1.7 Literal Sets and Conventions

      1.8 Library Syntax Classes and Literal Sets

        1.8.1 Syntax Classes

        1.8.2 Literal Sets

      1.9 Debugging and Inspection Tools

      1.10 Experimental

        1.10.1 Contracts for Macro Sub-expressions

        1.10.2 Contracts for Syntax Classes

        1.10.3 Reflection

        1.10.4 Procedural Splicing Syntax Classes

        1.10.5 Ellipsis-head Alternative Sets

        1.10.6 Syntax Class Specialization

        1.10.7 Syntax Templates

    2 Syntax Object Helpers

      2.1 Deconstructing Syntax Objects

      2.2 Matching Fully-Expanded Expressions

      2.3 Dictionaries with Identifier Keys

        2.3.1 Dictionaries for free-identifier=?

        2.3.2 Dictionaries for bound-identifier=?

      2.4 Hashing on bound-identifier=? and free-identifier=?

      2.5 Rendering Syntax Objects with Formatting

      2.6 Computing the Free Variables of an Expression

      2.7 Replacing Lexical Context

      2.8 Helpers for Processing Keyword Syntax

    3 Datum Pattern Matching

    4 Module-Processing Helpers

      4.1 Reading Module Source Code

      4.2 Getting Module Compiled Code

      4.3 Resolving Module Paths to File Paths

      4.4 Simplifying Module Paths

      4.5 Inspecting Modules and Module Dependencies

    5 Macro Transformer Helpers

      5.1 Extracting Inferred Names

      5.2 Support for local-expand

      5.3 Parsing define-like Forms

      5.4 Flattening begin Forms

      5.5 Expanding define-struct-like Forms

      5.6 Resolving include-like Paths

      5.7 Controlling Syntax Templates

    6 Reader Helpers

      6.1 Raising exn:fail:read

      6.2 Module Reader

    7 Parsing for Bodies

    8 Source Locations

      8.1 Representations

      8.2 Quoting

    9 Preserving Source Locations

    10 Non-Module Compilation And Expansion

    11 Trusting Standard Recertifying Transformers

    12 Attaching Documentation to Exports

    Index