DIRECTORY IO USING [STREAM], Rope USING [ROPE]; BE: CEDAR DEFINITIONS = BEGIN Expression: TYPE = REF; Variable: TYPE = REF; Node: TYPE = REF NodeRec; NodeRec: TYPE = RECORD [ op: Operator, exprs: SEQUENCE size: NAT OF Expression]; Operator: TYPE = REF OperatorRec; OperatorRec: TYPE = RECORD [ name: Rope.ROPE, data: REF, -- for example a copy of the celltype to use for layout evalProc: EvalProc]; true: READONLY Expression; false: READONLY Expression; unknown: READONLY Expression; notOpr, andOpr, orOpr, nandOpr, norOpr, xorOpr, xnorOpr, ifOpr: Operator; RegisterOp: PROC [name: Rope.ROPE, evalProc: EvalProc] RETURNS [op: Operator]; EvalVar: TYPE = PROC [var: Variable] RETURNS [Expression]; EvalProc: TYPE = PROC [expr: Expression, evalVar: EvalVar] RETURNS [Expression]; FullEval: EvalProc; 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]; Not: PROC [expr: Expression] RETURNS [Expression]; And: PROC [e1, e2, e3, e4, e5: Expression _ NIL] RETURNS [Expression]; Or: PROC [e1, e2, e3, e4, e5: Expression _ NIL] RETURNS [Expression]; Xor: PROC [e1, e2, e3, e4, e5: Expression _ NIL] RETURNS [Expression]; Nand: PROC [e1, e2, e3, e4, e5: Expression _ NIL] RETURNS [Expression]; Nor: PROC [e1, e2, e3, e4, e5: Expression _ NIL] RETURNS [Expression]; AndList: PROC [exprs: LIST OF Expression] RETURNS [Expression]; OrList: PROC [exprs: LIST OF Expression] RETURNS [Expression]; XorList: PROC [exprs: LIST OF Expression] RETURNS [Expression]; NandList: PROC [exprs: LIST OF Expression] RETURNS [Expression]; NorList: PROC [exprs: LIST OF Expression] RETURNS [Expression]; If: PROC [cond, then, else: Expression] RETURNS [result: Expression]; END. ήBE.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Last Edited by: Louis Monier September 17, 1986 7:24:31 pm PDT Theory This interface defines the basic functions for representing Boolean expressions. It does not use any canonical representation and new operators can be registered. Expressions may be: 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. constants among {true, false}; expressions created by registered operators such as Not, And, Or, If, etc ... . Types and Constants Basic operations returns NIL if unknown 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 Most usual Boolean Operators returning Expressions Useful operator computing: Or[And[cond, then], And[Not[cond], else]]. Κ ˜– "Cedar" stylešœ™Icode– "Cedar" stylešœ Οmœ1™—J˜šΟk œ˜ Jš žœžœžœžœžœ˜%—J˜JšΟnœžœž œž˜head™Ibodyšœ£™£šœ™Iitemš œžœ/žœHžœžœ™¬NšœΟbœ œ™Nš œ4 œ œ œ œ ™O——™Kšœ žœžœ˜Kšœ žœžœ˜K˜Kšœžœžœ ˜šœ žœžœ˜K˜ Kšœžœžœžœ ˜)—Kšœ žœžœ ˜!šœ žœžœ˜Kšœ žœ˜KšœžœΟc7˜CKšœ˜—K˜Kšœžœ ˜Kšœžœ ˜Kšœ žœ ˜KšœI˜IK˜KšŸ œžœ žœžœ˜N—™Kšœ žœžœžœ˜:Kšœ žœžœ&žœ˜PK˜šŸœ ˜Kšœžœ ™K˜—šŸœžœžœžœžœžœžœžœžœžœžœ˜vJšœJ™JJ˜—šŸœžœžœžœ žœžœžœžœžœžœ˜oJšœI™IJ™—š Ÿœžœžœžœžœ˜CJšœ™J˜—šŸœžœ žœžœ˜6Jšœ™——šœ2™2šŸœžœžœ˜2K˜—KšΠbnœžœ#žœžœ˜FKšŸœžœ#žœžœ˜EKšŸœžœ#žœžœ˜FKšŸœžœ#žœžœ˜GšŸœžœ#žœžœ˜FK˜—Kš Ÿœžœ žœžœ žœ˜?Kš Ÿœžœ žœžœ žœ˜>Kš Ÿœžœ žœžœ žœ˜?Kš Ÿœžœ žœžœ žœ˜@š Ÿœžœ žœžœ žœ˜?K˜—šŸœžœ žœ˜EK™E——J˜Jšžœ˜—…—²š