<> <> <> <> <> 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.