| 123456789101112131415161718192021222324252627282930313233343536 |
- COMPILER M2c
- (* Phase 0: module skeleton only.
- Accepts "MODULE <name> ; [ BEGIN ] END <name> ." and checks that
- the closing name matches (error 202). No declarations, no
- statements, no symbol table yet — those arrive in Phase 1. *)
- CHARACTERS
- letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
- digit = "0123456789" .
- IGNORE CHR(9) .. CHR(13)
- COMMENTS
- FROM "(*" TO "*)" NESTED
- TOKENS
- ident = letter { letter | digit } .
- PRODUCTIONS
- M2c (. VAR m1, m2: ARRAY [0 .. 63] OF CHAR;
- i: CARDINAL; same: BOOLEAN; .)
- = "MODULE" ident (. LexName(m1); .)
- ";" [ "BEGIN" ] "END"
- ident (. LexName(m2);
- i := 0; same := TRUE;
- WHILE same & ((m1[i] # 0C)
- OR (m2[i] # 0C)) DO
- IF m1[i] # m2[i] THEN
- same := FALSE
- END;
- INC(i)
- END;
- IF ~same THEN SemError(202) END; .)
- "." .
- END M2c.
|