<> <> <> DIRECTORY IO, Rope USING [ROPE], Vector USING [VEC], BigInts, BigReals; InternalExpr: CEDAR DEFINITIONS ~ BEGIN <> ROPE: TYPE ~ Rope.ROPE; VEC: TYPE ~ Vector.VEC; <> ATOMIC: TYPE ~ RECORD[ SELECT type:* FROM integer => [val: BigInts.BigInt], real => [val: BigReals.BigReal], symbol => [val: ATOM], ENDCASE ]; EXPR: TYPE ~ REF InternalExprRep; InternalExprRep: TYPE ~ RECORD [ SELECT type:* FROM atomic => [val: ATOMIC], -- non recursive part of expression function => [ -- recursive part of expression name: EXPR, subExprs: LIST OF EXPR _ NIL ], ENDCASE ]; <<>> <> RopeFromExpr: PROC[expr: EXPR] RETURNS[ROPE]; <> << by ExprFromRope[].>> <<>> ExprFromRope: PROC[r: ROPE] RETURNS[EXPR]; <> << SIGNALS parseError if r is malformed.>> <<>> ExprFromStream: PROC[stream: IO.STREAM] RETURNS[EXPR]; <> << SIGNALS parseError if r is malformed.>> <<>> END.