RosettaCodeData/Task/Introspection/ALGOL-68/introspection-2.alg

51 lines
2.4 KiB
Plaintext

BEGIN
MODE SSMODES = UNION(SHORT SHORT BITS, SHORT SHORT BYTES, #SHORT SHORT CHAR,#
SHORT SHORT INT, SHORT SHORT REAL, SHORT SHORT COMPL);
MODE SMODES = UNION(SHORT BITS, SHORT BYTES, #SHORT CHAR,#
SHORT INT, SHORT REAL, SHORT COMPL);
MODE NMODES = UNION(BITS, BYTES, CHAR, INT, REAL, COMPL);
MODE LMODES = UNION(LONG BITS, LONG BYTES, #LONG CHAR,#
LONG INT, LONG REAL, LONG COMPL);
MODE LLMODES = UNION(LONG LONG BITS, LONG LONG BYTES, #LONG LONG CHAR,#
LONG LONG INT, LONG LONG REAL, LONG LONG COMPL);
MODE XMODES = UNION(BOOL, SEMA, STRING, VOID, CHANNEL, FILE, FORMAT);
MODE MODES = UNION(SSMODES, SMODES, NMODES, LLMODES, LMODES, XMODES);
OP REPRTYPEOF = (MODES val)STRING:
CASE val IN
(VOID):"VOID",
(INT):"INT",(SHORT INT):"SHORT INT",(SHORT SHORT INT):"SHORT SHORT INT",
(LONG INT):"LONG INT",(LONG LONG INT):"LONG LONG INT",
(REAL):"REAL",(SHORT REAL):"SHORT REAL",(SHORT SHORT REAL):"SHORT SHORT REAL",
(LONG REAL):"LONG REAL",(LONG LONG REAL):"LONG LONG REAL",
(COMPL):"COMPL",(SHORT COMPL):"SHORT COMPL",(SHORT SHORT COMPL):"SHORT SHORT COMPL",
(LONG COMPL):"LONG COMPL",(LONG LONG COMPL):"LONG LONG COMPL",
(BITS):"BITS",(SHORT BITS):"SHORT BITS",(SHORT SHORT BITS):"SHORT SHORT BITS",
(LONG BITS):"LONG BITS",(LONG LONG BITS):"LONG LONG BITS",
(BYTES):"BYTES",(SHORT BYTES):"SHORT BYTES",(SHORT SHORT BYTES):"SHORT SHORT BYTES",
(LONG BYTES):"LONG BYTES",(LONG LONG BYTES):"LONG LONG BYTES",
(CHAR):"CHAR",#(SHORT CHAR):"SHORT CHAR",(SHORT SHORT CHAR):"SHORT SHORT CHAR",
(LONG CHAR):"LONG CHAR",(LONG LONG CHAR):"LONG LONG CHAR",#
(BOOL):"BOOL",
(STRING):"STRING",
(SEMA):"SEMA",
(CHANNEL):"CHANNEL",
(FILE):"FILE",
(FORMAT):"FORMAT"
OUT
"ARRAY, PROC or STRUCT"
ESAC;
[]MODES x = (EMPTY, 1, 2.0, 3I4, SHORT SHORT 5, SHORT 6, LONG 7, LONG LONG 8,
8r666, bytes pack("abc"), TRUE, "xyz", LEVEL 1,
stand in channel, stand in, $ddd$);
STRING sep := "";
print(("Array member types: "));
FOR i TO UPB x DO
print((sep,REPRTYPEOF x[i]));
sep := ", "
OD
END