There are a couple of examples like this one where an 'end' is followed by code that seems to have been interpreted like the comment following a procedure. Can probably be fixed by adding ';'. procedure ARRAY DECLARATION; begin; integer N, COUNT; NEXT SYMBOL; LNC := LINE COUNTER; LINE; N := IDENTIFIER; DIMENSION := LIST LENGTH(N); COUNT := 1; NEXT: if LAST SYMBOL = COMMA then begin; NEXT SYMBOL; IDENTIFIER; COUNT := COUNT + 1; goto NEXT; end ifLAST_SYMBOL=SUBthenbegin; <------------- here IN ARRAY DECLARATION := TRUE; BOUND PAIR LIST; IN ARRAY DECLARATION := FALSE; end else ERRORMESSAGE(382); MACRO2(TNA, COUNT); MACRO2(TDA, DIMENSION); MACRO2(TAA, N); MACRO(ARR DECLA MACRO); if LAST SYMBOL = COMMA then ARRAY DECLARATION; end Array declaration; 'procedure' Array declaration; 'begin' 'integer' n, count; next symbol; lnc:= line counter; Line; n:= Identifier; dimension:= List length (n); count:= 1; next: 'if' last symbol= comma 'then' 'begin' next symbol; Identifier; count:= count + 1; 'goto' next 'end' 'if' last symbol = sub 'then' 'begin' in array declaration:= true; Bound pair list; in array declaration:= false 'end' 'else' ERRORMESSAGE (382); Macro2 (TNA, count); Macro2 (TDA, dimension); Macro2 (TAA, n); Macro (arr decla macro); 'if' last symbol = comma 'then' Array declaration 'end' Array declaration; end IFLAST_SYMBOL=COMMATHENARRAY_DECLARATION; end ifLAST_SYMBOL=SUBthenbegin IN ARRAY DECLARATION := FALSE; end else DIMENSION := 0; CHECK DIMENSION(N); if OWN TYPE then for I := 1 step 1 until COUNT do begin ADDRESS(N, INSTRUCT COUNTER); INSTRUCT COUNTER := INSTRUCT COUNTER + 3 × DIMENSION + 6; N := NEXT IDENTIFIER(N); end IFLAST_SYMBOL=COMMATHENARRAY_DECLARATION; end ARRAY DECLARATION; integer procedure BOUND PAIR LIST; begin NEXT SYMBOL; ARITHEXP; if LAST SYMBOL = COLON then begin NEXT SYMBOL; ARITHEXP; DIMENSION := LIST LENGTH(N); COUNT := 1; NEXT: if LAST SYMBOL = COMMA then begin NEXT SYMBOL; IDENTIFIER; COUNT := COUNT + 1; goto NEXT; end ifLAST_SYMBOL=SUBthenbegin IN ARRAY DECLARATION := TRUE; BOUND PAIR LIST; IN ARRAY DECLARATION := FALSE; end else ERRORMESSAGE(382); MACRO2(TNA, COUNT); MACRO2(TDA, DIMENSION); MACRO2(TAA, N); MACRO(ARR DECLA MACRO);