step1)Commit 18e40b8 — "Phase-0 scaffolding — M2c module-skeleton compiler,
4/4 tests green" (29 files, +2756).
Prove the toolchain end to end before any language work: Coco/R grammar
→ generated scanner/parser/driver → gm2 -fiso build → test runner,
all inside a new m2c/ folder.
m2c/M2c.atg — module skeleton only:
MODULE <name> ; [ BEGIN ] END <name> ., with an inline
closing-name check (error 202). No declarations, statements, or
symbol table.m2c/compiler.frm — minimal driver (listing + StoreError,
ChangeExtension, FileIO-based main), custom message for 202.m2c/scanner.frm, m2c/parser.frm — proven FileIO-based Coco/R
frames, reused from the earlier CocoGm2 work.m2c/FileIO.def/.mod — I/O library, reused as-is.m2c/build.sh — regenerate (CRFRAMES=. $CRBIN -m -C M2c.atg,
CRBIN overridable), compile with gm2 -fiso, link via the
two-phase module-list workaround; produces ./M2c.m2c/run_tests.sh — expect_ok / expect_fail (checks .LST
message text, since listings show messages, not codes).| test | result |
|---|---|
| ok_minimal | MODULE M; BEGIN END M. accepted |
| ok_nobegin | MODULE M; END M. accepted |
| bad_mismatch | END N rejected with 202 |
| bad_syntax | missing . rejected with syntax error |
Both SemError (202) and SynError paths verified working.
M2c keeps generated modules short
(M2cS/M2cP/M2c, no Coco/R truncation surprises).m2comp/coco-chatgpt-doesntwork/ explicitly excluded from all work.