DIRECTORY IO USING [STREAM], Rope USING [ROPE]; Boole: CEDAR DEFINITIONS = BEGIN Expression: TYPE = REF; Variable: TYPE = REF; true: READONLY Expression; false: READONLY Expression; Not: PROC [expr: Expression] RETURNS [result: Expression]; And: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ true] RETURNS [result: Expression]; Or: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ false] RETURNS [result: Expression]; Xor: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ false] RETURNS [result: Expression]; Nand: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ true] RETURNS [result: Expression]; Nor: PROC [expr1, expr2, expr3, expr4, expr5: Expression _ false] RETURNS [result: Expression]; AndList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; OrList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; XorList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; NandList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; NorList: PROC [exprs: LIST OF Expression] RETURNS [result: Expression]; If: PROC [cond, then, else: Expression] RETURNS [result: Expression]; EqualVar: PROC [var1, var2: Variable] RETURNS [BOOL]; Equal: PROC [expr1, expr2: Expression] RETURNS [BOOL]; Eval: PROC [var: Variable, expr: Expression] RETURNS [whenTrue, whenFalse: Expression]; FullEval: PROC [expr: Expression, evalVar: EvalVar] RETURNS [Expression]; EvalVar: TYPE = PROC [Variable] RETURNS [Expression]; FindVar: PROC [expr: Expression] RETURNS [var: Variable]; EnumerateVars: PROC [expr: Expression, enumVar: EnumVar]; EnumVar: TYPE = PROC [Variable]; HasVar: PROC [expr: Expression, var: Variable] RETURNS [found: BOOL _ FALSE]; PutExpr: PROC [out: IO.STREAM, expr: Expression, deep: INT _ LAST [INT], putRefAny: PROC [IO.STREAM, Variable] _ NIL]; GetExpr: PROC [in: IO.STREAM, getRefAny: PROC [IO.STREAM] RETURNS [Variable] _ NIL] RETURNS [expr: Expression]; ToRope: PROC [expr: Expression, deep: INT _ 5] RETURNS [Rope.ROPE]; FromRope: PROC [rope: Rope.ROPE] RETURNS [Expression]; Case: PRIVATE PROC [whenTrue, whenFalse: Expression] RETURNS [case: ATOM]; END. ΄Boole.mesa Copyright Σ 1985, 1986, 1987 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet July 31, 1985 3:03:17 pm PDT Bertrand Serlet April 2, 1987 9:34:37 pm PST Barth, August 26, 1986 9:58:59 am PDT Theory This interface defines the basic functions for manipulating Boolean expressions. Expressions may be: constants among {true, false}; variables: any REF. Variables are tested for equality using the REF Equal predicate, apart from ROPEs which compares using Rope.Equal, and REF INT which compares the INTs. expressions created by operators such as Not, And, Or, If, etc ... . Types and Constants Operators returning Expressions Useful operator computing: Or[And[cond, then], And[Not[cond], else]]. Other operations NIL means unknown when returned from FullEval or EvalVar. NIL if no var found or insignificant. Variables which are ROPE or REF INT are handled without calling putRefAny. Variables which are ROPE or REF INT are handled without calling getRefAny Short cut for PutExpr Short cut for GetExpr Private operations that depend on the representation case belongs to {$Case11, $Case00, $Case10, $Case01, $Case1X, $Case0X, $CaseX1, $CaseX0, $CaseXX, $CaseXY} Κε˜– "Cedar" stylešœ ™ JšœH™HJ™7J™,Icode™%—J˜šΟk œ˜ Jš œœœœœ˜%—J˜JšΟnœœ œ˜ head™IbodyšœR™Ršœ™IitemšœΟbœŸœ™Nš œœ/œHœœ™¬Nš œ)ŸœŸœŸœŸœ ™D——™Kšœ œœ˜Kšœ œœ˜K˜Kšœœ ˜Kšœœ ˜—šœ™šžœœœ˜:K˜—KšΠbnœœ8œ˜^Kšžœœ9œ˜^Kšžœœ9œ˜_Kšžœœ8œ˜_šžœœ9œ˜_K˜—Kš žœœ œœ œ˜GKš žœœ œœ œ˜FKš žœœ œœ œ˜GKš žœœ œœ œ˜Hš žœœ œœ œ˜GK˜—šžœœ œ˜EK™E——™šžœœœœ˜5K˜—šžœœœœ˜6K˜—šžœœ#œ#˜WK™—šžœœ&œ˜IKšœ œœ œ˜5Kšœ6™9K˜—šžœœœ˜9K™%K˜—šž œœ&˜9Kšœ œœ ˜ K˜—š žœœ#œ œœ˜MK™—šžœœœœœœœœœœœ˜vJšœJ™JJ˜—šžœœœœ œœœœœœ˜oJšœI™IJ™—š žœœœœœ˜CJšœ™J˜—šžœœ œœ˜6Jšœ™——™4š žœœœ#œœ˜JJšœj™j——J˜Jšœ˜—…—h