<<>> <> <> <> <> <<>> DIRECTORY Rope, MathObjects, MathStructures; MathExprs: CEDAR DEFINITIONS ~ BEGIN <> ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; Object: TYPE = MathObjects.Object; <> Expr: TYPE = Object; MathExprData: TYPE ~ REF MathExprDataRep; -- external abstract type MathExprDataRep: TYPE ~ RECORD [ SELECT type:* FROM atom => [ method: ATOM, -- type of entity, e.g. $integer, $real, $symbol value: ROPE -- atomic value, e.g. integer as rope. Any legal name (e.g. Greek letter, subscripted variable, etc.) should be an atomic Expr of type $symbol (or we can have types $greekSymbol, $decoratedSymbol, etc., or $name ...) ], compound => [ method: ATOM, -- operator subObjects: LIST OF Object _ NIL -- operands ] ENDCASE ]; <> None - no Domain-specific data <> DomMake: PROC RETURNS [domain: Object]; <> <> <> <<>> <> EltToDisplayObject: MathObjects.UnaryOp; <> <> <> <> <> <> <> <> << >> EltRead: MathObjects.ReadOp; <> <> <<>> LegalFirstChar: MathObjects.LegalFirstCharOp; EltFromRope: MathObjects.FromRopeOp; EltToRope: MathObjects.ToRopeOp; <> EltLBKey: MathObjects.ToRopeOp; <> EltWrite: MathObjects.WriteOp; WidenOther: MathObjects.BinaryOp; <> <> <> CanWidenOther: MathObjects.BinaryPredicate; <> <> NarrowOther: MathObjects.BinaryOp; <> <> CanNarrowOther: MathObjects.BinaryPredicate; <> WidenThis: MathObjects.UnaryOp; <> <> <> <> <<>> NarrowThis: MathObjects.UnaryOp; <> <> <> <<>> <> GetNameDomainData: MathObjects.GetDomainDataProc; <> <> <<>> Data1: MathObjects.UnaryOp; <> <<>> Data2: MathObjects.UnaryOp; <> <> Flavor: MathObjects.FlavorOp; <> <> <> <> DomToRope: MathObjects.ToRopeOp; <> DomName: MathObjects.ToRopeOp; <> DomLBKey: MathObjects.ToRopeOp; <> DomData: MathObjects.UnaryToListOp; <> <<>> IsNameDomain: MathObjects.UnaryPredicate; <> MakeName: MathObjects.ListImbedOp; <> <<>> MakeElementNameData: PROC [field1, field2] RETURNS [elementData: ElementNameData]; <> GetNameElementData: MathObjects.GetElementDataProc; <> <> <<>> Field1: MathObjects.UnaryOp; <> <<>> Field2: MathObjects.UnaryOp; <> <> BinaryOp: MathObjects.BinaryOp; UnaryOp: MathObjects.UnaryOp; END.