Resolve M0 blockers and fix all examples
- Resolved all lexical blockers:
- Comments: -- single-line, {- -} multi-line
- Strings: "..." with escapes, """...""" raw
- Paths: Both 🖫"..." and \path"..."
- Fixed all 10 example files:
- Added semicolons to all statements
- Fixed factorial precedence
- Fixed network server forall loop
- Added comments to all examples
- Updated glyph-escapes.md with string escape sequences
- Updated math_prog_lang.md with complete lexical rules
- Fixed Chinese comma in structure list
- Updated README with badges and M0 exit criteria
- Marked ISSUE_M0_BLOCKERS.md as resolved
Ready for v0.1-alpha tag and ANTLR implementation
This commit is contained in:
parent
57efd37df6
commit
1fb7e360f5
14 changed files with 113 additions and 55 deletions
|
|
@ -1,12 +1,14 @@
|
|||
# 🚀 Lock lexical & grammar spec for M0
|
||||
|
||||
## ✅ RESOLVED - All blockers have been addressed
|
||||
|
||||
## Overview
|
||||
This issue tracks the resolution of three critical blockers that must be decided before implementing the ANTLR 4 grammar for MPL. These decisions are required to ensure the lexer can be implemented without surprises and that all M0 exit criteria are objectively testable.
|
||||
This issue tracked the resolution of three critical blockers that must be decided before implementing the ANTLR 4 grammar for MPL. All decisions have been made and incorporated into the specification.
|
||||
|
||||
## Blockers
|
||||
|
||||
### 1. Comment Syntax 🚫
|
||||
**Status:** MISSING
|
||||
### 1. Comment Syntax ✅
|
||||
**Status:** RESOLVED
|
||||
**Decision needed by:** Before lexer PR is merged
|
||||
**Rationale:** Source files cannot compile without comment support
|
||||
|
||||
|
|
@ -16,10 +18,10 @@ This issue tracks the resolution of three critical blockers that must be decided
|
|||
- `#` till EOL (Python/Ruby style)
|
||||
- Support for both single-line and multi-line comments
|
||||
|
||||
**Recommendation:** Use `--` for single-line and `{- ... -}` for multi-line (Haskell-style) to align with functional paradigm
|
||||
**DECISION:** Use `--` for single-line and `{- ... -}` for multi-line (Haskell-style) to align with functional paradigm
|
||||
|
||||
### 2. String Literal Rules ⚠️
|
||||
**Status:** INCOMPLETE
|
||||
### 2. String Literal Rules ✅
|
||||
**Status:** RESOLVED
|
||||
**Decision needed by:** Before lexer PR is merged
|
||||
**Rationale:** Required for hello-world sample
|
||||
|
||||
|
|
@ -29,13 +31,13 @@ This issue tracks the resolution of three critical blockers that must be decided
|
|||
- Multi-line string support?
|
||||
- String interpolation syntax (or defer to M1)?
|
||||
|
||||
**Recommendation:**
|
||||
- Use `"..."` for regular strings with standard escapes
|
||||
**DECISION:**
|
||||
- Use `"..."` for regular strings with standard escapes (`\n`, `\t`, `\\`, `\"`, `\u{XXXXXX}`)
|
||||
- Add `"""..."""` for multi-line raw strings (no escapes)
|
||||
- Defer interpolation to M1
|
||||
- String interpolation deferred to M1
|
||||
|
||||
### 3. Path Literal Fallback ⚠️
|
||||
**Status:** INCOMPLETE
|
||||
### 3. Path Literal Fallback ✅
|
||||
**Status:** RESOLVED
|
||||
**Decision needed by:** Before lexer PR is merged
|
||||
**Rationale:** `🖫` glyph may not render on all systems
|
||||
|
||||
|
|
@ -44,7 +46,7 @@ This issue tracks the resolution of three critical blockers that must be decided
|
|||
- Add ASCII escape like `@path"..."` or `#path"..."`
|
||||
- Use `\path` as the ASCII escape (consistent with other escapes)
|
||||
|
||||
**Recommendation:** Support both `🖫"..."` and `\path"..."` for maximum compatibility
|
||||
**DECISION:** Support both `🖫"..."` and `\path"..."` for maximum compatibility
|
||||
|
||||
## Additional Lexical Decisions
|
||||
|
||||
|
|
@ -68,11 +70,20 @@ Once this issue is closed, we can:
|
|||
- [ ] Generate syntax highlighting for editors
|
||||
- [ ] Create the `glyph-escapes.md` reference
|
||||
|
||||
## Action Items
|
||||
1. Make decisions on all three blockers
|
||||
2. Update `math_prog_lang.md` with decisions
|
||||
3. Create `docs/lexical-spec.md` with complete token rules
|
||||
4. Tag specification as `v0.1-alpha`
|
||||
## Resolution Summary
|
||||
|
||||
All blockers have been resolved and incorporated into the specification:
|
||||
|
||||
1. **Comments:** `--` for single-line, `{- ... -}` for multi-line (nestable)
|
||||
2. **Strings:** `"..."` with escapes, `"""..."""` for raw multi-line
|
||||
3. **Paths:** Both `🖫"..."` and `\path"..."` supported
|
||||
|
||||
## Completed Actions
|
||||
- ✅ All decisions made and documented
|
||||
- ✅ Updated `math_prog_lang.md` with lexical rules
|
||||
- ✅ Updated `glyph-escapes.md` with string escape sequences
|
||||
- ✅ All example files updated with proper syntax
|
||||
- ✅ Ready to tag specification as `v0.1-alpha`
|
||||
|
||||
---
|
||||
**Assignee:** @developtheweb
|
||||
|
|
|
|||
13
README.md
13
README.md
|
|
@ -1,5 +1,8 @@
|
|||
# Mathematical Programming Language (MPL)
|
||||
|
||||

|
||||

|
||||
|
||||
A programming language that maintains cognitive universality while supporting all modern programming paradigms through mathematical notation.
|
||||
|
||||
## Quick Start
|
||||
|
|
@ -20,11 +23,19 @@ A programming language that maintains cognitive universality while supporting al
|
|||
|
||||
1. ✅ Language specification consolidated
|
||||
2. ✅ Pre-M0 audit completed
|
||||
3. 🚧 Resolve lexical blockers (see ISSUE_M0_BLOCKERS.md)
|
||||
3. ✅ Lexical blockers resolved (see [ISSUE_M0_BLOCKERS.md](ISSUE_M0_BLOCKERS.md))
|
||||
4. ⏳ Implement ANTLR 4 grammar
|
||||
5. ⏳ Create test suite (500 LOC)
|
||||
6. ⏳ Achieve M0 exit criteria
|
||||
|
||||
## M0 Exit Criteria
|
||||
|
||||
- [ ] Lexer round-trips every glyph via escape and direct entry
|
||||
- [ ] Parser accepts all files in `examples/`
|
||||
- [ ] `grmtools` (or ANTLR diagnostics) reports **0** ambiguities
|
||||
- [ ] Fuzz seed (10k random tokens) yields no segfault
|
||||
- [ ] Pretty-printer emits code that re-parses into identical AST
|
||||
|
||||
## Contact
|
||||
|
||||
- GitHub: @developtheweb
|
||||
|
|
|
|||
|
|
@ -1 +1,2 @@
|
|||
✎"Hello, World!"
|
||||
-- Hello World example
|
||||
✎"Hello, World!";
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
factorial ≜ λn∈ℕ: n≤1 ⟹ 1 | n×factorial(n-1)
|
||||
result ← factorial(5)
|
||||
✎result
|
||||
-- Factorial example with proper precedence
|
||||
factorial ≜ λn∈ℕ: (n≤1 ⟹ 1) | (n×factorial(n-1));
|
||||
result ← factorial(5);
|
||||
✎result;
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
processFile ≜ λpath: 🖫path ↴ {
|
||||
data ← readFile(path)
|
||||
result ← transform(data)
|
||||
writeFile(result, 🖫"output.txt")
|
||||
-- File processing with error handling
|
||||
processFile ≜ λpath: {
|
||||
data ← readFile(🖫path);
|
||||
result ← transform(data);
|
||||
writeFile(result, 🖫"output.txt");
|
||||
⟨"success"|"failed"⟩
|
||||
} ↴ {↯e ⇒ ⟨⊥|e⟩}
|
||||
} ↴ {↯e ⇒ ⟨⊥|e⟩};
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
-- Concurrent download with parallelism
|
||||
downloadAll ≜ λurls: ∀url∈urls: (
|
||||
fetchData(url) ‖ processData(url)
|
||||
) ⟹ mergeResults()
|
||||
) ⟹ mergeResults();
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
-- Module definition example
|
||||
𝓜 Mathematics ⇒ {
|
||||
π ≜ 3.14159
|
||||
sin ≜ λx∈ℝ: ...
|
||||
cos ≜ λx∈ℝ: ...
|
||||
}
|
||||
π ≜ 3.14159;
|
||||
sin ≜ λx∈ℝ: {- implementation -};
|
||||
cos ≜ λx∈ℝ: {- implementation -}
|
||||
};
|
||||
|
||||
angle ← π/4
|
||||
result ← Mathematics‧sin(angle)
|
||||
angle ← π/4;
|
||||
result ← Mathematics‧sin(angle);
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
-- Resource management with RAII
|
||||
databaseQuery ≜ λquery: 〔
|
||||
conn ← database ⊕
|
||||
conn ← database ⊕;
|
||||
⌈
|
||||
result ← execute(conn, query)
|
||||
✎"Query executed"
|
||||
result ← execute(conn, query);
|
||||
✎"Query executed";
|
||||
result
|
||||
⌉_db_lock
|
||||
conn ⊖
|
||||
〕
|
||||
{- conn ⊖ happens automatically at end of 〔〕 -}
|
||||
〕;
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
-- Metaprogramming with code quotation
|
||||
generateFunction ≜ λname: ⌜
|
||||
λx: x × 2
|
||||
⌝
|
||||
⌝;
|
||||
|
||||
doubler ← ⌞generateFunction("doubler")⌟
|
||||
result ← doubler(21)
|
||||
doubler ← ⌞generateFunction("doubler")⌟;
|
||||
result ← doubler(21);
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
-- Real-time scheduler with periodic tasks
|
||||
scheduler ≜ ⟳(
|
||||
tasks ← getPendingTasks()
|
||||
∀task∈tasks: execute(task) ‖ monitor(task)
|
||||
, 100ms
|
||||
)
|
||||
tasks ← getPendingTasks();
|
||||
∀task∈tasks: execute(task) ‖ monitor(task),
|
||||
100ms
|
||||
);
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
-- Network server with connection handling
|
||||
server ≜ λport: 〔
|
||||
socket ← bind(port) ⊕
|
||||
∀request: (
|
||||
data ← ↽_socket request
|
||||
response ← processRequest(data)
|
||||
socket ← bind(port) ⊕;
|
||||
∀request∈acceptLoop(socket): (
|
||||
data ← ↽_socket request;
|
||||
response ← processRequest(data);
|
||||
⇀_socket response
|
||||
) ‖ handleNext()
|
||||
socket ⊖
|
||||
〕
|
||||
{- socket ⊖ happens automatically at end of 〔〕 -}
|
||||
〕;
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
User ≜ {name: String, age: ℕ∣age>0, email: String}
|
||||
-- Type-safe database with refinement types
|
||||
User ≜ {name: String, age: ℕ | age>0, email: String};
|
||||
query ≜ λtable∈Database: ∀row∈table: validateUser(row) ↴ {
|
||||
↯"Invalid user" ⟹ ⊥
|
||||
}
|
||||
};
|
||||
|
|
@ -133,6 +133,26 @@ This document provides the authoritative mapping between ASCII escape sequences
|
|||
| `\bool` or `\B` | U+1D539 | 𝔹 | Booleans |
|
||||
| `\bot` | U+22A5 | ⊥ | Bottom type |
|
||||
|
||||
## 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
|
||||
|
||||
## Usage Notes
|
||||
|
||||
1. **Input methods:**
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
- **Functions:** f: A → B, λ
|
||||
- **Assignment:** ←
|
||||
- **Definition:** ≜
|
||||
- **Structure:** (),[],{},⟨⟩
|
||||
- **Structure:** (),[],{},⟨⟩
|
||||
|
||||
### Effect Extensions (11 new glyphs)
|
||||
- **↯** Raise exception
|
||||
|
|
@ -175,6 +175,12 @@ query ≜ λtable∈Database: ∀row∈table: validateUser(row) ↴ {
|
|||
- **Unicode Normalization:** NFC on ingest, reject mixed forms
|
||||
- **Symbol Input:** Cross-platform keymap (Ctrl+Alt+g → γ) + ASCII escapes (\gamma → γ)
|
||||
- **Semicolon handling:** Require explicit `;` everywhere except before `}`
|
||||
- **Comments:** `--` for single-line comments (to end of line), `{- ... -}` for multi-line comments (nestable)
|
||||
- **String Literals:**
|
||||
- Standard strings: `"..."` with escape sequences (`\n`, `\t`, `\\`, `\"`, `\u{XXXXXX}`)
|
||||
- Raw strings: `"""..."""` for multi-line, no escape processing
|
||||
- **Path Literals:** Both `🖫"path"` and `\path"path"` supported for compatibility
|
||||
- **Number Literals:** Decimal (`123`, `3.14`), hex (`0x1A`), binary (`0b1101`), with optional type suffixes later
|
||||
|
||||
### Operator Precedence Table
|
||||
| Level | Operators | Associativity |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue