COMPILER M2c (* Phase 0: module skeleton only. Accepts "MODULE ; [ BEGIN ] END ." 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.