mpl/glyph-escapes.md
developtheweb 468a8045c7 Sync all reference docs with the grammar
- precedence.csv regenerated to the actual 14-level chain (postfix and
  prefix levels, guarded alternatives, definition vs assignment)
- glyph-escapes.md regenerated from the lexer: 73 glyphs, exactly one
  ASCII escape each, verified code points; M1-deferred symbols listed
  separately; add \middot so every glyph has an escape
- math_prog_lang.md: M0/M1 symbol split, canonical handler arrow, one-role
  semicolon, real precedence table and brace-disambiguation rules; the ten
  example programs are now embedded verbatim and CI-parsed
- Whitepaper (md + tex + appendices): every mpl code block parses or is
  re-fenced as an explicitly-labelled M1+ design sketch; symbol tables
  replaced by a pointer to glyph-escapes.md; unbuilt tooling and unmeasured
  claims reworded as planned/envisioned
- docs/ARCHITECTURE.md: status preamble, real grammar excerpt, planned
  sections labelled as such
- DocumentationTest now also covers math_prog_lang.md and the whitepaper
- CHANGELOG and DECISIONS.md updated
2026-07-09 03:19:43 -04:00

162 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MPL Glyph Escape Sequences
This document is the authoritative mapping between ASCII escape sequences and
UTF-8 glyphs for the Mathematical Programming Language (MPL). It matches the
lexer rules in [`src/main/antlr4/MPL.g4`](src/main/antlr4/MPL.g4) exactly:
every escape below is accepted by the lexer, and no other escapes exist.
Each glyph has **exactly one** ASCII escape (One Right Answer). Symbols that
are plain ASCII (`; = < > + - ( ) [ ] { } : , _ | /` and the keywords
`true`/`false`) need no escape and have none.
## Greek Letters (Variables)
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\alpha` | U+03B1 | α | Variable |
| `\beta` | U+03B2 | β | Variable |
| `\gamma` | U+03B3 | γ | Variable |
| `\delta` | U+03B4 | δ | Variable |
| `\epsilon` | U+03B5 | ε | Variable |
| `\zeta` | U+03B6 | ζ | Variable |
| `\eta` | U+03B7 | η | Variable |
| `\theta` | U+03B8 | θ | Variable |
| `\iota` | U+03B9 | ι | Variable |
| `\kappa` | U+03BA | κ | Variable |
| `\lambda` | U+03BB | λ | Lambda / variable |
| `\mu` | U+03BC | μ | Variable |
| `\nu` | U+03BD | ν | Variable |
| `\xi` | U+03BE | ξ | Variable |
| `\omicron` | U+03BF | ο | Variable |
| `\pi` | U+03C0 | π | Variable |
| `\rho` | U+03C1 | ρ | Variable |
| `\sigma` | U+03C3 | σ | Variable |
| `\tau` | U+03C4 | τ | Variable |
| `\upsilon` | U+03C5 | υ | Variable |
| `\phi` | U+03C6 | φ | Variable |
| `\chi` | U+03C7 | χ | Variable |
| `\psi` | U+03C8 | ψ | Variable |
| `\omega` | U+03C9 | ω | Variable |
## Type Symbols
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\nat` | U+2115 | | Natural numbers |
| `\int` | U+2124 | | Integers |
| `\rat` | U+211A | | Rational numbers |
| `\real` | U+211D | | Real numbers |
| `\complex` | U+2102 | | Complex numbers |
| `\bool` | U+1D539 | 𝔹 | Booleans |
| `\bot` | U+22A5 | ⊥ | Bottom |
## Logic and Sets
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\in` | U+2208 | ∈ | Element of |
| `\emptyset` | U+2205 | ∅ | Empty set |
| `\and` | U+2227 | ∧ | Logical and |
| `\or` | U+2228 | | Logical or |
| `\implies` | U+27F9 | ⟹ | Implication / guard arrow |
| `\forall` | U+2200 | ∀ | Universal quantifier (iteration) |
## Operations
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\times` | U+00D7 | × | Multiplication |
| `\div` | U+00F7 | ÷ | Division (`/` is an ASCII alias) |
| `\ast` | U+2217 | | Generic operator |
| `\circ` | U+2218 | ∘ | Function composition |
## Relations
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\neq` | U+2260 | ≠ | Not equal |
| `\leq` | U+2264 | ≤ | Less than or equal |
| `\geq` | U+2265 | ≥ | Greater than or equal |
| `\approx` | U+2248 | ≈ | Approximately equal |
| `\sim` | U+223C | | Similar to |
## Definition and Assignment
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\leftarrow` | U+2190 | ← | Assignment |
| `\coloneq` | U+225C | ≜ | Definition |
## Effect Operators
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\raise` | U+21AF | ↯ | Raise exception |
| `\handle` | U+21B4 | ↴ | Handle exception (postfix) |
| `\parallel` | U+2016 | ‖ | Parallel composition |
| `\lceil` | U+2308 | ⌈ | Atomic section start |
| `\rceil` | U+2309 | ⌉ | Atomic section end |
| `\oplus` | U+2295 | ⊕ | Allocate resource (postfix) |
| `\ominus` | U+2296 | ⊖ | Release resource (postfix) |
| `\send` | U+21C0 | ⇀ | Send to channel: `⇀_ch expr` |
| `\receive` | U+21BD | ↽ | Receive from channel: `↽_ch expr` |
| `\trace` | U+270E | ✎ | Output / trace |
| `\break` | U+29C8 | ⧈ | Breakpoint |
| `\delay` | U+23F2 | ⏲ | Delay |
| `\periodic` | U+27F3 | ⟳ | Periodic task |
## Modules and Metaprogramming
| ASCII Escape | Unicode | Glyph | Usage |
|-------------|---------|-------|-------|
| `\module` | U+1D4DC | 𝓜 | Module declaration |
| `\Rightarrow` | U+21D2 | ⇒ | Export (module body follows) |
| `\middot` | U+2027 | ‧ | Qualified module access |
| `\path` | U+1F5AB | 🖫 | File path prefix |
| `\ulcorner` | U+231C | ⌜ | Code quotation start |
| `\urcorner` | U+231D | ⌝ | Code quotation end |
| `\llcorner` | U+231E | ⌞ | Code evaluation start |
| `\lrcorner` | U+231F | ⌟ | Code evaluation end |
| `\lbracket` | U+3014 | | RAII scope start |
| `\rbracket` | U+3015 | | RAII scope end |
| `\langle` | U+27E8 | ⟨ | Choice type start |
| `\rangle` | U+27E9 | ⟩ | Choice type end |
## String Escape Sequences
String literals in MPL support the following escape sequences within
double-quoted strings:
| Escape Sequence | Character | Description |
|----------------|-----------|-------------|
| `\\` | `\` | Backslash |
| `\"` | `"` | Double quote |
| `\n` | LF | Line feed (newline) |
| `\r` | CR | Carriage return |
| `\t` | TAB | Horizontal tab |
| `\0` | NUL | Null character |
| `\u{XXXXXX}` | Unicode | Unicode code point (1-6 hex digits) |
Examples:
- `"Hello\nWorld"` - String with newline
- `"Path: \"C:\\Users\""` - Escaped quotes and backslashes
- `"Unicode: \u{1F600}"` - Unicode emoji 😀
- `"""Raw string - no \n escapes"""` - Raw multi-line string
## Deferred to M1
The following glyphs appeared in earlier drafts but are **not** part of the
M0 grammar. Each returns only together with a defined semantic:
∩ ⊂ ⊃ ⊆ ⊇ ∉ ¬ ⟺ ∃ ⇐ → ⇡ ⇣ ⇆ ⟪ ⟫ ∑ √ ² `?` `%`
## Usage Notes
1. **Input methods:**
- Direct Unicode input (recommended for supported editors)
- ASCII escape sequences (for compatibility, work in any editor)
2. **Lexer behavior:**
- Escapes are alternatives in the lexer rules, processed during tokenization
- Unknown escapes are a lexical error
- Mixed Unicode/ASCII in the same file is allowed