SPL Compiler Code
Student Programming Language (SPL) a subset of PL/I
Status: Beta
Brought to you by:
shoefoot
$PROCESS Character string test program. /* SPL does not have fixed length character strings. All strings are 0 to 4096 characters with the VARYING attribute. The SPL compiler requires a number after the keyword CHARACTER but this number is ignored. The keyword VARYING is permitted but it is also ignored. The following statements all do the same thing: DECLARE X CHARACTER(1)., DECLARE X CHARACTER(6) VARYING., DECLARE X CHARACTER(4096) VARYING., DECLARE X CHARACTER(JUST TYPE ANYTHING) VARYING., DECLARE X CHARACTER(32768)., DECLARE X VARYING CHARACTER(*)., */ STUFF: PROC; DCL I FIXED; END STUFF; STRINGS: PROCEDURE OPTIONS(MAIN); DECLARE I FIXED; TEST_COMPACTIFY: PROCEDURE; /* Create a bunch of strings that will fill up the string space */ DCL (A, N) CHARACTER(*); /* $G */ A, N = ''; DO I = 0 TO 1024; A = A || 'A'; END; DO I = 0 TO 1024; N = N || 'N'; END; DO I = 0 TO 20; A = 'n' || A; END; IF SUBSTR(A, 1, I) ^= SUBSTR(N, 1, I) THEN DO; PUT SKIP LIST('CONCATENATE or COMPACTIFY failed'); RETURN; END; PUT SKIP LIST('I =', I); PUT SKIP LIST('LENGTH(A) =', LENGTH(A)); PUT SKIP LIST('SUBSTR(A, 1, I + 1) =', SUBSTR(A, 1, I + 1)); END TEST_COMPACTIFY; /* $ S */ DCL A CHARACTER(LOTS) VARYING; DCL B CHARACTER(*) VARYING; A = 'String'; CALL TEST_COMPACTIFY; END STRINGS; $DATA $PROCESS Label test /* $E */ TEST_LABEL: PROCEDURE OPTIONS(MAIN); DECLARE I FIXED; I = 4; ; LAB_A: LAB_B: LAB_C: ; LAB_D: LAB_E: LAB_F: ; END TEST_LABEL; $DATA