'BEGIN' 'COMMENT' LIBRARY 1; 'INTEGER' SUM; 'PROCEDURE' P1(S, R, I, B, RA, IA); 'STRING' S; 'REAL' R; 'INTEGER' I; 'BOOLEAN' B; 'REAL' 'ARRAY' RA; 'INTEGER''ARRAY' IA; SUM := SUM + R + I + ('IF' B 'THEN' 1 'ELSE' 0) + RA[1] + IA[1]; 'PROCEDURE' P2(BA, L, SW, PR, RPR, IPR, BPR); 'BOOLEAN' 'ARRAY' BA; 'LABEL' L; 'SWITCH' SW; 'PROCEDURE' PR; 'REAL' 'PROCEDURE' RPR; 'INTEGER''PROCEDURE' IPR; 'BOOLEAN' 'PROCEDURE' BPR; 'BEGIN' PR; SUM := SUM + RPR + IPR; 'IF' BPR 'THEN' 'GOTO' L; 'IF' BA[1] 'THEN' 'GOTO' SW[2] 'END'; 'PROCEDURE' P3(R, I, B, RA, IA, BA, L); 'VALUE' R, I, B, RA, IA, BA, L; 'REAL' R; 'INTEGER' I; 'BOOLEAN' B; 'REAL' 'ARRAY' RA; 'INTEGER''ARRAY' IA; 'BOOLEAN' 'ARRAY' BA; 'LABEL' L; 'BEGIN' SUM := SUM + R + I + RA[1] + IA[1] + ('IF' B 'THEN' 1 'ELSE' 0) + ('IF' BA[1] 'THEN' 1 'ELSE' 0); 'IF' BA[1] 'THEN' 'GOTO' L 'END'; 'REAL' R; 'BOOLEAN' B; 'REAL' 'ARRAY' RA[1 : 1]; 'INTEGER''ARRAY' IA[1 : 1]; 'BOOLEAN' 'ARRAY' BA[1 : 1]; 'INTEGER''PROCEDURE' IPR; IPR := 2 * SUM; 'REAL' 'PROCEDURE' RPR; RPR := 3 * SUM; 'BOOLEAN' 'PROCEDURE' BPR; BPR := 'NOT' B; 'PROCEDURE' PR; SUM := 5 * SUM + 1; 'SWITCH' SS := WORK, FAIL; SUM := 0; IA[1] := - 2; RA[1] := 3.55; BA[1] := 'FALSE'; B := 'TRUE'; R := 6.4; P1( , R, SUM, B, RA, IA); 'IF' SUM # 9 'THEN' OUTREAL(99, SUM); P2(BA, SS[2], SS, PR, RPR, IPR, BPR); 'IF' SUM # 276 'THEN' OUTREAL(99, SUM); WORK :; OUTREAL(99, 0); P3(4.6, - 200, 'TRUE', RA, IA, BA, 'IF' 'TRUE' 'THEN' SS[2] 'ELSE' FAIL); 'IF' SUM # 83 'THEN' OUTREAL(99, SUM); P1( , RPR, IPR, BPR, RA, IA); 'IF' SUM # 500 'THEN' OUTREAL(99, SUM); P3(RPR, IPR, BPR, RA, IA, BA, FAIL); 'IF' SUM # 3002 'THEN' OUTREAL(99, SUM); 'IF' 'FALSE' 'THEN' FAIL : OUTREAL(99, - 1); 'END'