- 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.