<> <> <> DIRECTORY Rope; Codes: CEDAR DEFINITIONS = { ROPE: TYPE = Rope.ROPE; Alphabet: TYPE = REF AlphabetPrivate; AlphabetPrivate: TYPE = RECORD [ chars: ROPE, includes: ARRAY CHAR OF BOOL ]; Code: TYPE = REF CodePrivate; CodePrivate: TYPE = RECORD [ to: ARRAY Language OF DecisionTree, dangles: ARRAY Language OF INT, size: INT ]; Language: TYPE = {A, B}; DecisionTree: TYPE = REF DecisionTreePrivatePrivate; DecisionTreePrivate: TYPE = RECORD [ variant: SELECT kind: * FROM branch => [a: ARRAY CHAR OF DecisionTree _ ALL[NIL]], leaf => [r: Relation], ENDCASE]; Relation: TYPE = REF RelationPrivate; RelationPrivate: TYPE = RECORD [ codeword: ARRAY Language OF ROPE, index: INT]; OtherLanguage: ARRAY Language OF Language = [A: B, B: A]; Translate: PROC [code: Code, source: ROPE, to: Language] RETURNS [translated: ROPE]; }.