- 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
- Rewrite all mpl code blocks in canonical syntax: ✎ output, guarded
alternatives, f(a, b) calls, -- comments; remove 📤, ternary ?:, %, ∑,
√, ², |x|, ranges, indexing/slicing and where (deferred to M1, and the
README now says so explicitly)
- Add DocumentationTest: extracts every fenced mpl block from README.md
and asserts it parses, preventing future drift
- Replace '1000+ test cases' and 'zero ambiguities' with claims CI
actually checks (zero ANTLR errors/warnings, 10/10 examples, 200+
syntax assertions)
- Remove unmeasured performance metrics section
- Mark type checking, code generation and non-escape input methods as
planned/envisioned rather than existing
- Fix clone URL (github.com/developtheweb/mpl); replace the fictional
Discord link with GitHub issues
- Commit gradlew, gradlew.bat and gradle/wrapper so ./gradlew build works
from a fresh clone as the README instructs (Gradle 8.7)
- Fix .gitignore rule order: *.jar came after the wrapper-jar negation and
the last matching rule wins, so the wrapper jar was still ignored
- CI on push and pull request: build (grammar with -Werror), test, and
parseExamples
- 03: handler clause uses the canonical arrow (↯e ⟹ …, was ↯e ⇒ …)
- 05: give sin/cos a real placeholder body (⊥) — a comment-only body is
empty and cannot parse
- Run parseExamples on the test runtime classpath; ParseExamples lives in
the test source set and was never found on main.runtimeClasspath
./gradlew parseExamples now reports 10/10 PASS
- Function calls are f(a, b) via a postfix argument list; juxtaposition
application removed; nullary calls f() supported
- Wire DEFINITION (x ≜ e), ALLOC/RELEASE postfix (r ⊕ / r ⊖), channel
operations (⇀_ch e / ↽_ch e), and qualified module access (M‧f)
- Delete tokens with no rule and no example: QUERY (?), EXISTS, IMPORT,
ARROW, DOT; delete the unary ? prefix operator
- Canonical handler clause: ↯pattern ⟹ expr (pattern is an identifier or
a string); clauses separated by semicolons
- SEMICOLON has one role: sequence separator with optional trailing use
- Disambiguate braces structurally: record ({a: e}), set ({a, b}), block
- IDENTIFIER no longer allows a leading underscore, so subscripts such as
⌉_db_lock and ↽_socket lex as UNDERSCORE + IDENTIFIER
- Add '/' as ASCII alias of ÷; add unary minus; pathLiteral accepts
🖫identifier as well as 🖫"…"
- Exactly one ASCII escape per glyph (drop \lam, \gets, \ne, \le, \ge,
\vee, \wedge, \cup alias forms, \N, \Z, \Q, \R, \C, \B)
- Replace deprecated ANTLRInputStream with CharStreams in the test
harness: it fed UTF-16 units and could never tokenize the
supplementary-plane glyphs 𝔹, 𝓜 and 🖫
- Update LexerTest/ParserTest to canonical syntax; add coverage for
subscript lexing, channels, resources, module access, unary minus,
nullary calls, and negative tests for juxtaposition and the ternary
- Restructure conditionals into a condExpr precedence level and exception
handling into a postfix rule, removing the mutual left recursion through
expr/atomExpr (ANTLR error 119)
- Rewrite pattern as patternAtom (COMMA patternAtom)*, removing left
recursion with an empty-matchable tail (ANTLR error 148)
- Drop the LAMBDA token fully shadowed by LAMBDA_VAR (warning 184)
- Give \Rightarrow to EXPORT only; IMPLIES keeps \implies (warning 184)
- Remove @header package declaration that duplicated the -package argument
and made the generated parser uncompilable
- Point the ANTLR source set at src/main/antlr4 so Gradle actually finds
the grammar
- Treat ANTLR warnings as errors (-Werror)
- Record decisions in DECISIONS.md
A proof-of-concept parser demonstrating that programming languages can be built
entirely from mathematical notation, enabling cognitive universality in computing.
MPL replaces English keywords with mathematical symbols, making programming
accessible to the 80% of humanity who don't speak English. Every design decision
follows the Fatima Test: "Will this make sense to a 10-year-old who doesn't
speak English?"
Current implementation:
- Complete ANTLR 4 grammar with 70+ mathematical operators
- Parser supporting all major programming paradigms
- Zero grammar ambiguities
- ASCII escape sequences for every Unicode symbol
This release contains:
- Core parser implementation
- Grammar specification
- Example programs
- Comprehensive documentation
- Whitepaper outlining the vision
Note: This is a parser-only proof of concept. Programs can be parsed but not
executed. The interpreter and runtime are future work.