|
|
@@ -0,0 +1,51 @@
|
|
|
+# m2comp step 1.1 — bare subrange type + syntax showcase (tag: `m2comp-step1.1`)
|
|
|
+
|
|
|
+Follow-up to step 1 (`m2comp-step1`): one grammar fix found while
|
|
|
+writing a full-syntax showcase, plus the showcase itself as a
|
|
|
+regression test.
|
|
|
+
|
|
|
+## Grammar fix
|
|
|
+
|
|
|
+- `Type` was missing the bare-subrange alternative `[lo .. hi]`
|
|
|
+ (only `IndexType` had it), so `TYPE Sub = [0 .. 9];` failed with
|
|
|
+ `invalid Type`. Added the alternative to `Type`, mirroring
|
|
|
+ `SimpleType` in `m2c`/`pimmod2.atg`. Still LL(1)-clean, rebuilt
|
|
|
+ via `build.sh` (`M2compP.mod` regenerated).
|
|
|
+
|
|
|
+## Showcase — `tests/showcase.mod` (accepted)
|
|
|
+
|
|
|
+Exercises every `M2comp.atg` production in one program module:
|
|
|
+
|
|
|
+- both `IMPORT` forms (`FROM In IMPORT x`, `IMPORT y, z`);
|
|
|
+- `CONST` with decimal, `0FFH` hex, reals (`3.14`, `2.0E+3`),
|
|
|
+ both string quotes, unary-minus expr (`-N + 2`);
|
|
|
+- all six `Type` alternatives: qualified+subrange (`INTEGER[1..N]`),
|
|
|
+ bare `[0..9]`, abbreviated 2-D `ARRAY`, `RECORD`/empty record,
|
|
|
+ `SET OF`, `POINTER TO`;
|
|
|
+- procedures with `VAR` params, function result, nesting;
|
|
|
+- local `MODULE` with `[Priority]`, `FROM..IMPORT`,
|
|
|
+ `EXPORT QUALIFIED`, own procedure + `BEGIN` init body;
|
|
|
+- all statement forms: assign, calls (with/without parens, bare),
|
|
|
+ `IF/ELSIF/ELSE`, `WHILE`, `REPEAT/UNTIL`, `LOOP/EXIT`, `FOR/BY`,
|
|
|
+ `RETURN` with and without expression;
|
|
|
+- all relations (`= # <> < <= > >= IN`), `OR/AND/NOT/DIV/MOD`,
|
|
|
+ `+x`, `-Factor` (`-k + 1`), `^` deref, multi-index `m[1,2]`,
|
|
|
+ dotted `Local.q`, nested `(* *)` comments.
|
|
|
+
|
|
|
+## Tests — 4/4 (`run_tests.sh`)
|
|
|
+
|
|
|
+| test | result |
|
|
|
+| ---- | ------ |
|
|
|
+| ok_minimal | accepted |
|
|
|
+| ok_proc | accepted |
|
|
|
+| showcase | accepted |
|
|
|
+| bad_mismatch | rejected (`Incorrect source`) |
|
|
|
+
|
|
|
+## Notes
|
|
|
+
|
|
|
+- Two test-authoring slips (not grammar bugs): local `MODULE`
|
|
|
+ declarations need `;` not `.` (`END Local;`).
|
|
|
+- Still open from step 1: drop `<>` (§2.2)? `(*$ *)` pragma
|
|
|
+ section (§2.3/2.4)? Nested-`ARRAY OF ARRAY` long-form flag
|
|
|
+ (step-2 semantic check)?
|
|
|
+- Next: step 2 `SymTab` (200/201/202/210-224 checks) + MC64 backend.
|